A complete local Laravel environment. Free, on Valet and Homebrew.

Nomeus runs your sites, services, mail, dumps, logs and Xdebug from one place — a CLI, a dashboard at nomeus.test and Nomeus.app in the menu bar. Several Postgres versions side by side, an inbox per app, dump() with the request's queries beside it. MIT, self-hosted, no account.

$ curl -fsSL https://nomeus.dev/install | bash
or read it first: github.com/owldesign/nomeus · macOS today, Linux in progress
https://nomeus.test/services
The Nomeus Services page: a table of running service instances with star-shaped status LEDs, one row expanded to its .env block and log tail

Get started

One install, then a handful of commands. Everything the CLI does is also a button on the dashboard at nomeus.test; services and sites are a click in the menu bar.

commandwhat happens
curl -fsSL https://nomeus.dev/install | bashValet, the Homebrew bundle, the dashboard at nomeus.test, the php ini — ending with nomeus doctor. Re-running is a no-op.
nomeus new shop --laravel --db=postgresql --redis --mail --securescaffold, write nomeus.yml, run init: shop.test linked and secured, a database on Postgres, Redis, an inbox tagged shop, the .env filled in
nomeus services:create postgresql 17 --name=pg17a native Homebrew Postgres under its own launchd agent; nomeus services:clone pg17 pg17-test puts a second one, data included, on the next free port
nomeus services:adopt [email protected]takes over what brew services already runs — data copied, port kept, brew's copy left in place
nomeus xdebug:mode detect --php=8.4Xdebug on while the IDE listens, off when it stops; also off / on / trigger, per PHP version
nomeus doctorsixty-odd checks across Valet, PHP, launchd, ports and ini files; every warning names the command that fixes it
nomeus mcp:install claudethe same stack as tools in Claude Desktop, Claude Code or Cursor: "what's on port 5433?", "switch xdebug to trigger"
also: node versions via fnm (nomeus node:*) · databases: TablePlus through nomeus db · Nomeus.app on every GitHub Release · fifty-odd commands in docs/commands.md

How it works

One file per site, one command

A nomeus.yml declares link, tls, php, node, services, databases, mail, .env and scripts. nomeus init is idempotent — re-running changes nothing.

# nomeus.yml
domain: shopvault
php: "8.4"
secure: true
services:
  - { type: postgresql, instance: pg17, database: shopvault }
  - { type: redis }
mail: true
post-init: [php artisan migrate --force]
$ nomeus init
 link shopvault.test · secure · isolate php 8.4
 db:pg17 createdb shopvault · redis: already running
 mail: tagged shopvault · client package
 .env: set 9, added 4 · migrate
$ nomeus init          # again: every step "skip"

It adopts what you already have

Services are native Homebrew binaries under nomeus-owned launchd agents, data under ~/.nomeus/services/. Existing brew services come along; ports are kept.

$ nomeus services:doctor
WARN postgresql@17 runs under brew services — nomeus services:adopt postgresql@17
$ nomeus services:adopt postgresql@17 --name=pg17
 brew services stop · data copied · role postgres · port 5432 kept
 pg17 running under dev.nomeus.svc.pg17
a second postgres on 5433?
  nomeus services:clone pg17 pg17-test

dump() with the request beside it — no package required

An auto_prepend_file speaks VarDumper's server protocol, so dumps arrive from any site with nothing installed in it. The optional client package adds queries, jobs, views, requests and logs per request.

The Nomeus Debug page: a dump row open with its var-dumper output, the Queries tab showing a count of 3

The doctor tells you the fix, not just the problem

Sixty-odd checks across Valet, PHP, launchd, ports, ini files and retention. Every warning names the command that clears it; the dashboard offers the same fix as a button.

$ nomeus doctor
59 ok · 2 warn · 0 fail
WARN xdebug php 8.4  mode on but nothing listens on 9003
     fix: nomeus xdebug:mode trigger --php=8.4
WARN redis ext shop   .env uses redis, php 8.4 lacks the extension
     fix: nomeus php:ext redis --php=8.4

What it is not

Not notarized. Nomeus.app is ad-hoc signed — no Apple developer account — so the first launch takes one xattr line, below.
Not on Windows, and Linux is still in progress. macOS with Valet is the supported machine today.
Not supported by a company. Issues and PRs on GitHub; 220+ tests and per-slice runbooks are the safety net.

What it costs

Nothing. MIT-licensed, self-hosted, no account, no telemetry. Everything a paid local environment charges for, and a few things none of them have, on software you already trust — Valet, Homebrew, launchd — arranged so you can read every line that touches your machine. Coming from Herd Pro? Same jobs, same one-file-per-site idea, at $0.

Install

Prerequisites: Xcode Command Line Tools (for git) and Homebrew. The script refuses to run without them.

$ curl -fsSL https://nomeus.dev/install | bash -s -- --trust

What it does: clones github.com/owldesign/nomeus to ~/.nomeus/app and runs install/install.sh: Homebrew bundle, Valet, dependencies, the dashboard build, nomeus.test, the php ini — ending with nomeus doctor. Re-running is a no-op. --trust runs valet trust so the dashboard can act without password prompts; leave it off to be asked.

Nomeus.app: download Nomeus-<version>.zip from Releases, drop it in Applications, then xattr -dr com.apple.quarantine /Applications/Nomeus.app — Gatekeeper refuses an ad-hoc signed app once (macOS 26 calls it "damaged"; it isn't). macOS 14 or later.

/install on this domain serves the raw install/bootstrap.sh from the repo — read it before you pipe it.