If every PHP site starts with docker compose up and Docker Desktop eats RAM on your MacBook, Native mode gives you the same MySQL/Redis/nginx/php-fpm without daily containers.
When it’s worth switching
- Your daily work is PHP + MySQL, not exotic compose recipes.
- You want HTTPS on .localhost, Mailpit, phpMyAdmin in one app window.
- You need fast cold start and less heat on Apple Silicon.
- You keep Docker only for isolation (legacy PHP 7.x, third-party compose).
MacFullStack is not a drop-in DDEV clone — different tool class. See /blog/macfullstack-vs-ddev.
One-evening migration plan
- Install MacFullStack, pick Native in Settings (default).
- Copy or symlink projects into
~/MacFullStack/www/— no need to duplicate gigabytes. - Import DB: dump from the container → Tools → Databases or
macstack db import. - Fix
.env:DB_HOST=127.0.0.1, ports from the Stack tab (not docker networkmysql). - Sync vhosts after docroot/aliases — nginx does not read
.htaccess.
Native ↔ Docker in one app
You do not have to pick forever:
- Switch mode in Settings; service data is kept per mode.
- Move MySQL/MariaDB between modes: migration dialog or
macstack db migrate-runtime --to native|docker --json. - Redis is not migrated — rebuild sessions/cache after switching.
Details: /help/migrate-runtime, /help/runtime-modes.
Port conflicts
If Docker Desktop still binds 3306/8080 — see Gatekeeper and /help/gatekeeper-ports. Often stopping compose or changing publish ports is enough.
What to keep in Docker
- A project hard-wired to compose and CI = Docker.
- Experiments with Postgres or services outside the Native catalog.
- DDEV for one Drupal site, MacFullStack for everything else in
www/.
Free tier: one PHP project and full Native core — free start. Node/Python proxy and unlimited projects — Pro.