Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


A nifty command line tool to manage macOS icons

iconset is a new command line tool for macOS that allows you to change icons for macOS apps (excluding system ones of course).
It's considered generally stable and utilizes NSWorkspace() to change icons, so it should work on all macOS versions above 15.4.1.


In the future, I plan to set this up on brew, but for now the following command should work:
curl -Lo /usr/local/bin/iconset
sudo chmod +x /usr/local/bin/iconset


OVERVIEW: A nifty command line tool to manage macOS icons

USAGE: iconset <subcommand>

  --version               Show the version.
  -h, --help              Show help information.

  folder                  Set icons using a folder of '.icns' files with the same names as their '.app' counterparts
  single                  Set the icon of a '.app' file using a '.icns' file
  revert                  Revert a custom icon by supplying a path to a '.app' file or directory

  See 'iconset help <subcommand>' for detailed help.

Current Options

  • Specifying an icon and an application file to theme
  • Specifying the directory where Applications are stored (defaults to /Applications, ~/Applications)
  • Specifying a folder of .icns files who's names match their respective icons
  • Reverting an icon by supplying a folder of .icns or the path to a .app
  • Recursively searches through folders for .app files

Possible Expansions

  • Advanced manifest file which lets you map .icns files to .app files directly
  • Accompanying status bar app for macOS with automation and easy config UI


The project is an SPM Package that requires Xcode 13 and Swift 5.5.
Run swift build --disable-sandbox in the project root to build a debug binary.
For release binaries, instead run swift build -c release --arch arm64 --arch x86_64 --disable-sandbox in the project root
Currently, the in-app Xcode builds are sandbox enforced, potentially breaking iconset's access to certain files.