run-stack 0.6.2

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`]https://www.npmjs.com/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`.

```toml
[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