Scattered terminals
A tab per process, launched by hand in the right order, every single time.
Stacksmith
BetaLocal dev stack control for macOS
Run your whole local stack (apps, workers, jobs, and tunnels) from one YAML file. Stacksmith keeps dependency-aware startup, readiness, logs, and diagnosis tied to the component that matters.
Try it free for 7 days, no licence key required.
Free 7-day trial. Buy any time to keep using it, your work is never locked away.
Requires macOS 26 · Apple silicon · Notarized
The problem
Running a local stack means starting processes by hand in the right order, memorising ports, guessing what's actually ready, and scrolling scattered logs the moment something breaks.
A tab per process, launched by hand in the right order, every single time.
Is the API up? Did the worker connect? You refresh, retry, and hope.
When something dies you dig through logs to work out which thing failed, and why.
Stacksmith replaces all of it with one declarative file and one native window.
Control surface
Stacksmith turns a project folder into an organized runtime surface, so each process has clear state, controls, logs, and dependency context.
Foreground services with ports, URLs, and health checks.
Queue runners and background processes that wait for dependencies.
One-shot commands that complete, fail, and can be rerun.
Public URLs forwarded to declared local apps.
Live stdout, stderr, and system lines tied to each component.
Role-aware failure evidence and next actions.
Workflow
The same declared stack powers startup order, readiness checks, runtime monitoring, and incident evidence.
Declare roles, ports, links, jobs, tunnels, env, and dependencies.
Start All respects dependency order, manual jobs, health checks, and ports.
Stacksmith tracks lifecycle state, logs, readiness, and recent failures.
Diagnosis points to the affected component, evidence, and next action.
Live logs
Stdout, stderr, and system events stream in real time with severity parsing and ANSI cleanup, scoped to each app, worker, job, and tunnel, so you read the failure, not the noise.
Diagnosis
Port conflicts, health failures, blocked workers, failed jobs, and tunnel issues resolve into a deterministic brief with the affected component and next action.
Port 8080 already in use
API Server blocks Worker and Tunnel
bind tcp :8080: address already in useRelease the port, then restart API Server
On-device intelligence
When a component fails, Stacksmith can turn the same confirmed evidence into a plain-language incident brief using Apple's on-device Foundation Models. No cloud round-trip, no API keys, no telemetry. The language model runs locally and every generated explanation is validated before it shows.
API Server failed to bind port 8080. The port is already in use by another process.
This blocks Background Worker and the stripe_webhook tunnel, which both depend on a healthy API.
Release the port, then restart API Server to unblock the stack.
Configuration
A single .stacksmith.yml gives each process an explicit role. References resolve before validation, and structured env keeps secrets out of command strings.
1version: 12name: my_awesome_app3 4apps:5 api:6 name: API Server7 command: cargo run --bin api8 cwd: .9 env:10 DATABASE_URL: ${secret.DATABASE_URL}11 STRIPE_KEY: ${dotenv.STRIPE_KEY}12 port: 808013 url: http://localhost:${apps.api.port}14 health: ${apps.api.url}/health15 16workers:17 worker:18 name: Background Worker19 command: cargo run --bin worker20 cwd: .21 depends_on:22 api: healthy23 24jobs:25 migrate:26 name: Migrate Databases27 command: cargo run --bin migrate28 cwd: .29 env:30 DATABASE_URL: ${secret.DATABASE_URL}31 depends_on:32 api: port_listening33 34tunnels:35 stripe_webhook:36 command: ngrok http --url=${tunnels.stripe_webhook.public_url} ${apps.api.port}37 cwd: .38 public_url: https://guiding-lucky-tick.ngrok-free.app39 forwards_to: api40 depends_on:41 api: healthy42 43links:44 api: ${apps.api.url}Secrets & environment
Reference Keychain secrets or dotenv values from structured env. Stacksmith resolves them at launch, injects them into the child process, and keeps resolved values out of logs and runtime snapshots.
1apps:2 api:3 command: cargo run --bin api4 env:5 DATABASE_URL: ${secret.DATABASE_URL}6 STRIPE_KEY: ${dotenv.STRIPE_KEY}MCP and licensing
The bundled MCP helper exposes Stacksmith state over a local socket while the app remains the owner of runtime processes. Licensing and project secrets use the macOS Keychain, with cached entitlement for offline use.
Read MCP setupProject state, components, logs, diagnosis, and validation.
Start, stop, restart, and run job tools require component-control permission.
Activated installations keep using cached entitlement when licensing is temporarily unavailable.
Download the 7-day free trial and replace scattered terminals with one local control surface. No licence key needed to start.
BetaBuy now for $9.99 and lock it in. The price rises to $19.99 when Stacksmith leaves beta.
Free 7-day trial. Buy any time to keep using it, your work is never locked away.
Requires macOS 26 · Apple silicon · Notarized