Sweepfor Mac

Mac maintenance

Setting Up a Mac for Web and Mobile Developers in 2026

A working developer's Mac setup for 2026. Xcode, Homebrew, Node, Docker, VS Code, and the storage and shell choices that pay back daily.

11 min read

It’s a fresh M4 Pro MacBook, you cloned the company monorepo, ran npm install, and watched the SSD lose 4 GB to a single node_modules folder. Then you installed Xcode (35 GB), pulled three Docker images (8 GB), and started a local Postgres (1 GB). Day one: 50 GB used. Day thirty: 200 GB used. Day three hundred: SSD is screaming.

Developer Macs accumulate more cruft than any other workflow. The trick is a setup that channels the cruft into knowable, clearable places, with a shell and a toolchain that don’t fight you. Here’s a 2026 version that holds up.

Spec the machine for what you actually build

For backend, web, and most mobile development:

  • M3 or M4 MacBook Pro, 24–36 GB RAM, 1 TB SSD. The 14” Pro is the sweet spot. Air works for hobbyists; Pro pulls ahead the moment you run Docker or Xcode.
  • 16 GB RAM is workable but tight. The first time you docker compose up an eight-service stack, you’ll wish you had 24 GB.
  • 512 GB fills up by month four. 1 TB is the realistic minimum for working developers.

For iOS/macOS development specifically: Xcode wants 35 GB just to install, plus simulators (5–15 GB each) and DerivedData (often 50+ GB). 1 TB is mandatory; 2 TB is comfortable.

For data engineering, ML, and game development: M4 Max with 36–64 GB RAM. The unified memory matters when you’re loading large models or working with multi-GB datasets.

Shell and terminal: the ten-minute investment

Terminal.app works. Most developers use a third-party terminal anyway because it’s faster and nicer.

  • iTerm2 — battle-tested, free, infinitely configurable.
  • Ghostty — newer, GPU-accelerated, beautifully fast. The 2026 favorite.
  • Warp — opinionated, modern, AI-assisted; loved by some, hated by others.
  • Alacritty or WezTerm — minimal, fast, scriptable.

Pick one and move on. The shell matters more than the terminal:

  • Zsh is the default. Add Oh My Zsh or Starship for a usable prompt with git status.
  • Fish is friendlier out of the box but breaks compatibility with bash scripts you’ll inevitably copy from Stack Overflow.
  • Nushell if you like structured pipelines. Niche but rewarding.

Whatever you choose, set up:

  • A prompt that shows current git branch and dirty state
  • Aliases for gst, gco, gp, gpl (or whatever git muscle memory you have)
  • z or zoxide for jumping between directories
  • fzf for fuzzy file and history search
  • A .zshrc (or equivalent) committed to dotfiles in a personal git repo

A two-hour shell setup pays off every working day for years.

Homebrew: the package manager for everything else

Install Homebrew on day one. It manages CLI tools, fonts, and applications.

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

The essential first install pass:

brew install git node python@3.12 pyenv nvm rbenv go rust
brew install --cask visual-studio-code docker rectangle raycast
brew install jq ripgrep fd bat eza httpie

A Brewfile in your dotfiles repo lets you reinstall the whole environment on a new Mac with brew bundle install. Critical when you switch machines.

Tip: Homebrew installs to /opt/homebrew on Apple Silicon, /usr/local on Intel. If you migrate from Intel to Apple Silicon, don't copy /usr/local across — reinstall via Brewfile instead.

Language version managers

Install language version managers, never the language directly.

  • Node.js — use nvm, fnm, or Volta. Volta is the fastest of the three and switches versions transparently per-project via package.json.
  • Python — use pyenv plus pipx for global tools. For data science, uv is replacing pip and conda for many workflows.
  • Rubyrbenv or mise.
  • Javasdkman! or mise.
  • Rustrustup is canonical.
  • Go — version with gvm or mise, or just install via Homebrew if you only need one version.

mise (formerly rtx) is the unified replacement for nvm/pyenv/rbenv if you want one tool managing all languages.

The reason: a project from 18 months ago will demand Node 18 and a current project wants Node 22. Without a version manager, you’ll spend an afternoon a quarter fighting this.

Set it up once, stay clean for lifeSweep does the routine cleanup so you can stay in your work. Download Sweep free →

VS Code, Cursor, or JetBrains

The 2026 editor landscape:

  • VS Code — still the default for most web and Python work. Free, huge extension ecosystem.
  • Cursor — VS Code fork with built-in AI. The default for many developers in 2025–26.
  • Zed — fast, native, multiplayer collaborative editor. Maturing fast.
  • JetBrains IDEs (WebStorm, PyCharm, IntelliJ) — heavier but more capable for large projects in their respective ecosystems. Worth the subscription if you live in one language.
  • Neovim — if you’ve already been a vim user. Don’t switch to Neovim because of YouTube videos; switch because the editor model fits your brain.

Settings sync via account or via a dotfiles repo. JetBrains settings sync is via account; VS Code settings sync is built in. Keep extensions minimal — every extension you install is a startup-time tax and an attack surface.

Docker, but with thought

Docker Desktop on Mac is a VM. It uses real disk and real RAM. Watch both.

  • Default disk allocation is often 64 GB. Bump it via Docker Desktop → Settings → Resources → Advanced if you work with multiple images.
  • Default memory is 8 GB. Increase to 16+ on a 24+ GB machine if you run stacks.
  • Run docker system prune -af monthly. Old images, dangling volumes, and stopped containers easily eat 30+ GB.
  • Consider OrbStack as a Docker Desktop replacement — faster, lighter, free for personal use, paid for commercial. Many developers swap over and never look back.
  • For lightweight one-service workloads, colima is the open-source alternative.

If you don’t actively use Docker, don’t install it. The background daemon is a real cost.

Database and tooling

A working developer’s Mac has at least one database running locally.

  • Postgres — install via Homebrew or Postgres.app for a click-to-launch GUI version.
  • MySQL/MariaDB — Homebrew works fine. Or run in Docker for project isolation.
  • Redis, Elasticsearch, MongoDB — Docker for these. They’re heavy.
  • TablePlus or DBeaver as the GUI client. TablePlus is paid but excellent; DBeaver is free.

Don’t run every database all the time. Brew services for on-demand starts: brew services start postgresql@16, brew services stop postgresql@16.

Xcode and iOS-specific setup

If you’re doing any Apple-platform development:

  • Install Xcode from the App Store, not via downloads from Apple’s developer portal (the App Store handles updates correctly).
  • Install Xcodes.app if you need multiple Xcode versions installed side by side. Common on teams testing across iOS major versions.
  • Run sudo xcodebuild -license accept after install.
  • DerivedData lives at ~/Library/Developer/Xcode/DerivedData/. Clear it monthly — it grows without bound. A 50–80 GB DerivedData folder is normal on an active iOS dev’s Mac.
  • iOS Simulators live at ~/Library/Developer/CoreSimulator/Devices/. Old simulators from removed Xcode versions don’t get cleaned up automatically. xcrun simctl delete unavailable clears them.
  • Archives live at ~/Library/Developer/Xcode/Archives/. Old build archives accumulate. Clear after submission unless you need them for debugging release builds.

Git, GitHub, and SSH

  • Install Git via Homebrew (the macOS Command Line Tools git is older).
  • Generate an Ed25519 SSH key, not RSA: ssh-keygen -t ed25519 -C "your_email@example.com".
  • Add to GitHub via gh auth login (the GitHub CLI handles this cleanly).
  • Use 1Password’s SSH agent or macOS Keychain to manage SSH key passphrases. Don’t store unencrypted private keys.
  • Install GitHub CLI, gh dash, and lazygit if you live in the terminal. GitHub Desktop or Tower if you prefer a GUI.

Free download for macOSSweep finds and clears the gigabytes of cruft that pile up around any heavy workflow. Try Sweep free →

Cleanup that actually matters

Developer Macs collect specific kinds of junk. The high-value targets:

  • node_modules in old projects — find ~/Code -name "node_modules" -type d -prune then delete the ones in projects you haven’t touched in months.
  • DerivedData for Xcode users — clear monthly.
  • Docker images and volumesdocker system prune -af --volumes quarterly.
  • Homebrew cachebrew cleanup -s monthly.
  • pip, npm, yarn, pnpm caches — each tool has its own. pnpm store prune, npm cache clean --force, etc.
  • iOS Simulatorsxcrun simctl delete unavailable and xcrun simctl erase all for stale data.
  • Browser caches if you do web work — Chrome and Safari each cache aggressively for development sites.

A monthly cleanup recovers 50–150 GB on an active developer’s Mac. Skip it for a year and the SSD is full.

Privacy, secrets, and security hygiene

Developers handle sensitive credentials. Don’t be sloppy.

  • Use 1Password CLI or Doppler for secrets in scripts, never .env committed to git.
  • Add .env, *.pem, *_rsa, and similar to a global gitignore: git config --global core.excludesfile ~/.gitignore_global.
  • Enable FileVault. Free on Apple Silicon and protects your code if the laptop is stolen.
  • Touch ID for sudosudo nano /etc/pam.d/sudo, add auth sufficient pam_tid.so at the top. Now sudo accepts your fingerprint. Massive quality-of-life win.

Set this up once. The Mac stays fast, the workflow stays tight, and the cruft stays where you can clear it.

← Back to all guides