Appearance
Custom Themes
One of Ditto's most beloved features is its theme engine. Here's how to make Ditto look exactly the way you want.
Quick theme switching
The fastest way to change your theme:
- Click your avatar in the bottom-left sidebar
- In the popover, you'll see theme presets as small preview cards
- Click one to apply it instantly
You can also switch between Light, Dark, and System modes from the same menu.
Built-in presets
Ditto ships with 7 handcrafted theme presets:
| Theme | Vibe | Mode |
|---|---|---|
| Black | OLED true black | Dark |
| Pink | Soft pastel warmth | Light |
| Midnight | Deep blue night | Dark |
| Toxic | Matrix green-on-black | Dark |
| Lavender | Purple pastel dream | Light |
| Ocean | Cool teal depths | Dark |
| Sunset | Warm golden hour | Light |
Full appearance settings
For more control, go to Settings > Appearance:
- Theme mode -- Light, Dark, or System (follows your OS)
- Theme preset -- Choose from the built-in options
- Content visibility -- Toggle which content types appear in your sidebar and feed
Theme tokens
Under the hood, each theme is a set of 19 CSS custom properties (tokens) that control every color in the interface:
background/foreground-- Main page colorscard/card-foreground-- Card surfacesprimary/primary-foreground-- Brand accentsecondary/secondary-foreground-- Secondary elementsmuted/muted-foreground-- Subtle text and backgroundsaccent/accent-foreground-- Interactive highlightsdestructive/destructive-foreground-- Danger/delete actionsborder-- Border colorsinput-- Form input bordersring-- Focus ring color
Theming for self-hosters
If you're running your own Ditto instance, you can set a default theme for all users in your ditto.json:
json
{
"theme": "custom",
"customTheme": {
"background": "228 20% 10%",
"foreground": "228 10% 92%",
"primary": "258 70% 60%",
"primaryForeground": "0 0% 100%"
}
}Or use the default dark/light/system modes:
json
{
"theme": "dark"
}Users can still override this with their own preferences -- the precedence is:
User settings (localStorage) > Build config (ditto.json) > Hardcoded defaultsThis means you can brand your community instance with a custom look while still letting individuals personalize their experience.