How themes work
Discord styles its UI from a palette of named colors. A theme overrides that palette: you provide values for the color names you want to change, and Unbound applies them to the app. Because a theme is just parsed JSON with nostart/stop to run, applying or removing one is instant.
Themes are governed by the same manager as plugins. They are loaded, enabled, disabled, and persisted through the same lifecycle. The one difference is that enabling a theme applies it: only one theme is active at a time, so enabling a new one replaces the previous.
Colors are applied natively, not from JavaScript. The loader reads your theme’s
bundle.json at startup and swizzles Discord’s color lookups, so a theme takes effect only after a restart, and there is no JavaScript hook that recolors a running app. See Theme Types for the bundle’s shape.What a theme defines
Manifest
Metadata (name, authors, version) identifying your theme.
Theme Types
The semantic and raw colors that make up the palette, and the base type they extend.
Backgrounds
An optional image behind the interface, with blur and opacity.
A theme can’t run logic or patch components; it only restyles. If you need behavior, that’s a plugin.