This release adds activity-driven worker suspension, makes bun a first-class
JS runtime, and opens up how a PHP site's image is built. FrankenPHP reaches extension parity with
FPM, the dashboard grows a Laravel Doctor, a Resources widget and embedded service dashboards, and the MCP
server gains a logs tool. Underneath, the localhost/HTTPS, runtime-switch and shutdown paths
get hardened.
lerd now watches each site for activity and, after a configurable idle timeout, gracefully suspends that site's suspendable workers — queue, scheduler, Horizon, Reverb, the Stripe listener, and the host Vite dev server — bringing them back the moment the site is used again. The engine lives in lerd-watcher; worktrees keep their own per-branch timers, and Vite builds its assets once on suspend so the site keeps serving while idle. Off by default.
lerd idle on # enable globally (off by default) lerd idle timeout 30m # suspend after 30m of no activity lerd idle pin myapp.test # exempt a site from ever sleeping lerd idle status # per-site policy + last-active lerd idle off # disable + resume every worker
bun can now drive a site's JS install, dev, and build on the host, auto-selected for
bun projects or when Node is unmanaged and only bun is present — a one-click toggle in the Node dropdown,
the TUI picker, or lerd js:runtime. lerd never installs or version-manages bun; the user
installs it and bun upgrade self-updates.
lerd js:runtime bun # pin this site to bun (or node | auto) lerd php:bun install # musl bun into a persistent /root/.bun volume lerd php:bun version # report the in-container bun lerd php:bun remove # clear it and the shared volume
A PHP site gains two new ways to control the image it runs on. lerd php:pkg
bakes extra Alpine packages into the FPM image, persisted under php.packages so they survive
php:rebuild and base-image updates. For anything more, a project ships its own
Containerfile built FROM the lerd base and is served from it directly.
lerd php:pkg add imagemagick ghostscript # bake + rebuild lerd php:pkg list # what's layered on this version lerd php:pkg remove ghostscript # drop + rebuild
The FrankenPHP runtime reaches extension and debug-tooling parity with FPM. lerd builds a derived image carrying the same runtime extension set the FPM image ships — present from first boot — and the dump bridge, Debug window and Xdebug toggle all apply to a FrankenPHP site. Only the SPX profiler stays FPM-only.
| Capability | FPM | FrankenPHP |
|---|---|---|
| Runtime extensions (redis, gd, pdo, intl, imagick…) | ✓ | ✓ new |
| dump bridge · Debug window · Xdebug toggle | ✓ | ✓ new |
| Octane auto-reload on file changes | — | ✓ octane:reload |
| In-container Pest browser testing | ✓ | ✓ shared FPM container |
xdebug pause into a running worker | ✓ | — FPM-only (xdebugctl) |
| SPX profiler | ✓ | — per-request only |
The dashboard and the AI surface both grow. A Laravel Doctor runs the framework's
own health checks with one-click fixes, a Resources widget accounts for lerd's whole footprint, and
RabbitMQ and RedisInsight surface their management UIs same-origin inside lerd-ui. The MCP server
gains an eleventh grouped tool, logs.
On-demand health checks sourced from the framework definition, with one-click fixes. Worktree-aware, warns only on required env keys. Also a TUI tab.
Total CPU and memory across the lerd-* containers plus lerd's own host processes, with a ranked list of the heaviest.
Reclaim disk from the App Logs tab behind a confirm, and title site tiles by a custom Laravel APP_NAME.
RabbitMQ and RedisInsight UIs proxied same-origin under /_svc/, no new tab.
bun picker, FrankenPHP version limit, idle display, Doctor tab, open a service dashboard with O, workers grouped by site.
Simplified Chinese, Japanese, Romanian, Italian, Polish, Vietnamese — fourteen total.
Alongside the features, this release tightens the localhost/HTTPS, runtime-switch, FrankenPHP relink and shutdown paths, and clears dependency advisories.