BRAMPP → Features
FeaturesEverything BRAMPP manages
A local development stack is a dozen small chores that each take ten minutes and never get faster. This page is the full list of the ones BRAMPP takes over — and, where it matters, how.
Start, stop, and actually know the state
Six services, one list, live status. The part that took the longest to get right is not starting them — it is reporting the truth about them.
| Service | Versions | What BRAMPP does with it |
|---|---|---|
Apache httpd | Homebrew current | Ports, vhosts, modules, per-domain document roots, graceful reloads |
| Nginx | Homebrew current | Server blocks, per-domain SSL, reverse proxies to app servers |
| PHP-FPM | 8.1 – 8.5, side by side | A pool per version; a domain picks its own version without touching the others |
| MariaDB / MySQL | Homebrew current | Start/stop, root access, my.cnf editing, dump and restore |
| PostgreSQL | Several majors | The running instance is detected, not guessed — no wrong-port surprises |
| Redis | Homebrew current | Start/stop, redis.conf, and a live stats panel built into the app |
Status you can trust
Every status line combines three checks: is the process alive, is the port answering, and does the PID on that port actually belong to the service. That third one matters more than it sounds — a stale PID file or a different process squatting on port 80 is exactly the situation where a naive check says "running" and your browser says otherwise.
Stopping is equally careful: BRAMPP verifies port ownership before it signals anything, so it will never kill a process that merely looks like yours. If a service dies on its own, you get a notification instead of finding out from a failed request.
Dependencies are resolved for you. Starting a Node, Python or .NET domain also starts the web server in front of it — and if that server is Nginx running a domain with an Apache companion, that gets started too. Services that are not installed are reported as such rather than silently failing.
A working site in one dialog
Name it, pick a platform, done. Behind that single step BRAMPP writes a virtual host, adds the /etc/hosts entry, creates the site folder, generates a starter project and issues an SSL certificate.
PHP
Pick the PHP version per domain. A legacy project stays on 8.1 while the new one runs 8.4, and neither knows the other exists.
Node.js
Express, Next.js or anything that listens on a port. BRAMPP puts a reverse proxy in front and supervises the process.
Python
FastAPI, Django and Flask templates, each with its own virtual environment created at domain-creation time.
ASP.NET Core
Kestrel behind Apache or Nginx, with the proxy headers set correctly so the app sees the real scheme and host.
Static & SPA
Plain static sites, or single-page apps with history-mode fallback so deep links resolve instead of 404ing.
Apache or Nginx, per domain
Not a global setting. One project on Apache, the next on Nginx, both running at once — see the guide on running them together.
The padlock, locally, without the yellow warnings
A self-signed certificate is rejected no matter how carefully you configure the server. BRAMPP takes the other route: a local certificate authority.
One click sets up mkcert, installs its CA into the macOS system trust store — that is the single password prompt you will see — and issues a certificate for each domain you create. Browsers then trust those certificates the way they trust a public one, because the authority that signed them is genuinely trusted on your machine.
Each domain also gets an HTTP→HTTPS redirect, so http://myproject.test lands on the secure address rather than serving a second, subtly different version of your site. The full story — including why .local is a trap on macOS and what to use instead — is in the local HTTPS guide.
Create, dump, restore — without the CLI
And when you do want the CLI, BRAMPP uses the same tools you would: mysqldump, mysql, pg_dump. The files it produces are ordinary dumps that restore anywhere.
- Create and drop databases on MariaDB/MySQL and PostgreSQL, with name validation at the boundary.
- Export with
mysqldump --single-transaction --routines --triggers— a consistent snapshot that does not lock InnoDB tables, keeping stored routines and triggers. - Import a
.sqlfile into a target database, creating it first if it does not exist. - A partial dump is never left behind. If an export fails the incomplete file is deleted — a corrupt backup is worse than no backup, because you only discover it when you need it.
- Web clients — phpMyAdmin and Adminer install from inside the app if you want them.
- Config editors for
my.cnf,postgresql.confandredis.conf, with a backup written before every save.
Redis, with numbers
The Redis tab reads INFO and shows uptime, connected clients, memory used against peak, total commands, the keyspace hit rate, and the key count for each database. When nothing has been requested yet it says so rather than reporting a misleading "0% hit rate" — 0 hits out of 0 lookups is not a cache miss, it is an absence of data.
A few more reasons to stay out of the terminal
A development environment manager earns its place by not sending you to a shell. These are jobs BRAMPP used to do half of, leaving you the rest.
Put a running site on a temporary address
One click gives you an https://…trycloudflare.com link — to show a client, or to open the site on your phone. No Cloudflare account. If nothing is running behind it the share is refused: a link that serves visitors a 502 is worse than no link at all. Delete the domain and the share closes with it.
Update and restart
No opening the image and dragging. The new version is copied next to the app while it is still running, so after quitting only two renames remain and the moment where no application exists is measured in milliseconds. The old version is not deleted but moved aside — removed once the new one has launched and stayed alive, put back if it has not. Your Homebrew services keep running, and no administrator password is ever asked for.
Homebrew packages, with the noise separated
brew outdated counts every formula on the machine — fifty on a typical developer's, where httpd and php are lost between cocoapods and jadx. Its own tab splits them three ways: what BRAMPP manages, what those depend on, and everything else it does not touch. Select what you want and upgrade that; a running service that was upgraded is restarted, because an upgrade replaces the binary while the running process keeps the old one.
Environment diagnostics — and repair
Ports, configuration validity, certificate trust and /etc/hosts on one screen. If an unexpected process holds a port, it names the process and the PID. When it recognises a fault it offers to repair it: back up the file, run configtest, restore from the backup if that fails — no work touching shared configuration should happen without all three.
The rest of it
PHP extension manager
26 curated extensions per PHP version — 17 built into PHP, the other 9 installed through PECL — xdebug, redis, imagick and the rest, toggled with one click. Plus quick settings for the values in php.ini you actually change.
App server supervisor
Node, Python and .NET apps run under a zero-dependency supervisor: automatic restart on crash, combined logs, and a stop that checks port ownership before signalling.
Setup wizard
Apache ports, PHP-FPM, the mkcert CA, localhost SSL, MariaDB root access and phpMyAdmin — configured in order, installing only what you approve, printing every command it runs to the console.
Logs in the app
Apache, Nginx, PHP-FPM and per-domain access and error logs, readable without hunting through /opt/homebrew/var/log.
Honest backups
One click backs up domains, settings, vhosts, SSL certificates and php.ini files. Incomplete backups are detected and flagged — never silently restored as though they were whole.
Menu bar
The stack in your menu bar: start and stop services, open the main window, launch at login, crash notifications. Turkish and English, switchable while running.
MCP server
A local Model Context Protocol endpoint with 23 tools behind per-area permissions, off by default. Details on the MCP page.
Share a site, temporarily
One click opens a Cloudflare Quick Tunnel and hands you a public trycloudflare.com address — for showing a client, or for opening the site on your phone. No Cloudflare account. The sheet says plainly what becomes public before you start, and every tunnel closes when BRAMPP quits.
PHP profiler
Drives Xdebug's profile mode without editing php.ini by hand, collects the cachegrind output in one folder and lists it. Trigger mode is the default — profiling every request costs hundreds of megabytes in minutes and a visibly slower site, so only requests you mark get measured.
Update check
BRAMPP asks GitHub whether a newer release exists and tells you. It does not install anything behind your back.
Native arm64, end to end
The app is a native Apple Silicon binary on macOS 14+, and so is everything it manages — httpd, php-fpm, mariadbd and redis-server all come from Homebrew's arm64 bottles. No Rosetta, no emulation layer, at any level.