Open-source Herd-like local PHP development environment for Linux and macOS, with Windows supported via WSL2 (beta). Podman-native, rootless, with a built-in Web UI.
Lerd runs Nginx, PHP-FPM, and your services as rootless Podman containers,
designed for PHP developers on Linux and macOS, and on Windows through WSL2 (beta).
No Docker. No sudo. No system pollution. Just lerd link and your project
is live at project.test with HTTPS.
If you're a PHP developer on Linux and want frictionless local development β automatic .test domains, per-project PHP versions, one-click HTTPS, zero Docker β Lerd is built for you. Works with Laravel, Symfony, WordPress, Drupal, CakePHP, Statamic, and any custom PHP framework.
- π Automatic
.testdomains with one-command TLS, or opt out of lerd-managed DNS and use*.localhost(no dnsmasq, no system resolver tweak, no sudo for the DNS bits) - π Per-project PHP version (8.1β8.5, plus a frozen 7.4 / 8.0 legacy tier for hosted-on-the-old-stack projects), switch with one click
- β‘ FrankenPHP runtime per site as an alternative to shared PHP-FPM, with Laravel Octane and Symfony Runtime worker mode
- π¦ Node.js isolation per project (Node 22, 24)
- π₯οΈ Built-in Web UI with a dashboard root, live widgets, a global Cmd+K command palette, install/remove of PHP and Node versions from the System page, and seven dashboard languages (English, German, Spanish, French, Indonesian, Dutch, Portuguese)
- βοΈ Edit config in the browser β per-site and global nginx, per-version
php.ini,.envfiles, and database/service runtime tuning, each validated (nginx -twhere it applies), with timestamped backups and one-click restore - π§ͺ Tinker tab - in-browser PHP REPL per site with autocomplete (project models, composer helpers, PHP built-ins), live
php -lsyntax checking, and a collapsible tree view fordump()output. Works on Laravel (artisan tinker), Symfony, and any composer-based PHP project - π°οΈ Debug window that intercepts every
dump()/dd()and streams it to the dashboard, TUI (Dkey), MCP, andlerd dump tail, scoped per site and per worktree branch, with the original response left clean unless you flip passthrough on. The same window captures SQL queries with N+1 and slow-query detection, plus outgoing mail, rendered views, dispatched events, queued jobs, and outgoing HTTP, across both Laravel and Symfony, with optional opt-in capture of queue-worker activity - π₯ SPX profiler with one-click on/off, every PHP-FPM request becomes a flame graph viewable in a same-origin Profiler view in the dashboard. No FPM restart, no code changes, and
lerd profile runprofiles a one-shot artisan or CLI command - π» Terminal dashboard (
lerd tui) - btop-style TUI with live status, site detail pane, inline domain and version editing, shell drop-in, log tailing, and filter/sort β the same operations surface as the web UI, for tmux and SSH workflows - ποΈ One-click services: MySQL, PostgreSQL, Redis, Meilisearch, RustFS, Mailpit, Gotenberg, Stripe Mock, Reverb and more. Every default service is a YAML preset you can update, migrate, rollback, or reinstall in place, including a reset-data reinstall that auto-recreates linked sites' databases and buckets
- π³ First-class git worktrees with auto-detected branch domains, per-worktree PHP/Node versions, optional per-worktree database isolation (clone from main or empty), a per-worktree LAN-share proxy,
env_overridestemplating in.lerd.yamlfor multi-tenant apps, automatic wildcard cert SANs for*.branch.site.test, a built-in Vite dev server worker that runs on the host per branch, and a dashboard modal for adding and removing worktrees without touching the CLI - βοΈ Worker self-heal, failed queue, schedule, horizon, reverb, and stripe workers are surfaced everywhere (CLI, dashboard banner, TUI, MCP) and recovered with one click or
lerd worker heal - π Live logs for PHP-FPM, Queue, Schedule, Reverb, per site
- π Rootless & daemonless - Podman-native, no Docker required, dual-stack IPv4 + IPv6
- π€ MCP server - let AI assistants (Claude Code, Windsurf, Junie) manage your environment directly
- π§© Framework store - community definitions for Laravel, Symfony, WordPress, Drupal, CakePHP, Statamic with versioned auto-detection
- β‘ Framework-agnostic workers, env setup, and nginx proxy β driven by YAML definitions, not hardcoded
Lerd ships a built-in Model Context Protocol server. Connect it to Claude Code, Windsurf, JetBrains Junie, or any MCP-compatible AI assistant and manage your dev environment without leaving the chat.
lerd mcp:enable-global # register once, works in every projectThen just ask:
You: set up the project I just cloned
AI: β site_link()
β composer install
β env_setup() # detects MySQL + Redis, starts them, creates DB, generates APP_KEY
β setup() # storage:link + migrate for Laravel, doctrine:migrations:migrate for Symfony
β myapp β https://myapp.test ready
~50 tools available: scaffold new projects, run migrations, manage services, toggle workers, tail logs, enable Xdebug, manage databases, manage PHP extensions, park directories, switch runtimes between PHP-FPM and FrankenPHP, and more, all from your AI assistant.
π MCP documentation
| Lerd | DDEV | Lando | Laravel Herd | |
|---|---|---|---|---|
| Podman-native | β | π‘ | β | β |
| Rootless | β | β | β | β |
| Web UI | β | β | β | β |
| Terminal dashboard | β | β | β | β |
| Linux | β | β | β | β |
| macOS | β | β | β | β |
| Windows (WSL2) | π§ͺ | β | β | β |
| MCP server | β | β | β | β |
| Free & open source | β | β | β | β |
π‘ DDEV runs on Docker by default and can also use Podman as an alternative runtime; Lerd is built exclusively for rootless Podman.
π§ͺ Lerd's Windows support runs inside WSL2 and is currently beta, see the Windows (WSL2) guide.
curl -fsSL https://raw.githubusercontent.com/geodro/lerd/main/install.sh | bashUpdate later with:
lerd updateInstall via Homebrew:
brew install geodro/lerd/lerd
lerd installUpdate later with:
brew upgrade lerd
lerd installNote
See the installation docs for details.
cd my-laravel-project
lerd link
# β https://my-laravel-project.testlerd install already starts everything for you on first run, so you can lerd link immediately. Day-to-day:
lerd start # boot DNS, nginx, PHP-FPM, services, workers, UI
lerd stop # stop containers and workers (UI and watcher stay up)
lerd quit # full shutdown including UI, watcher, and tray
lerd autostart enable # boot lerd on every login
lerd status # health snapshotSee Start, Stop & Autostart for the full lifecycle reference.
Install community framework definitions from geodro/lerd-frameworks:
lerd framework search # list all available
lerd framework install symfony # auto-detects version from composer.lock
lerd framework install drupal@11 # explicit version
lerd framework list --check # compare local vs storeFrameworks auto-detect when you lerd link a project. Workers, env setup, nginx proxy, and setup commands are all driven by the framework definition β no hardcoded behavior.
MIT
