Developer guide · Windows and Mac
Mac setup checklist for developers
By Aqib Javed · Updated Nov 2, 2026
Set up a Mac for development in this order: update macOS and change a few settings (FileVault, file extensions, key repeat), install the Command Line Tools with xcode-select --install, or full Xcode for Apple platforms, then Homebrew. Configure Git and an SSH key, and install SDKs through version managers such as nvm, FVM and SDKMAN. When SDKs and caches pile up, Stackyard, a free open-source app, shows which projects use each version and frees the space.
1. Update macOS and change the basic settings
- Install updates first: System Settings, General, Software Update.
- Check FileVault is on in System Settings, Privacy & Security. It encrypts the disk, which matters on a laptop full of keys and client code.
- In Finder, open Finder, Settings, Advanced and tick Show all filename extensions. Press Shift Command Period in any Finder window to show or hide hidden files such as .zshrc and .env.
- In System Settings, Keyboard, move Key repeat rate up and Delay until repeat down if you hold arrow or delete keys in an editor.
- In System Settings, Trackpad, Point & Click, turn on Tap to click if you prefer it.
2. Install the Command Line Tools and Homebrew
The Command Line Tools bring git, clang and make. Install them first, or install Xcode from the Mac App Store if you build for iOS or macOS, then point the tools at it and accept its licence. Homebrew installs everything else. On Apple silicon it lives in /opt/homebrew, and your shell has to load it: the last line adds that to ~/.zprofile. zsh has been the default shell since macOS Catalina, so your settings go in ~/.zshrc and ~/.zprofile.
xcode-select --install
# with full Xcode instead:
sudo sh -c 'xcode-select -s /Applications/Xcode.app/Contents/Developer && xcodebuild -runFirstLaunch'
sudo xcodebuild -license
# Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile3. Set up Git and an SSH key
- Set your name and email, then create a key with ssh-keygen and give it a passphrase.
- Create ~/.ssh/config with a Host github.com block containing AddKeysToAgent yes, UseKeychain yes and IdentityFile ~/.ssh/id_ed25519, so the key loads with the passphrase from your keychain.
- Add the key to the agent with ssh-add, copy the public key with pbcopy, and paste it into your Git host's SSH keys settings.
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
ssh-keygen -t ed25519 -C "you@example.com"
ssh-add --apple-use-keychain ~/.ssh/id_ed25519
pbcopy < ~/.ssh/id_ed25519.pub4. Install SDKs through version managers
- Node: install nvm with its install script (curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.8/install.sh | bash), then nvm install --lts. An .nvmrc file in a project and nvm use switch to its version.
- Flutter: install FVM with brew tap btwld/fvm and brew install btwld/fvm/fvm. Run fvm use with a version inside a project and it writes .fvmrc and links the SDK.
- Java: install SDKMAN with curl -s "https://get.sdkman.io" | bash, then sdk install java. sdk env init writes a .sdkmanrc file, and sdk env switches to it.
- Android: install Android Studio and let it download the SDK, which goes to ~/Library/Android/sdk by default.
- iOS: run xcodebuild -downloadPlatform iOS once Xcode is set up, if you build for the iPhone.
Projects pin different versions, so install SDKs through a version manager instead of one global copy. Each of these writes a small file to the project, so the right version follows the code.
5. Keep disk space in check
A developer Mac fills up quietly: several Flutter versions in FVM's cache, Gradle caches, Xcode DerivedData and simulator runtimes, Android system images and emulators, and node_modules in projects you finished months ago. Check once a month, before the disk is full rather than after.
Stackyard is a free, open-source (MIT) app for macOS 12 or later and Windows that scans for Flutter, the Android SDK, Xcode, Node, Gradle, Java and more, and shows which of your projects use each version. It reads FVM's cache, clears ~/.gradle caches, Xcode DerivedData, DeviceSupport, simulator caches and runtimes (Archives are left alone), node_modules and ios/Pods in projects you haven't touched, and Android SDK packages, system images and emulators. Removals go to the Trash, and you see every step first.
6. Optional: small menu bar apps
- Notchet: clipboard history in the MacBook notch, opened with Option Command V. It hides API keys and tokens copied in Terminal so they don't sit in your history. Free for 7 days, then $9.99 once.
- DisplayShift: when you plug in a monitor, pick which windows move over, and get them back after sleep. Free for 7 days, then $6.99 once.
- Scrollwise: natural scrolling on the trackpad and classic scrolling on a wheel mouse at the same time. Free, with an optional Pro for $2.99 once.
Questions
Do I need Xcode for development on a Mac?
- Only to build for iOS, macOS or other Apple platforms. For web, backend or Android work, the Command Line Tools from xcode-select --install are enough and much smaller.
What should I install first on a new Mac for development?
- The Command Line Tools, then Homebrew. Most other tools install through Homebrew or their own version managers after that.
Should I migrate my old Mac or set up the new one from scratch?
- A clean setup leaves old SDKs, caches and settings behind, which frees a lot of space. Copy your dotfiles, SSH keys and projects across, and reinstall tools with the steps above.
Where does Homebrew install on an Apple silicon Mac?
- In /opt/homebrew. Add eval "$(/opt/homebrew/bin/brew shellenv)" to ~/.zprofile so your shell finds the brew command.
How do I free up space on a developer Mac?
- Remove old SDK versions, Gradle caches, Xcode DerivedData, unused simulators and emulators, and node_modules in old projects. Stackyard shows which of these your projects still use before you remove anything.