Skip to content
PortBay

Local development

Statamic local development on a Mac — without Herd Pro

The docs recommend Herd, and free Herd really does serve a flat-file site. Form emails, databases and Node are where the $99/yr wall appears — and where the free full-stack route earns its place.

Nour Beiruti8 min read

Statamic's installation docs list Laravel Herd first, marked “Recommended” — and to be fair, free Herd genuinely serves a Statamic site. Statamic is flat-file at its core: a Laravel application that needs PHP and a web server, no database required. The catch arrives the moment your build becomes a real client site: form notification emails, a database for users or cache at scale, the right Node version for the frontend build — and on Herd, each of those is a Pro feature at $99/year. Here's what the free tier actually covers, where the wall is, and the free way around it.

What free Herd covers — honestly, quite a lot

Free Herdgives you PHP, nginx and .test domains with trusted HTTPS. For a flat-file Statamic site — content in Markdown and YAML, no users beyond yourself, no forms — that's a complete setup, and if that's your project, the official recommendation is good advice and you can stop reading.

Where the Pro wall appears

Real Statamic builds hit three of Herd's Pro gates quickly. Mailis the big one: Statamic's form notifications and password resets send email, and without local mail capture you're either testing against a real mailbox or not testing at all — capture is Pro on Herd (and on ServBay; the free tools are compared in our Mailpit guide). Databases arrive when you move users, cache or queues off the filesystem — one shared Pro instance on Herd. Node version management— for the Vite build every modern Statamic frontend runs — is Pro as well. None of this is a criticism of Herd's engineering; it's the free-tier boundary, and Statamic builds cross it early.

The free full-stack route

composer create-project statamic/statamic mysite
# add the folder to PortBay, press Play
# → https://mysite.test, PHP pinned, Mailpit catching form mail

Statamic + PortBay, step by step

Two comment lines carry the whole setup, so here is each step in order, with what happens under the hood.

  1. Create the project. Run the composer command above, or point PortBay at an existing Statamic folder. The app reads the stack and fills in the runtime, start command and web root; for Statamic that web root is public, the same directory the official docs have you serve.
  2. Pin the PHP version. Statamic 5 needs PHP 8.2 or newer. PortBay detects the PHP versions installed on your machine (Homebrew, ServBay, the system PATH) and the project pins one of them, so a legacy client site on 8.1 next door keeps its own runtime. If no 8.2+ install exists, the Languages screen shows the brew install command and can run it for you.
  3. Press Play. PortBay issues a certificate for mysite.test through mkcert, resolves the hostname with its managed local DNS, and routes requests through a bundled Caddy edge to PHP-FPM. The control panel at https://mysite.test/cp loads on an origin the browser trusts, and the same trusted HTTPS on .test domains covers every project you add after this one. Certificates live under ~/Library/Application Support/PortBay/certs/, and a Certificates page lists each one with its expiry and a one-click reissue.
  4. Send a test form. Mailpit starts with the app, and PortBay injects MAIL_HOST and MAIL_PORTinto every project process it starts, so Statamic's form notifications and password resets land in the local inbox at 127.0.0.1:8025 without a single .env edit. Values you set yourself win over the injected defaults.
  5. Add a database when flat-file stops fitting. Statamic runs from Markdown and YAML until you move users, cache or queues into a database. When that day comes, open Databases, pick MySQL, MariaDB or PostgreSQL, name the instance, and click Create; first-time MySQL and PostgreSQL initialisation runs in the background and can take a minute or two. Link the instance to the project and PortBay injects DATABASE_URL and the DB_*variables into the project's process on every start, with your own .env values winning on conflict. The local database manager keeps each instance in its own data directory on its own port, so two client sites never share a server.
  6. Build the frontend. Most current Statamic starter kits build their CSS and JS with Vite, which needs Node. PortBay detects Node versions the same way it detects PHP (Homebrew, nvm, mise, asdf) and the project can pin one, so the build stops depending on whatever your shell has linked.

The check that it all worked takes a minute: load https://mysite.test, submit the contact form, open the Mailpit inbox, and confirm the message arrived. That loop, page plus form plus inbox, is the part of a real Statamic build that free Herd cannot cover, and here it costs nothing.

The honest trade

PortBay (free, open source, macOS) includes the pieces Herd gates: built-in Mailpit so every form notification lands in a local inbox, a per-project MySQL, MariaDB or PostgreSQL database for the day you outgrow flat-file, and Node managed alongside PHP for the frontend build — plus trusted HTTPS on .test, same as Herd. The honest trade: Herd remains the most Laravel-polished tool in the category, it has a Windows build, and if you already pay for Pro the gates above are open. But “recommended by the docs” shouldn't cost $99/year to become usable for a site with a contact form. The switch guide covers moving an existing Herd setup across without breaking it, and the download is free — try it on one Statamic project next to Herd and keep whichever earns the spot.

PortBay mascot — a friendly blue tugboat

Give your projects and your agents a real local home.

Download for macOS

Free & open source · macOS 11+ on Apple Silicon · Pro from $10/mo