Ninite for macOS — tick the apps and CLI tools you want, get a one-line Homebrew installer. No backend, no tracking, no accounts.
macnite.app · Install the desktop app · Presets
Macnite lets you set up a new Mac in seconds. Browse or search thousands of Homebrew casks (GUI apps) and formulae (CLI tools), tick what you want, then either:
- Copy a one-liner — paste it into Terminal and everything installs in one shot
- Download a shell script — save it and run it later, share it with your team, or keep it for your next Mac
Homebrew is installed automatically if it isn't already present. The script tracks failures, prints a done report, and shows you what saved time.
- Curated homepage tiles — popular apps grouped by category (browsers, chat, media, productivity, utilities, AI assistants) so you can get set up fast without searching
- Full catalog search — searches the entire Homebrew cask + formula catalog (cached from the official API, refreshed every 24 hours)
- Presets — one-click bundles for common setups: New Mac Essentials, Developer, Designer, Student, Content Creator, Power User, Gaming, and AI Assistants
- Share links — pick your apps and share a URL that pre-ticks the same selection for someone else
- Copy command or download script — the one-liner is great for a quick setup; the
.shscript is useful for scripted or repeated installs - Error reporting — if something fails to install, the script tells you clearly and the app lets you report it
- Pure static site — no server, no database, no login, no tracking. Just HTML, CSS, and JavaScript talking to the public Homebrew API
- Go to macnite.app
- Tick apps on the homepage tiles, or type in the search bar to find anything in the Homebrew catalog
- When you're happy with your selection, click Copy command or Download script
- Open Terminal and paste (or run the downloaded script):
# Example — the command Macnite generates looks like this:
command -v brew >/dev/null 2>&1 || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" \
&& brew install --cask visual-studio-code iterm2 \
&& brew install git nodeThat's it. Homebrew is installed if missing, then all your chosen apps install in one go.
If you don't want to pick apps manually, head to macnite.app/presets and choose a bundle that fits your use case. Each preset has a Copy command and Download script button — no ticking required.
| Preset | What's included |
|---|---|
| New Mac Essentials | Chrome, 1Password, Raycast, Rectangle, VLC, The Unarchiver, AppCleaner |
| Developer | VS Code, iTerm2, Docker, GitHub Desktop, Postman, TablePlus, git, node |
| Designer & Creative | Adobe CC, Figma, Sketch, Blender, GIMP, Inkscape, HandBrake |
| Student & Office | LibreOffice, Zoom, Notion, Obsidian, Zotero, ChatGPT, Google Drive |
| Communication | Zoom, Slack, Discord, Microsoft Teams, WhatsApp, Signal, Telegram |
| Power User | Raycast, Rectangle, AltTab, Karabiner-Elements, Stats, HiddenBar |
| AI Assistants | ChatGPT, Claude, Ollama, LM Studio |
| Gaming | Steam, Epic Games, Discord, OBS |
| Content Creator | OBS, Audacity, HandBrake, DaVinci Resolve, Krita, IINA |
The bare cask command:
brew install --cask seanblowers/macnite/macniteOr the full one-liner (installs Homebrew if missing, tracks failures, prints the done report):
command -v brew >/dev/null 2>&1 || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" && eval "$(/opt/homebrew/bin/brew shellenv 2>/dev/null || /usr/local/bin/brew shellenv)" && macnite_fails="" && macnite_start=$SECONDS && for c in seanblowers/macnite/macnite; do brew install --cask "$c" || macnite_fails="$macnite_fails $c"; done && if [ -n "$macnite_fails" ]; then echo; echo "Could not install:$macnite_fails"; echo "(They may already be installed manually — move them to the Trash, then re-run.)"; fi && { macnite_elapsed=$((SECONDS - macnite_start)); macnite_fail_count=$(echo "$macnite_fails" | wc -w | tr -d " "); macnite_ok=$((1 - macnite_fail_count)); echo; echo "All done — $macnite_ok apps installed in $((macnite_elapsed / 60))m $((macnite_elapsed % 60))s. You saved ~$((macnite_ok * 10)) clicks."; } && { curl -fsSL https://macnite.seanblowers.app/install-banner.txt 2>/dev/null || true; }Contributions are welcome! Here are the main ways to help:
The homepage tiles live in popular.js. Each entry is a short object:
{ kind: 'cask', token: 'your-app-token' } // GUI app
{ kind: 'formula', token: 'your-tool' } // CLI tooltoken is the Homebrew cask or formula name (e.g. visual-studio-code, node). Check formulae.brew.sh if you're unsure of the exact token.
Open a GitHub Issue with the preset name, a one-line description, and a list of cask/formula tokens. Or use the Suggest a preset form at macnite.app/presets.
- Fork the repo
- Run locally (see below)
- Make your changes
- Open a pull request with a clear description of what you changed and why
Please keep pull requests focused — one fix or feature per PR makes review much faster.
python3 -m http.server 8000
# open http://localhost:8000Note: use a real HTTP server, not
file://— thefetchand clipboard APIs require a proper origin.
Drag the project folder into the Netlify UI, or use the CLI:
netlify deploy --prodNetlify auto-detects the hidden <form name="macnite-errors"> in index.html and provisions a form endpoint automatically. Submissions appear under Forms in the Netlify dashboard.
| File | Purpose |
|---|---|
index.html |
Main page markup, including the hidden Netlify Forms element |
styles.css |
All styling |
app.js |
Fetches the Homebrew API, renders the grid + search, builds the install command and script, handles error reporting |
popular.js |
Curated list of homepage tiles |
presets.js |
Preset definitions and the presets page logic |
shared.js |
Shared utilities: catalog loading, command/script building, share URL helpers |
sw.js |
Service worker for offline support |
netlify.toml |
Publish dir and cache headers |
- Casks:
https://formulae.brew.sh/api/cask.json - Formulae:
https://formulae.brew.sh/api/formula.json
Both are cached in localStorage for 24 hours.