Maya Rodriguez
Most “developer Mac setup” guides are not setups. They are inventories. Fifty apps, three package managers, a paragraph of philosophy, and a Brewfile that will be out of date by the time you finish reading.
This post is the opposite. Minimal means few decisions, clear jobs for each tool, and a machine you can rebuild without a weekend project. If you already know Homebrew, you can skim to the final command. If not, start with how to use Homebrew, then come back.
A minimal setup is not aesthetic sparsity. It is a constraint: every installed app must remove friction from daily work, not merely look useful on a setup screenshot.
We use four rules:
That last rule is the hard one. The internet will always have another launcher extension, another menubar meter, another AI sidebar. Install those when a workflow fails without them—not when a blog post ranks them.
After this setup, you should be able to:
You will not have every SaaS desktop client. Slack, Zoom, and design tools can wait until Monday morning’s first meeting. The base layer should not depend on them.
The terminal is where a minimal setup either feels sharp or feels apologetic. Stock Terminal.app is acceptable. It is not ideal if you spend hours in panes, SSH, and noisy build output.
We recommend Ghostty as the default modern choice: fast, simple configuration, good defaults. If your team already standardizes on iTerm2, use that instead. Consistency with your teammates beats novelty.
brew install --cask ghostty
Pair the app with whatever shell you already know. Do not rewrite your shell config on a new machine before you can compile anything. Get online, get git working, then port dotfiles.
Minimal does not mean “only Neovim in a cave.” It means one primary editor you can open any repo with.
Visual Studio Code remains the safest primary for most developers: broad language support, remote workflows, and the fewest “wait, you don’t have X?” moments on a team. If you already live in Zed or Cursor, install that as primary and keep VS Code as backup—or skip the backup until you need it.
brew install --cask visual-studio-code
Resist installing three AI-first editors on day one. Pick the one you will open by default. Add a second only when a project or employer requires it.
Not every developer needs Docker on day one. Many do. Frontend apps talk to local APIs. Backend work needs Postgres and Redis. Coursework and open source projects assume a container runtime.
OrbStack is our preferred default on Mac when we want Docker-compatible workflows with less overhead than a full desktop stack. Docker Desktop is the known quantity if your company already documents it.
brew install --cask orbstack
If your work is pure native apps or remote-only development, skip containers entirely until a README requires them. Minimal means empty space is allowed.
macOS defaults waste motion. A minimal setup fixes the highest-frequency motions only.
brew install --cask raycast rectangle
# optional, if you remap keys
brew install --cask karabiner-elements
Skip the elaborate Hyper-key layer and multi-app macros until your base shortcuts are automatic. Complexity is easy to add and hard to remember on a second machine.
These are still minimal because each one prevents a recurring tax:
brew install --cask appcleaner stats keka
That is the entire utility tier. No “Mac cleaner,” no duplicate screenshot stacks, no second clipboard manager unless Raycast’s is insufficient for you.
Casks cover GUI apps. Language runtimes usually belong in formulas or version managers. A minimal pattern that scales:
Exact language setup is project-specific, so it stays out of the shared minimal cask list. The principle is the same: install what the next commit needs, not what a generic roadmap might need next year.
A short list of common additions we leave out of the minimal base:
Omission is a feature. A minimal Mac stays fast to rebuild and easy to reason about.
Install apps first, then bring configuration. Cloning a 2,000-line dotfiles repo before the terminal and editor exist produces a morning of broken assumptions. Order that works:
Here is the lean stack as one Homebrew command. It is enough for serious work and small enough to understand line by line.
brew install --cask \
ghostty \
visual-studio-code \
orbstack \
raycast \
rectangle \
appcleaner \
stats \
keka
Optional additions when you know you need them:
brew install --cask karabiner-elements iterm2 docker firefox
If you prefer generating that list from a UI and exporting it later, assemble the same set on Bundl and keep the command next to your dotfiles repo.
Minimal decays. A year later, your menubar is crowded and your Applications folder has three PDF readers. Schedule a light review when you get new hardware or when the machine starts to feel slow:
The point of a minimal developer setup is not purity. It is recovery time. When the laptop dies, when you join a new company, when you wipe a machine after a messy experiment, you should be productive the same day—not after a week of re-discovering which random DMG you used in 2024.
Start narrow. Expand on purpose. Let Homebrew and a short cask list do the boring work so you can get back to the repo.