Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Theming

One palette set, five surfaces

KyPost ships 15 theme presets, and they are the same 15 everywhere: the web UI, Android, iOS, macOS, and Linux. The palettes are not “matched by eye” — the values are copied byte for byte between the implementations, and the theme a user picks on one client is the theme they see on the next.

The default is Patina Ky.

The 15 presets

ThemeTheme
Patina Ky (default)Polished Ky
Dark MatterLight Matter
OceanSky
ForestTropics
Tropic NightSun
CoffeeSpace
Cyber PunkNeon Purple
White Cliffs

Where each implementation lives

SurfaceFile
Webfrontend/src/theme.ts (kypost-server)
AndroidAppTheme.kt (kypost-android)
macOS & iOSKyPost/Style/ (kypost-for-Mac)
Linuxcore/theme/AppTheme.cpp — the palette table; ThemePalette.h holds the invariant (kypost-Linux)

These four are a binding contract. Changing a colour in one without changing it in the others breaks the promise that the theme travels with the user, so a palette edit is a four-repo change.

Linux additionally asserts the invariant in code: ThemePalette.h checks the background’s perceptual lightness, so a theme declared light has to actually present as light.

Choosing a theme

  • Web — Settings → Appearance.
  • Android — the Themes screen.
  • macOS & iOS — Settings (⌘, on macOS).
  • Linux — Settings.

Custom themes

There is no custom-theme editor. The preset list is the supported surface; a new palette is a code change in the four files above.