Mac development setup
What to install on a fresh Mac for development, organized by the job each tool does. Skip whichever layer you don’t need; nothing here is mandatory.
Mac Usage
Mac UsageShell
Zsh UsageStarship
The minimal, blazing-fast, and infinitely customizable prompt for any shell.
1 | brew install starship |
Add to ~/.zshrc:
1 | eval "$(starship init zsh)" |
Package Manager
Homebrew
Installation
1 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" |
Commands
1 | brew install <formula> # Install formula. |
Brewfile
Snapshot every cask and formula on the current machine into a Brewfile, then reinstall everything on a fresh Mac with one command:
1 | brew bundle dump --file=~/Brewfile # snapshot the current install |
npm
Installation
1 | brew install node |
Yarn
Installation
1 | brew install yarn |
CocoaPods
Installation
1 | sudo gem install cocoapods |
Terminal
For a detailed comparison of all major terminal emulators (Ghostty, iTerm2, Kitty, Alacritty, WezTerm, and more), see Choosing a terminal emulator in 2026: Ghostty, iTerm2, Kitty, Alacritty, WezTerm.
iTerm2
Installation
1 | brew install --cask iterm2 |
iTerm Color Schemes
Version Control
Git
Git Solutions Collection: common commands and solutionsSSH
Generating a new SSH key and adding it to the ssh-agent
Git GUI
1 | brew install --cask sourcetree |
Languages
mise (multi-language version manager)
mise (the asdf successor) handles per-project versions of Node, Python, Ruby, Go, Java, and ~100 other tools from a single config. Replaces nvm/n, pyenv, chruby/rbenv, and similar with one binary. Trade-off: opinionated install paths; not always wanted in CI environments.
1 | brew install mise |
If you’d rather use per-language tools, the sections below cover the standalone options.
Python3
Installation
1 | brew install python3 |
JavaScript
Node.js in 2026: pick your stackJava
Installation
Eclipse Temurin (Adoptium) is the standard open JDK distribution since Oracle’s 2019 licensing change. Brew:
1 | brew install --cask temurin # latest LTS |
Apple’s Oracle JDK download is still around if you specifically need Oracle’s commercial distribution.
Swift
Package Manager
SPM
Organize, manage, and edit Swift packages.
Mint
A package manager that installs and runs Swift command line tool packages.
Ruby
Version Manager
chruby and ruby-install
1 | brew install chruby ruby-install |
Installation
1 | ruby-install ruby # Install the current stable version of Ruby |
Package Manager
Dependency Manager
1 | gem install bundler |
Scheme
Installation
1 | brew install --cask racket |
SML
Installation
1 | brew install smlnj |
AI Tools
Cursor
Claude Code
Text Editors
VSCode
Vim
Installation
1 | brew install vim |
IDE
JetBrains
Xcode
Developer Tools
Insomnia
The open-source, cross-platform API client for GraphQL, REST, and gRPC.
OrbStack
Fast, lightweight Docker Desktop and Linux VM replacement for macOS. Free for personal use.
1 | brew install --cask orbstack |
Works as a drop-in for the docker CLI, with much lower memory and battery cost than Docker Desktop. Also runs lightweight Linux VMs.
Tools
Finder Tools
quick-look-plugins
List of useful Quick Look plugins for developers
1 | brew install apparency betterzip provisionql qlcolorcode qlmarkdown qlstephen qlvideo quicklookase quicklook-json quicklook-pat suspicious-package webpquicklook |
Restart the QuickLook manager
1 | qlmanage -r |
OpenInTerminal
Finder Toolbar app for macOS to open the current directory in Terminal, iTerm, Hyper or Alacritty.
1 | brew install --cask openinterminal |
Menu Bar Tools
Itsycal
Itsycal is a tiny menu bar calendar.
1 | brew install --cask itsycal |
MenubarX
A powerful menu bar browser
Dozer
Hide status bar icons on macOS.
1 | brew install --cask dozer |
xbar
Put the output from any script or program into your macOS Menu Bar (the BitBar reboot)
1 | brew install --cask xbar |
Screen Saver
AppCleaner
AppCleaner is a small application which allows you to thoroughly uninstall unwanted apps.
Maccy
Lightweight clipboard manager for macOS
Installation
1 | brew install --cask maccy |
OpenEmu
Retro video game emulation for macOS
Command Line Tools
bat
A cat(1) clone with syntax highlighting and Git integration.
1 | bat <file> |
btop
Resource monitor that shows usage and stats for processor, memory, disks, network and processes.
diff-so-fancy
Good-lookin’ diffs with diff-highlight and more.
eza
A modern alternative to ls
fd
A simple, fast and user-friendly alternative to
find
1 | fd <pattern> |
ffmpeg
A complete, cross-platform solution to record, convert and stream audio and video.
fzf
A command-line fuzzy finder
1 | fzf |
gh
Work seamlessly with GitHub from the command line.
1 | gh release create [<tag>] [<filename>... | <pattern>...] |
graphicsmagick
Image processing tools collection.
htop
A cross-platform interactive process viewer.
httrack
Website copier/offline browser.
1 | httrack <URLs> |
mtr
mtr combines the functionality of the
tracerouteandpingprograms in a single network diagnostic tool.
navi
An interactive cheatsheet tool for the command-line
ncdu
NCurses Disk Usage.
1 | ncdu <dir> |
pandoc
General markup converter.
pngquant
Lossy PNG compressor
1 | pngquant --ext .png --force 256 *.png */*.png |
jpegoptim
JPEG optimizer: lossless or lossy compression with quality control
1 | jpegoptim --max=95 *.jpg *.jpeg |
prettyping
prettypingis a wrapper around the standardpingtool, making the output prettier, more colorful, more compact, and easier to read.
1 | prettyping |
rlwrap
rlwrapis a ‘readline wrapper’, a small utility that uses the GNU Readline library to allow the editing of keyboard input for any command.
1 | rlwrap <command> |
ripgrep (rg)
Recursively search for a regex pattern. Faster than
grep,ag, andack. Respects.gitignoreby default.
1 | rg <pattern> |
the_silver_searcher
A code searching tool similar to
ack, with a focus on speed.
tig
Tig is an ncurses-based text-mode interface for git.
tldr
Simplified and community-driven man pages
1 | tldr <command> |
tree
List contents of directories in a tree-like format.
1 | tree -L <num> -a |
unrar
Command-line unarchiving tools supporting multiple formats
xxh
Bring your favorite shell wherever you go through the ssh.
zoxide
Smarter
cdthat learns from your history. Modern, faster successor tozandautojump.
1 | brew install zoxide |
autojump vs z vs zoxide
| autojump | z (rupa/z) | zoxide | |
|---|---|---|---|
| First release | 2008 | 2009 | 2020 |
| Language | Python | Bash/Zsh script | Rust (single binary) |
| Install footprint | Python runtime + module | One shell script | One static binary (~5 MB) |
| Default command | j foo |
z foo |
z foo, plus zi for fzf-picker mode |
| Ranking model | Frecency (frequency + recency) | Frecency | Frecency, refined |
| Database | Plain text | Plain text (~/.z) |
Binary, written atomically |
| Shells | bash, zsh, fish (via plugin) | bash, zsh | bash, zsh, fish, PowerShell, nushell, xonsh, elvish |
| Speed | Slow (Python startup per call) | Fast | Faster: 10-20x autojump |
| Interactive picker | No | No | Yes, zi with fzf |
| Maintenance | Effectively stale (last release 2022) | Slow | Active |
cd replacement |
Separate j command |
Separate z command |
Optional cd=z alias covers everything |
Verdict: zoxide. Faster, single binary, works on every shell, and the zi interactive picker is a real productivity win the other two don’t have. Keep z if you want zero binary dependencies; keep autojump only if you already have a long-standing setup. zoxide imports either database in one shot:
1 | zoxide import --from autojump ~/.local/share/autojump/autojump.txt |
Virtual Machines
Multipass
Get an instant Ubuntu VM with a single command. Multipass can launch and run virtual machines and configure them with cloud-init like a public cloud.
Font
1 | brew tap homebrew/cask-fonts |
Fira Code
1 | brew install --cask font-fira-code |
Nerd Fonts
1 | brew install --cask font-fira-code-nerd-font |
Font Awesome
1 | brew install --cask font-fontawesome |
Configuration
Git Config
1 | git config --global core.pager "diff-so-fancy | less --tabs=4 -RFX" |