Guide

Getting Started

stack runs your project's languages, databases, and dev server as plain 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 — PowerShell & cmd macOS — coming soon Linux — coming soon

1. Install

Available now:

powershell installer
$ irm https://github.com/sanayasfp/stack/releases/latest/download/stackenv-installer.ps1 | iex
cargo
$ cargo install stackenv

The crate is published as stackenv (stack was already taken on crates.io by an unrelated project) — it still installs a stack command.

Or grab the zip directly from the latest release and extract it yourself.

winget, Scoop, and Chocolatey packages are coming soon — not published yet.

2. Run stack setup

One command, once. It wires the shell hook into your PowerShell profile (so activation runs on every prompt) and installs the three tools stack delegates to — vfox, uv, and Caddy — at the pinned versions stack is built and tested against.

powershell
$ stack setup
added the stack hook for pwsh
checking vfox/uv/caddy...
  vfox: OK (1.0.11)
  uv: OK (0.11.7)
  caddy: OK (2.11.4)
tip: for curl/Postman/non-browser clients to also resolve *.localhost, consider
Acrylic DNS Proxy (optional, one-time, needs admin rights)

Restart your terminal (or reload $PROFILE) once, so the new hook takes effect in the current session.

3. Create a project

1

Scaffold a manifest

powershell
$ stack new acme-api
domain: acme-api.localhost
Add a language? yes
  language name (e.g. php, node, python): php
  version: 8.3.1
Add a language? no
Add a service? yes
  service name (e.g. mysql, postgres, mongo): mysql
  version: 8.0.35
Add a service? no
created acme-api\stack.toml
next: cd into it, add a [run] command when you know it, then `stack up`

stack new prompts you through it interactively and writes a commented stack.toml. You can also hand-write one — see the Manifest Reference.

2

Add how it runs

Open stack.toml and set [run] — the one process that needs a stable URL, usually your app's own dev server:

acme-api/stack.toml
[run]
command = "php -S 127.0.0.1:{port} -t public"
3

Bring it up

acme-api — stack up
$ cd acme-api
$ 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)
    schema 'acme_api' — automatic creation not yet implemented; create it manually if needed
  run: php -S 127.0.0.1:52140 -t public  (pid 41244, port 52140)
  log: C:\Users\you\.stack\logs\acme-api.log
  routed: http://acme-api.localhost -> 127.0.0.1:52140

4. Everyday use

Once stack setup has run, activation is ambient — no daemon to remember to start. cd into any folder with a stack.toml and your pinned php/node/python are already first on PATH, for anything you run by hand: composer install, npm install, a test runner. Leave the folder and PATH resets. You only need stack up for the one process that needs a real routed domain and needs to keep running without a terminal watching it.

When you're done for the day:

powershell
$ stack down --all

Stops every project process and every shared service — the actual 0% CPU point, not just the one project you were looking at.

Next

Manifest Reference — every stack.toml field, with defaults. CLI Reference — every subcommand. Examples — four real projects (FastAPI, Node, React, Laravel), each showing a different part of the manifest instead of the same happy path four times.