# stack
**Native, zero-container multi-project dev environment manager. No Docker, no VMs.**
stack runs your project's languages, databases, and dev server as plain
child processes and routes a real local domain to whichever one you're
working on — no containers, no idle hypervisor, nothing running you didn't
ask for.
**Windows — available now** (PowerShell & cmd) · macOS — coming soon · Linux — coming soon
[Documentation](https://sanayavo.com/stack/) · [Examples](examples) · [Changelog](https://sanayavo.com/stack/changelog.html)
## Quick look
```toml
# stack.toml
[project]
name = "acme-api"
[language]
php = "8.3.1"
[service.mysql]
version = "8.0.35"
[run]
command = "php -S 127.0.0.1:{port} -t public"
```
```shell
$ stack up
Loaded C:\Users\you\acme-api\stack.toml
project: acme-api
domain: acme-api.localhost
languages: ["php"]
services: ["mysql"]
php: C:\Users\you\.vfox\cache\php\v-8.3.1\...\php.exe -> PHP 8.3.1 (cli)
service.mysql: started (pid 41232, port 3306)
run: php -S 127.0.0.1:52140 -t public (pid 41244, port 52140)
routed: http://acme-api.localhost -> 127.0.0.1:52140
```
Every project pinning the same language+version shares one binary from a
central store — nothing copied per project. Every project pinning the same
service+version shares one running instance, isolated by schema.
## Install
```shell
or `cargo install stackenv` (published under `stackenv` since `stack` was already taken on crates.io — it still installs a `stack` command), or grab the zip directly from the [latest release](https://github.com/sanayasfp/stack/releases/latest).
winget/Scoop/Chocolatey packages are coming soon — not published yet. See [Getting Started](https://sanayavo.com/stack/getting-started.html) for the full list once they land.
Then, once:
```shell
stack setup
```
Wires the shell hook and installs the tools stack delegates to (vfox, uv,
Caddy) at pinned, tested versions.
## Why not Docker
Containers solve "works on every machine" by shipping an entire OS layer
per project. stack solves the same problem differently: pin exact versions
per project through the version managers you'd install anyway (vfox, uv),
share one binary across every project at that version, and run everything
as plain processes — no virtualization overhead, no idle daemon between
projects.
## License
Licensed under either of [Apache License, Version 2.0](LICENSE-APACHE) or
[MIT license](LICENSE-MIT) at your option.