Local database and service manager for macOS.
Create global named instances of MySQL, MariaDB, PostgreSQL, Valkey, Mailpit, Meilisearch, and MinIO — then connect any Laravel project to them. Built to sit alongside Laravel Valet without Docker.
- Services — MySQL, MariaDB, PostgreSQL, Valkey, Mailpit, Meilisearch, and MinIO
- Global instances — one MySQL for all your apps, not a container per project
- Laravel-friendly —
stackd envoverwrites your.envfor every installed service (and uses your project folder as the DB name) - No Docker required — downloads (or builds) native binaries on demand
- macOS native — binds to
127.0.0.1, optional LaunchAgent start-at-login - TablePlus & browser ready —
stackd openlaunches the right client
- macOS
- PHP 8.2–8.5
- Xcode Command Line Tools (Valkey / MariaDB compile)
cmakeand OpenSSL for MariaDB (stackd can install these via Homebrew when prompted)- Avoid Homebrew MySQL/Postgres/Redis on the same ports —
stackd createdetects them and can uninstall
composer global require vblinden/stackdThis installs the prebuilt PHAR from the package (builds/stackd). Make sure Composer's global bin directory is on your PATH.
curl -fsSL https://raw.githubusercontent.com/vblinden/stackd/master/bin/install.sh | bashOr install manually:
curl -fsSL https://github.com/vblinden/stackd/releases/latest/download/stackd -o stackd
chmod +x stackd
sudo mv stackd /usr/local/bin/stackd
stackd doctor| Service | Username | Password |
|---|---|---|
| MySQL / MariaDB | root |
(empty) |
| PostgreSQL | laravel |
(empty) |
| MinIO | stackd |
secretkey |
| Meilisearch | — | random master key (shown on create) |
# Interactive picker
stackd create
# Or create directly
stackd create mysql
stackd create valkey
stackd create mailpit
# From a Laravel project root — writes .env for all installed stackd services
stackd env
stackd env --show # print only
# Open clients
stackd open mysql # TablePlus
stackd open mailpit # Browser
# Check health
stackd doctor
stackd statuscreate starts the instance immediately and can optionally add it to start-at-login.
| Command | Description |
|---|---|
stackd create / add |
Create (and start) a service instance |
stackd start [service] [name] |
Start an instance, or all instances when no service is given |
stackd stop [service] [name] |
Stop an instance, or all instances when no service is given |
stackd restart <service> [name] |
Restart an instance |
stackd status |
Show all instances |
stackd list |
List instances as a table |
stackd delete / remove / uninstall |
Delete an instance and its data |
stackd env [service] [name] |
Write .env keys for installed stackd services |
stackd env --show |
Print variables instead of writing |
stackd open <service> [name] |
Open TablePlus or the web UI |
stackd logs <service> [name] |
Tail instance logs |
stackd doctor |
Diagnose install & dependencies |
stackd autostart … |
Manage LaunchAgent start-at-login |
Run stackd with no arguments for the home screen (running services + command list).
Instances live under ~/.stackd/:
~/.stackd/
├── registry.json # Instance metadata
├── autostart.json # Start-at-login entries
├── binaries/ # Downloaded / built binaries
├── instances/
│ └── mysql/default/
│ ├── data/
│ ├── logs/
│ └── …
└── logs/
Binaries are fetched the first time you create a service. MariaDB and Valkey compile locally; other services use official release archives.
Services are tuned for local macOS use: smaller memory footprints, less aggressive disk sync, and background process priority so idle instances are easier on battery. Restart existing instances (stackd restart <service>) to pick up the new settings.
composer install
php stackd app:build stackd --build-version=v1.0.4
php builds/stackd --versionCommit builds/stackd before tagging. Packagist serves that PHAR via composer global require; tagged releases (v*) also attach it to the GitHub release.
Issues and pull requests are welcome on GitHub.