run-stack
One command to boot a full local stack in Docker: API, Vite apps, Expo mobile, desktop renderer, database, mail and a status dashboard.
Status: an in-progress Rust port. The complete, maintained tool is the npm package
@dev-ahmed/run-stack. This crate covers the commands below and nothing else yet. Use it alongside the npm version, not instead of it.
What works
up [--build] [--essential] [service...] start the stack
down [service...] stop it, keep data
ps / status [service...] service status
logs [service...] follow logs
restart [--build] [--essential] [svc...] down then up
shell / sh [service] shell into a container
apps / list the apps this workspace runs
ports host ports
config the resolved configuration
explain <compose args> print the docker command, run nothing
env [KEY] the environment compose is given
generate write the compose overlays, start nothing
self-update [--verbose] install latest from crates.io, migrate configs
--essential starts only the services listed under the essential object in
.run/run.config.json (object-of-object: each key is a compose service). Older
configs get that block filled in automatically on the next command (and on
self-update).
"essential":
The binary carries docker-compose.yml, the Dockerfiles and the container
entrypoints inside itself, so it needs nothing else installed.
init, create, the mobile commands, the dashboard and deploy are still the
shell version.
Why a port
The npm entry point costs ~600 ms per command before any work starts, because a Node process launches to spawn a bash process. Measured on an M-series Mac:
| time | |
|---|---|
rst --version via the npm CLI |
537 ms |
| the same in Rust | 21 ms |
Speed is the reason to drop Node. Rust is for the single binary — no bash, no python3, no Node on the user's machine — and for making the config and prompt machinery typed.
Requirements
Docker with Compose v2, and a workspace containing .run/run.config.json,
which the npm version's run-stack init creates.
License
MIT