LocalRun
macOS / menu bar / MIT

Run local projects on real *.test domains

Drop in a folder. LocalRun gives it a name, a real certificate, and keeps it running, so you type myapp.test instead of hunting for the port you left it on.

no /etc/hosts edits, no port juggling, no sudo on the happy path

How it works

No hosts file. No sudo. No setup.

Three things happen the moment you add a folder: a name starts resolving, a certificate gets issued, and your dev server comes under supervision. You do none of them by hand.

01

The name just resolves

Every <name>.test points at your Mac and nowhere else. A bundled DNS responder answers on a high loopback port, so nothing edits /etc/hosts and nothing asks for your password.

02

HTTPS with a real certificate

Caddy terminates TLS and forwards to whatever port your dev server picked. Certificates come from a local CA trusted in your keychain, so there is no browser warning to click past.

03

Runs, and stays running

Start, stop, restart, tail logs and edit env from the menu bar. Mark a project always-on and it comes back after a crash, a quit, or a reboot.

One request, end to end

GEThttps://myapp.test
trace
  1. DNSmyapp.test resolves to 127.0.0.1

    bundled responder on a high loopback port - no sudo

  2. TLSCaddy terminates HTTPS on :443

    internal CA, trusted in your login keychain

  3. PROXYreverse-proxy to 127.0.0.1:3000

    your project, started and supervised by the daemon

  4. 200 OKserved by your app on 127.0.0.1:3000

Features

One window. Every project.

LocalRun knows the difference between a server it started, one you started, and one launchd owns, so it only ever offers you the buttons that will actually work.

A running project row: a green Running chip, the port it proxies to, and its .test address.

Named domains

myapp.test instead of localhost:3471. One name per project, HTTPS by default, and it still works tomorrow.

https://

Per-project HTTPS

Toggle TLS per project. Caddy issues a local cert via its internal CA, trusted in your keychain.

Start
Restart
Terminal

Tray control

Start, stop and restart any project from the menu bar, or pop a terminal at its directory.

The Logs tab of an expanded project, streaming the dev server's output, with Copy and Clear controls.

Logs, env, health

A live log stream, a .env editor and a health-check dot that polls your upstream path.

listening on 3000

Auto port detection

Never told it a port? LocalRun reads the one your server prints on startup and proxies to that.

LaunchAgentsurvives reboot

Always-on

Pick who keeps a project alive: you, LocalRun, or macOS itself. The last one survives a reboot without you opening the app.

MCP

Let Claude drive your dev servers.

LocalRun ships an MCP server, so Claude Code and Claude Desktop can do the things you would otherwise click. Ask for a .test address, start the server, read the logs when it breaks — without leaving the conversation.

01

From the app

Open LocalRun and click MCP. It writes the client config for you.

02

Or from your terminal

One command, then restart your client.

claude mcp add localrun --scope user -- npx -y @mindantic/localrun-mcp

A few of the 19 tools

add_sitestart_siteread_logsset_envremove_site

The same panel, driven by hand or by Claude.

Get started

Add a folder. Get a domain.

Free, open source, MIT-licensed. Download the disk image, or build it from source in about a minute.

macOS 11+, Apple silicon

This build is not notarised, so the first launch is blocked with “the developer cannot be verified”. That is Gatekeeper, not a broken download. Right-click the app and choose Open, then Open again. You only do this once. If macOS instead says the app is damaged, clear the quarantine flag:xattr -dr com.apple.quarantine /Applications/LocalRun.appRead more in the manual