How themes work
Discord styles its UI from a palette of named colors. A theme overrides that palette: you set values for the color names you want to change, and Unbound applies them to the app. A theme is parsed JSON with nostart/stop to run. Selecting or removing one updates the saved choice right away, but the colors change on the next restart (see below).
Themes use the same manager as plugins, and go through the same lifecycle: loaded, enabled, disabled, and persisted. The difference is that enabling a theme applies it. Only one theme is active at a time, so enabling a new one replaces the previous one.
Colors are applied natively, not from JavaScript. At startup, the loader reads your theme’s
bundle.json and swizzles Discord’s color lookups. A theme takes effect only after a restart, and no JavaScript hook can recolor a running app. See Theme Types for the bundle’s shape.What a theme defines
Manifest
Metadata that identifies your theme: name, authors, version.
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. For behavior, write a plugin.