LerdPHP (@lerdphp) header
LerdPHP (@lerdphp) profile picture

Local PHP development for Linux and macOS. Automatic .test domains, per-project PHP, one-command TLS. Rootless Podman, open source. Built by @geodro

Joined September 2026
Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)Photo by LerdPHP (@lerdphp)
The queries look fine, the page is still slow, and now you are adding microtime calls to your own code like it is 2009. Lerd bundles the SPX profiler. Flip one switch and it captures your slow requests. Open one and you get a flame graph of the call stack, so the function that ate 400 ms is the widest bar on the screen, with the file it lives in beside it. It works on every PHP version Lerd runs, with no extension to compile and no php.ini to edit.
5
168
Ask an AI assistant why a page is slow and it will read your code and guess. The answer sounds right, and it often points at the wrong thing. Through Lerd's MCP server the assistant reads the site's real response times and picks the slowest routes. For each one it gets the N+1 and slow queries captured behind it, with the file and line that ran them, plus the hottest functions from an SPX profile when there is one. What it proposes then is the eager load or the index that fixes a problem somebody measured.
1
1
1
15
400
Plenty of apps are really several sites: a storefront, an admin panel, a blog, an API. Run them as separate projects and you lose the shared domain they have in production. Lerd's site groups put them under one base domain, as subdomains, and can have them share one database. You manage the group from the site header, add a site from a picker, and the group shows up together everywhere in the dashboard. That makes it a natural fit for multi-tenant apps and anything else that lives on subdomains.
1
1
15
466
Checking whether your branch is behind should not mean finding the right terminal tab first. Lerd puts Fetch, Pull and Push in the site header, next to the worktree tabs, for whichever checkout you have selected. A branch with no upstream gets a single Publish button instead, and the main checkout has a branch switcher that can create a branch from any base. Pull is fast-forward only and push is never forced. A branch that has diverged holds both back and tells you why.
11
361
Testing a newsletter on a copy of the production database is how real customers end up with a mail that says test test test. Lerd sends every mail your local sites produce to Mailpit, and its inbox sits inside the dashboard. Password resets, order confirmations, whatever the app sends, you see the rendered message, the HTML source and the headers, and nothing leaves your machine. Caught mail can also be scored for spam with SpamAssassin, and each message is stamped with the template that rendered it, so you know which view to fix.
1
12
311
Install the Meilisearch PHP client and you will need a Meilisearch server. lerd notices. It reads the composer packages your project requires and suggests the services they point at, with the reason, right on the site's overview. Add one in a click and lerd starts it and wires it into your .env. Removing a service from a site is just as easy, and it leaves the service and its data alone for your other projects. #Laravel #Composer
1
16
487
Most developers only learn a page is slow when a user complains. Lerd times every request nginx serves for your sites. Each site's overview shows the typical and p95 response time, the request count, the error rate, a histogram of response times, throughput over time, and the slowest routes. Because it comes from your own clicking around, you notice the route that went from 80 ms to 500 ms the day it happens, and you can open its slowest request to see why. #PHP #performance
1
1
27
627
Not everyone wants a browser tab open.Lerd tui is a full terminal dashboard, and 1.37 rebuilds it from the ground up. There is now one sidebar for the dashboard, your databases, PHP and Node, settings, your sites grouped by workspace, and your services. The dashboard leads with what needs attention, each fix one key away. ctrl+p opens a palette that reaches every page, site, worktree, service and action, matching words in any order. Regions are told apart by shade, taken from your terminal's own colours, so the TUI wears your theme. #terminal #TUI
2
43
1,670
Lerd 1.38 takes plugins. A plugin is a folder with a plugin.yaml and the scripts it names, in shell, Python or Node. It can add CLI commands, buttons in a site's Commands menu, hooks that run when something happens, tools for your AI assistant, a page in the dashboard, a tab on every site, and services and frameworks of its own. The Plugins page installs, updates and removes them, and shows everything a plugin adds before you install it: every command, tool and hook. The Sail import is the first thing to move out of Lerd and into a plugin. #PHP #opensource
1
1
19
555
Lerd 1.38 is out, and it runs on Windows. One installer takes a bare Windows machine to a working Lerd in three steps: it enables WSL, adds Ubuntu, and joins it to Windows. After that .test resolves in your Windows browser, wildcards included, and your sites survive a reboot. Same containers, same dashboard, same Lerd as on Linux. Also new: plugins. A folder with a plugin.yaml and a few scripts can add commands, dashboard pages, MCP tools or its own services. The first ones are up at plugins.lerd.sh, build yours and submit it, lerd plugin new gets you started. And Lerd now issues its own certificates, mkcert has been unmaintained since 2022. Free, open source, MIT.
5
4
1
46
397,720
Starting a new project should take a minute, not an afternoon. Lerd new is a wizard: pick the framework and version, and lerd scaffolds it with the framework's own installer, links it, gives it a .test domain with HTTPS, writes the config files that framework reads, and takes it through setup. Laravel, Symfony, WordPress and the rest of the store are all there. Prefer clicking? Create the same site from the dashboard's Add a site dialog. #Laravel #Symfony
1
2
30
852
Your PHP logs only tell half the story. When a page breaks in the browser, a JavaScript error, a fetch that returned 500 or an image that never loaded, the backend never hears about it. lerd 1.37 adds browser logs. Switch them on for a site and lerd injects a small script into its pages that reports uncaught errors, unhandled promise rejections, console warnings, failed requests and broken resources back to the dashboard. Every report is grouped by page view and tied to the PHP request that served that page, so you can go from a TypeError straight to the queries behind it. Frameworks can add presets for libraries like Livewire. #JavaScript #webdev
1
13
441
Most of the day your local databases run for nobody. MySQL, Redis, Mailpit and friends sit in memory while you are in a meeting or working on something else. Lerd 1.37 extends idle-suspend to services. Once every site using a service has been idle past the timeout, the service goes to sleep and shows a moon in the dashboard. The clever part is waking up. A request that arrives while they sleep isn't redirected to a "waking up" page. It is held while the services start in parallel, then answered for real, so your browser, an API client or a webhook never notices. Pinned services stay up. #PHP #Linux
1
2
24
672
Testing a responsive layout in browser dev tools is not the same as testing on a real phone. Lerd shares any local site on your network with one click. It shows a QR code: scan it with your phone and you get the real site, served by your machine, with the asset URLs rewritten so everything loads. Worktrees can be shared too, each on its own address. Turn it off and the site is private again. #webdev #mobile
3
17
332
Pasting logs into an AI chat is a bad workflow. They get cut off, they go stale, and the assistant only sees what you thought to copy. Lerd 1.37 adds Copy for agent. It sits on the request inspector, on a failing site doctor check and on any app log entry. Click it and you get a short prompt naming the site and the exact lerd MCP call that reads the full data. Paste that into Claude Code or Cursor and the assistant pulls the request's queries, logs and errors itself, leading with what went wrong, N+1 and slow queries first, then goes after the root cause. #AI #ClaudeCode
4
4
17
396
Queue workers, the scheduler, Horizon, Reverb, a Stripe listener and a Vite dev server, multiplied by every project you have open, add up to a lot of CPU and memory for code nobody is using. Lerd's idle-suspend watches each site for activity: web requests, CLI commands, AI tool calls and file saves. After a timeout it suspends that site's workers, and brings them back the moment you load a page or run a command. You keep every project linked and ready, and your laptop stays cool. #Laravel #Horizon
4
17
458
Freelancers and agencies end up with dozens of local sites, and a flat list stops being useful around the twentieth one. lerd groups sites into workspaces. Make one per client or per project, drag sites into it, and the dashboard, the TUI and the CLI all show your sites grouped. Fold the workspaces you aren't working on. Mark a workspace private and streaming mode keeps it off your screen when you share it. #webdev #freelance
2
2
1
35
1,185
Sometimes one site needs one nginx rule the others don't: a larger upload limit, a rewrite, a header, a location block. In lerd each site and each worktree can carry its own nginx override, and you edit it from the address bar in the dashboard, with a proper code editor. lerd reloads nginx when you save, and Reset puts its generated config back if you go too far. The override follows the site through domain renames, and frameworks can ship their own nginx rules in the store.
1
9
399
PHP put out an advisory yesterday: keep session.upload_progress.enabled=0 until the next bugfix release, to close an unlikely RCE path left over from this week's security fixes. In Lerd that's one line in the shared ini, under System > PHP. It applies to every PHP version at once, and it's a real php.ini setting, which matters because the advisory says ini_set() and .user.ini don't count. The versions in the screenshot are already the patched ones, the new builds arrived without a Lerd release.
11
469