run-stack 0.4.4

One command to boot a full local stack in Docker: API, Vite apps, Expo mobile, desktop renderer, database, mail and a status dashboard.
Documentation

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 tables in .run/run.config.toml (object-of-object: each [essential.<service>]). Older JSON configs are migrated to TOML automatically on the next command (and on self-update).

[essential.backend]
[essential.postgres]
[essential.redis]

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.toml, which run-stack init (or a migrated run.config.json) creates.

License

MIT