Skip to main content
An icon pack replaces Discord’s built-in icons with your own. Like a theme, it’s a restyling addon. A theme recolors the interface, and an icon pack replaces the images Discord renders for its icons.

How icon packs work

Discord refers to each icon by name and resolves it to a bundled asset. An icon pack hooks into that step. For each icon name the pack replaces, Unbound points the asset at your image instead of Discord’s. Names you don’t override fall through to Discord’s originals, so a pack can replace a few icons or all of them. Internally, each overridden asset has an iconPackPath (where your replacement image is) and an iconPackScale (the density the image was made for). Unbound uses these to load your image at the right resolution.
An icon pack overrides icons by name. The asset names that the assets module discovers are the same names a pack targets.

What an icon pack ships

Unlike a plugin, a pack ships no code. It’s a folder of image files that mirrors Discord’s asset tree, installed under Unbound/Icons/<id>. See iOS for where that folder is on the device.

Manifest

Metadata identifying the pack: name, authors, version, plus type and source.

Assets

How Discord’s icons are named and discovered. These are the names a pack overrides.

File layout

Each image’s path mirrors the asset it replaces. To build it:
  1. Take the asset’s location and strip the leading assets/.
  2. Add the asset name.
  3. Add the extension.
For example:
Scale variants use the @2x and @3x suffixes. A file with no suffix is scale 1. Unbound picks the highest scale present for each asset, so shipping only an @3x file is fine. An asset with no matching file in the pack keeps Discord’s original.

How installation resolves files

Unbound installs a pack from its manifest URL. The manifest’s source field sets how the files are downloaded. For the in-app install steps, see Managing Addons.
main is the repo URL. You can narrow it to a branch and folder with /tree/<branch>/<subpath>. Unbound reads the repo’s file tree and downloads every file under that path into the pack folder. If source is omitted and main is a github.com URL, this method is used.
The pack installs through the same bundle download path as other addons.
Only one pack applies at a time, like a theme. Enabling a pack replaces the applied one. Disabling it falls back to the built-in default pack, which renders Discord’s own icons. See managers for the methods that toggle packs.
Match Discord’s icon names exactly. An override applies only when its name matches the asset Discord requests. A mismatched name does nothing.