Skip to main content
Hoox provides a comprehensive local development workspace designed to emulate your production Cloudflare edge environment. Developers can choose between running microservices natively on local Wrangler V8 isolates or inside completely isolated, containerized Docker stacks, with real-time log tailing and TUI diagnostics.

⚡ 1. Dev Runtime Selection: Native vs. Docker

The hoox dev start command orchestrates the boot sequence for all enabled workers and supports two execution runtimes:

The Guided Startup Flow

When you run hoox dev start:
  1. Wrangler Version Verification: Probes your global/local Wrangler package. If Wrangler is outdated, it prompts an advisory upgrade warning. The warning shows the current vs minimum version and offers a one-line update command.
  2. Docker Environment Probing: Checks if the Docker daemon is active and docker-compose.yml is present in the workspace.
  3. Runtime Preference Lock: If both runtimes are available, the CLI prompts you to select your preference. This choice is written to your wrangler.jsonc file under the dev runtime block, bypassing future prompts.

🐳 2. Docker Compose Orchestration & Profiles

For full stack containerized development, Hoox divides operations into three Docker Compose profiles in your root docker-compose.yml:
Only hoox (8787) and dashboard (8794) are published to the host. The remaining workers are reachable only via service bindings on the hoox-net bridge network — the same topology as production Cloudflare Workers Service Bindings.

📍 3. Local Port Mapping Registry

In the local environment, each V8 dev instance mounts to a dedicated host port. Ensure no other applications are occupying these ports before launching:

🛡️ 4. Local Environmental Mocking (.dev.vars)

Because production secrets are locked inside Cloudflare’s secured key vaults, Wrangler dev uses local .dev.vars files located inside each worker’s directory to mock API keys and credentials:
.dev.vars files contain local plaintext keys and are excluded from git index tracking via .gitignore. Never remove these files from .gitignore or check them into your repository.

If local tests fail with Time-Stamp Expired errors when calling exchange APIs, check that your local machine’s NTP system clock is synchronized: sudo ntpdate pool.ntp.org (or check date/time settings on macOS/Windows)!

🏃 5. Shell Helpers: Running Commands Across All Workers

The scripts/helpers.sh file provides a wx() function that runs any CLI command in every worker directory — useful for bulk operations like regenerating types, running typecheck, or installing dependencies.

Installation

Usage

Filtering

Use WX_FILTER to target specific workers by glob pattern:

Custom Path

Set WX_WORKERS_DIR if your workers live elsewhere:

🕸️ 6. Codebase Dependency Graph

Hoox includes a function-level dependency graph extractor that maps all exported symbols, imports, calls, type references, and service bindings across the entire monorepo.
This runs scripts/extract-graph.ts (ts-morph) and scans 917 source files across all 14 workspaces. During extraction, a live progress bar shows each phase with elapsed time:
The 8 extraction phases (exports → imports → extends/implements → type refs → calls → service bindings → workspace deps → filtering) complete in ~20–25s on average.

Outputs

Quick Render

Use graph.json as AI/LLM context for codebase-aware queries, or paste graph.dot into Edotor for instant browser visualization without installing Graphviz.

🔗 Next Steps

  • Testing Standards — Run unit and integration tests using Bun’s native test runner.
  • Debugging Runbook — Debug local and remote isolates, tail logs, and trace queries.
Last modified on July 20, 2026