Installation
Linux
Requires systemd
Lerd runs every container as a Podman Quadlet and every worker as a systemd user service, so a systemd-based distro is required. OpenRC (Gentoo, Artix-openrc, Alpine), runit (Void, Artix-runit), s6, and sysvinit-based distros (Devuan) are not supported.
Tested and known-good: Ubuntu, Fedora, Arch, Debian, Mint, Pop!_OS, openSUSE, CachyOS, Omarchy. Any systemd distro should work.
One-line installer (recommended)
curl -fsSL https://raw.githubusercontent.com/geodro/lerd/main/install.sh | bashwget -qO- https://raw.githubusercontent.com/geodro/lerd/main/install.sh | bashgit clone https://github.com/geodro/lerd
cd lerd
make build
make install # installs to ~/.local/bin/lerd
make install-installer # installs lerd-installer to ~/.local/bin/The installer will:
- Check and offer to install missing prerequisites (Podman, NetworkManager, unzip)
- Download the latest
lerdbinary for your architecture (amd64 / arm64) - Install it to
~/.local/bin/lerd - Add
~/.local/binto your shell'sPATH(bash, zsh, or fish) - Automatically run
lerd installto complete environment setup
DNS setup requires sudo
lerd install writes to /etc/NetworkManager/dnsmasq.d/ and /etc/NetworkManager/conf.d/ and restarts NetworkManager. This is the only step that requires sudo.
After install, reload your shell or open a new terminal so PATH takes effect.
lerd install will:
- Create XDG config and data directories
- Create the
lerdPodman network - Download static binaries: Composer, fnm, mkcert
- Install the mkcert CA into your system trust store
- Write and start the
lerd-dnsandlerd-nginxPodman Quadlet containers - Enable the
lerd-watcherbackground service (auto-discovers new projects) - Add
~/.local/share/lerd/binto your shell'sPATH
Install from a local build
If you built from source and want to skip the GitHub download:
make build
bash install.sh --local ./build/lerdUpdate
lerd updateFetches the latest release from GitHub, downloads the binary for your architecture, and atomically replaces the running binary. No restart needed.
You can also re-run the installer:
curl -fsSL https://raw.githubusercontent.com/geodro/lerd/main/install.sh | bash -s -- --updatewget -qO- https://raw.githubusercontent.com/geodro/lerd/main/install.sh | bash -s -- --updateUninstall
lerd uninstallStops all containers, disables and removes Quadlet units, removes the watcher service, removes the binary, tears down the lerd podman network (including aardvark-dns runtime state), and cleans up the PATH entry from your shell config.
Four opt-in prompts before finishing:
- Remove all config and data — deletes
~/.config/lerdand~/.local/share/lerd(takes yoursites.yaml, bundled binaries, TLS certs, and all service data with it). - Remove MCP integration — unregisters lerd from Claude Code, Cursor, Windsurf, and Junie at user scope, removes
~/.claude/skills/lerd/,~/.cursor/rules/lerd.mdc, and strips the lerd block from~/.junie/guidelines.md. Also runs across every registered site to clean the same files per-project. - Uninstall mkcert CA — runs
mkcert -uninstallso browsers and OS trust stores stop trusting the lerd CA thatinstalloriginally added. - Purge lerd-built container images — removes
lerd-php*-fpm:local,lerd-custom-*:local, andlerd-dnsmasq:local. Upstream pulled images (mysql/redis/postgres/etc.) are deliberately left alone; they're expensive to re-pull and your database/app data lives in host bind mounts, not inside the images, so nothing is lost by keeping them.
To answer yes to every prompt without interaction:
lerd uninstall --forceCheck prerequisites only
bash install.sh --checkmacOS
Install via the Homebrew tap:
brew install geodro/lerd/lerd
lerd installPodman is installed automatically as a Homebrew dependency. lerd install sets up Podman Machine, DNS, and nginx on first run.
Update:
brew upgrade lerd
lerd installUninstall:
lerd uninstall
brew uninstall lerd