Essential tools for Mac development: GitHub CLI, Git, Node.js, pnpm, Cursor, Claude Code, and Powerlevel10k.
How long will this setup take?
The complete setup takes about 15-20 minutes. You can also pick and choose specific tools if you already have some installed.
Setting up a new Mac for development can feel overwhelming with countless tools and configurations. This guide gives you exactly what you need to be productive immediately.We’ll start with foundational tools, then layer in productivity enhancers that make Mac development enjoyable.
Why start with Homebrew?
Homebrew is the missing package manager for macOS. Instead of hunting down installers, dealing with version conflicts, or manually managing dependencies, Homebrew handles everything with simple commands. It’s how experienced Mac developers install and manage their tools - one command instead of clicking through dozens of installation wizards.
Before installing anything else, we need a package manager. Homebrew is the Mac standard. Every tool installed through Homebrew follows the same patterns, updates the same way, and can be removed cleanly without leaving artifacts scattered across your system.
After installation, you need to add Homebrew to your PATH. This step is often missed, leading to “command not found” errors that frustrate new users. The location depends on your Mac’s architecture:For Apple Silicon Macs (M1/M2/M3):
The difference in paths exists because Apple Silicon Macs use a different directory structure to maintain compatibility with both ARM and Intel binaries. Don’t worry if this seems complex - once set up, you’ll never think about it again.
Why do I need both Git and GitHub CLI?
Git handles version control locally, while GitHub CLI connects you to GitHub’s services. Together, they eliminate the friction of managing code. No more switching to the browser to create pull requests, no more complex SSH key setups - just seamless integration between your local work and GitHub.
Git provides version control, change history, and safe experimentation. The GitHub CLI brings GitHub’s collaborative features directly to your terminal.
This single command installs both tools. Homebrew handles all the dependencies, ensures they’re compatible, and sets up the necessary paths. Compare this to manually downloading installers, running them, and hoping everything works together.
What about SSH keys?
GitHub CLI handles authentication automatically, creating and managing credentials securely. You can still set up SSH keys if you prefer, but for most developers, the GitHub CLI’s authentication is simpler and just as secure.
The authentication process opens your browser, confirms your identity, and securely stores your credentials. This modern approach is more secure than manually managing SSH keys and works seamlessly across different repositories and organizations.
Why configure Git beyond the basics?
These configurations aren’t just preferences - they solve real problems. Setting your identity ensures your commits are properly attributed. The other settings prevent common frustrations like merge conflicts, orphaned branches, and inconsistent branch names across projects.
Git’s defaults are conservative. These configurations address specific pain points that developers encounter daily.
Why pnpm instead of npm or yarn?
pnpm is faster and uses significantly less disk space by sharing dependencies across projects. If a hundred projects use React 18, pnpm stores it once and links it everywhere. It also prevents the “works on my machine” problem by ensuring stricter dependency resolution.
JavaScript development requires a package manager. While npm comes with Node.js, pnpm solves real problems that plague JavaScript projects: disk space consumption, installation speed, and phantom dependencies.
Will pnpm work with my existing projects?
Yes! pnpm is fully compatible with npm and yarn projects. You can use pnpm install in any project with a package.json. Your teammates can continue using npm or yarn - pnpm generates a standard node_modules structure.
Corepack is Node’s built-in tool for managing package managers. It ensures everyone on a project uses the same package manager version, preventing “works on my machine” issues. This is especially valuable in team environments where consistency matters.
Do I need both Cursor and Claude Code?
They serve different purposes. Cursor is your primary IDE for deep work - writing features, refactoring, debugging. Claude Code excels at quick edits, code generation, and interactive problem-solving from the terminal. Think of Cursor as your workshop and Claude Code as your Swiss Army knife.
Modern developers use multiple tools for different tasks. Cursor and Claude Code complement each other, covering everything from quick fixes to complex development sessions.
Cursor is a fork of VS Code with AI capabilities built in:
AI understands your entire codebase context
Natural language editing that actually works
Predictions that feel like a senior developer looking over your shoulder
The --cask flag tells Homebrew this is a GUI application. Homebrew Cask manages these just like command-line tools, providing consistent installation and updates.
npm install -g @anthropic/claude-code# Start using itclaude
Claude Code brings Anthropic’s Claude directly to your terminal. Use it for:
Rapid prototyping without leaving the command line
Explaining complex code sections
Generating boilerplate that actually fits your project’s patterns
Interactive debugging sessions where you can ask “why isn’t this working?”
The first thing you’ll realize is that Claude Code asks your permission for literally everything - every file read, every command execution, every edit. This is by design for safety, but once you feel comfortable with it, running claude --dangerously-skip-permissions will bypass permission checks. I’m not responsible for what might happen if you use this flag - it’s powerful but removes important safeguards!
Why customize my terminal?
A well-configured terminal isn’t about aesthetics - it’s about information density and reducing cognitive load. Powerlevel10k shows git status, execution time, error states, and context without requiring separate commands. You’ll spot issues faster and understand your environment at a glance.
The default terminal shows just a dollar sign and cursor. Powerlevel10k transforms it into an information-rich environment that helps you work better.
The --depth=1 flag performs a shallow clone, downloading only the latest version without the entire history. This saves time and space while giving you everything you need.
These plugins transform your terminal from a command executor to an intelligent assistant:
# Auto-suggestions as you typegit clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestionsecho "source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh" >> ~/.zshrc# Syntax highlighting for commandsgit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlightingecho "source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ~/.zshrc
Auto-suggestions remember your command history and suggest completions as you type. Syntax highlighting shows valid commands in green and errors in red before you press enter. Together, they catch typos, remind you of forgotten flags, and speed up repetitive tasks.
How do I know everything is working?
Run through this checklist to verify your installation. Each command should return a version number or status message. If something fails, that component needs attention - but don’t let one failure stop you from checking everything else.
# Package managerbrew --version# Version controlgit --versiongh --version# Node.js and pnpmnode --versionpnpm --version# Editors (if installed)cursor --versionclaude-code --version# Check git configgit config --get user.namegit config --get user.email# Test GitHub CLIgh auth status
Save this checklist - it’s useful whenever you set up a new machine or help a colleague debug their environment.
Can I automate all of this?
Absolutely! This script installs everything in one go. It’s perfect for setting up new machines, onboarding team members, or recovering from a system reinstall. The script is idempotent - running it multiple times won’t cause issues.
Save this as ~/setup-essentials.sh:
#!/bin/bashecho "Installing Mac Developer Essentials..."# Install Homebrew/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"eval "$(/opt/homebrew/bin/brew shellenv)"# Git and GitHub CLIbrew install git gh# Node.jsbrew install nodenpm install -g pnpm# Code editorsbrew install --cask cursornpm install -g @anthropic/claude-code# Powerlevel10kgit clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k# Zsh pluginsgit clone https://github.com/zsh-users/zsh-autosuggestions ~/.zsh/zsh-autosuggestionsgit clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.zsh/zsh-syntax-highlightingecho "Setup complete! Restart terminal and:"echo "1. Run 'p10k configure' to set up your prompt"echo "2. Run 'gh auth login' to connect GitHub"echo "3. Configure git with your name and email"
Your essentials are installed. The tools form a solid foundation for productivity enhancers that multiply your effectiveness.
Productivity Apps
Raycast, HyperKey, and SuperWhisper for next-level productivity
Terminal Aliases
Time-saving shortcuts and custom functions
Keyboard Shortcuts
Master Mac keyboard shortcuts
Each next step builds on what you’ve installed. Productivity apps leverage your terminal setup. Aliases enhance your shell. Keyboard shortcuts work across all tools. Each piece of the system amplifies the others.