run-stack 0.4.6

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
commands [--raw]             every CLI command in a table
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

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.

Config

Workspace settings live in .run/run.config.toml (one table per section). Older .run/run.config.json files are migrated to TOML automatically on the next command, and on rst self-update.

[project]
COMPOSE_PROJECT_NAME = "myapp"
PROJECT_LABEL = "My App"

[infrastructure]
DB_ENGINE = "postgres"
RUN_REDIS = true

[essentials]
backend = true
postgres = true
redis = true

rst up --essential starts only the services set to true under [essentials]. Set a service to false (or omit it) to leave it out.

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