DEV Community

Suyash Gupta
Suyash Gupta

Posted on

How to Set Up a Complete Local PHP Dev Environment on macOS Without Docker

If you've spent more time configuring your local development environment than actually coding, you're not alone. The PHP developer experience on macOS has been... let's say "fragmented."

For years, the options were:

  • MAMP Pro: Bloated, expensive, clunky UI
  • Laravel Valet: Great, but tightly coupled to Laravel
  • Docker: Overkill for local development, memory hungry, another moving part
  • Manual Homebrew setup: Works, but managing PHP versions, Apache config, SSL certs, and DNS is a nightmare

I've done all of them. And I finally found a better way.

The Problem With Status Quo

Last year, I was juggling three projects simultaneously:

  • A legacy WordPress site running PHP 7.4
  • A modern Laravel app on PHP 8.2
  • A Node.js service that needed SSL with Apache as a reverse proxy

Every time I switched between projects, I'd either manually edit Apache configs or use Valet commands. Creating SSL certificates meant digging into mkcert documentation. Virtual hosts? More config files. DNS setup? Even more pain.

The real kicker: when I added a Node.js project to the mix, none of my existing tools handled multi-language environments well.

Enter KettleCode

I discovered KettleCode about six months ago, and it's been quietly living in my macOS menu bar since. It's a native Swift app that manages PHP, Node.js, Apache, MySQL, DNS, and SSL all from one place.

Here's what makes it different:

1. PHP Version Management (No More Context Switching)

KettleCode lets you install multiple PHP versions (7.0 through 8.6) and switch between them instantly. But the real power is per-project switching.

I have my WordPress site set to PHP 7.4. My Laravel app uses 8.2. When I navigate to each project directory, KettleCode's menu bar shows me which version is active. Click to switch. That's it.

No environment variables to fiddle with. No shell profiles to edit. No restarting anything.

2. .test Domains With Real HTTPS

Creating a local domain used to mean:

  1. Edit /etc/hosts
  2. Configure Apache virtual host
  3. Generate SSL certificate with mkcert
  4. Add certificate to keychain
  5. Restart Apache
  6. Hope it works

KettleCode does this in the menu bar. Create a domain. Choose your backend (PHP-FPM for PHP projects, reverse proxy for Node.js). You have https://mysite.test with a valid SSL certificate.

This matters more than you'd think. Many browser APIs require HTTPS, even localhost. Payment processors, geolocation, service workers -- they all demand secure contexts. Developing without HTTPS is increasingly unrealistic.

3. Node.js Version Management + Reverse Proxy

The Node.js part surprised me. I was expecting basic version switching, but KettleCode goes further.

You can use .test domains with Node.js services via a reverse proxy mode. So you run your Express or Next.js server on localhost:3000, but access it via https://myapp.test. Apache handles the HTTPS termination.

This is huge for testing webhooks, OAuth flows, and any local development that needs a stable, secure domain.

4. One Menu Bar, Everything Managed

This is the underrated part. Every service -- PHP version, MySQL, Apache, dnsmasq, each .test domain -- shows up in the menu bar. Start/stop services. Check status. View logs. All without opening a terminal or separate app.

It feels like what MAMP should have been.

The AI Integration (MCP Server)

Here's where it gets interesting for the future. KettleCode includes an MCP (Model Context Protocol) server with 18 tools. If you use Claude Code, Cursor, or VS Code with an AI assistant, you can ask it to:

  • Create a new PHP project with configured domains
  • Switch PHP versions for the current project
  • View logs from any service
  • Create and manage virtual hosts

This is early days, but it's the kind of thing that makes sense: your local dev environment should talk to your editor and AI tools.

Getting Started

Installation is embarrassingly simple:

  1. Download KettleCode from kettlecode.org
  2. Launch it
  3. It installs Homebrew dependencies on first run
  4. Click "Create Virtual Host" in the menu bar
  5. Done

No Docker. No VMs. No lengthy configuration. Just native performance and a clean UI.

What About Cost?

It's free. No premium tier, no upselling. Just a tool that solves the problem.

The Missing Piece

If you're a macOS developer who's tired of Docker overhead, MAMP's bulk, or Valet's limitations, KettleCode fills a real gap. It's what I wish existed when I started doing PHP development.

For Laravel developers specifically: Valet is great, but KettleCode handles the non-Laravel parts of your stack better. For WordPress developers: forget MAMP. For full-stack devs juggling PHP and Node.js: this is it.

The only catch? It's macOS only. If you're on Linux or Windows, you're out of luck. But if you're on a Mac, you're home.

Try it. Your future self will thank you.


KettleCode is free, available at kettlecode.org. No Docker. No VMs. Just your browser, your editor, and everything you need for local development.

Top comments (0)