Article URL: https://github.com/lerd-env/lerd Comments URL: https://news.ycombinator.com/item?id=49127108 Points: 9 # Comments: 1

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. Lerd is built for PHP developers on Linux who want frictionless local development: automatic .test domains, per-project PHP versions, one-click HTTPS, zero Docker. Works with Laravel, Symfony, WordPress, Drupal, Magento, CakePHP, Statamic, and any custom PHP framework. 🌐 Automatic .test domains. One command gives a project a hostname and TLS that reissues before it expires, with no dnsmasq, no system resolver tweak and no sudo for the DNS bits. You can opt out of lerd-managed DNS for *.localhost, or toggle it later with dns:enable / dns:disable / dns:repair. 🔗 Site groups. Group related sites so a main site owns a base domain and the rest occupy its subdomains, with a shared or separate database per secondary. 🧱 Host-proxy sites. Run a Node, Python, Go or any non-PHP dev server on the host and have nginx serve it at a .test domain with HTTPS, git worktrees included. A wedged dev server can be bounced from the site header without reaching for a terminal. 🌳 First-class git worktrees. Auto-detected branch domains, per-worktree PHP and Node versions, optional database isolation, wildcard cert SANs for *.branch.site.test, and a per-branch Vite worker on the host. Add and remove them from a dashboard modal without touching the CLI. 🌍 Share a site. On your LAN with a stable port and a QR code, or publicly through ngrok, cloudflared, Expose, serveo or localhost.run, from the CLI or the dashboard's share menu. Set a Cloudflare base domain once and every share is served on <site>.<domain>, so a webhook or OAuth callback keeps its URL between runs, and ngrok runs from its published image on a machine that never installed it.