My Mac Dev Setup in 2026

How I set up a new Mac for development in 2026 — Homebrew, Cursor, Docker per-repo, pnpm, Claude Code CLI, and iCloud dotfile sync via Mackup.

Updated April 30, 2026

I set up new development environments more often than most people would consider healthy. New machine, wiped drive, loaner laptop — doesn’t matter. My goal has always been: sit down, run a few commands, and be productive within the hour. That’s still the goal in 2026, and the tools have only gotten better.

Here’s exactly how I do it.

Install Homebrew

The Homebrew install command has changed since I first wrote this post. Here’s the current one-liner:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

After that, update and clean up:

brew update && brew upgrade && brew cleanup

Note: brew tap caskroom/cask and brew prune are both gone — Cask is built into Homebrew now, and prune was removed years ago. Don’t add them.

Install Essential Apps

# Dev tools
brew install mackup git pnpm

# GUI apps
brew install --cask cursor docker sourcetree transmit

# Browsers and utilities
brew install --cask firefox google-chrome imageoptim

A few things worth calling out:

  • Cursor is my primary editor now. It replaced both Sublime Text and PHPStorm. It’s an AI-native fork of VS Code — all the extensions you’d expect, plus Cursor’s built-in AI features that I use heavily.
  • pnpm is my package manager of choice for Node/frontend work. Faster installs, better disk usage, stricter about hoisting.
  • Franz is gone. I just use the native apps or browser tabs.

Install Claude Code CLI

Claude Code is Anthropic’s CLI for agentic coding work. I use it alongside Cursor — Cursor for interactive editing, Claude Code for longer-running tasks, refactoring across files, or when I want to work from the terminal.

npm install -g @anthropic-ai/claude-code

You’ll need an Anthropic API key. Drop it in your environment and you’re set.

Switch to Zsh (Already the Default, But Worth Confirming)

macOS has shipped with Zsh as the default shell since Catalina. If you’re on a fresh machine it’s already there. I still use Oh My Zsh for the prompt and plugin ecosystem:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Restore Dotfiles and App Config with Mackup + iCloud

This is the part that saves the most time. Mackup syncs your dotfiles and application configurations to iCloud Drive. On a new machine, you sign into iCloud, configure Mackup, and restore — and your entire shell environment, editor settings, and app preferences come back automatically.

Set up your ~/.mackup.cfg:

[storage]
engine = icloud

Then restore:

mackup restore

That pulls back your .zshrc, .gitconfig, SSH config, editor settings, and anything else Mackup manages. It’s not magic — it’s symlinks — but it feels like magic the first time it works on a brand new machine.

If you work across multiple Macs, this is how your environment stays consistent without any manual effort. Make a change on one machine, commit it through Mackup, and it’s waiting for you on the next one when you log in.

Per-Repo Docker: Still the Right Call

My development workflow is still built around Docker at the repo level. Every project I work on carries its own Docker setup — the dev environment lives in the repository, not on the host machine.

The practical result: I can git clone any project, run the startup script, and have a fully working local environment in minutes. I can also delete the repo entirely and know that nothing has polluted my host machine. Projects are immutable in that sense — the environment is defined in code, not in a pile of globally installed packages and manually tweaked config files.

This is especially useful for client work or open source projects where I don’t want one project’s dependencies bleeding into another.

Pretty neat, huh? Still is.