Runic GitHub

Runic / Use

Themes and skins

Thirteen themes drawn by seven kits. A theme is tokens; a skin recomposes every page.

Seven kits

Gazette theme
GazetteFraunces · Manrope
Sumi theme
SumiShippori Mincho
Blueprint theme
BlueprintGeist Mono
Retro theme
RetroArchivo Narrow
Departures theme
DeparturesBarlow Condensed
Flight deck theme
Flight deckB612
Receipt theme
ReceiptCourier Prime

Themes and skins

Runic has 13 themes. A theme is tokens: colours, type families, corner radius, motion, density. A skin is the kit those tokens are drawn with: how each page is composed and what the chrome looks like. Several themes can share a skin and differ only in tokens, and a new theme with a new skin changes the metaphor of the panel, not just its colours.

Pick one in Settings → Appearance. The font picker defaults to Theme default, which follows the theme’s own typeface; any family you pick overrides it.

The seven kits

ThemeSkinThe ideaFaces
GazetteGazetteA printed broadsheet: masthead, lead story, columns, pull quote, dotted leaders.Fraunces, Manrope
SumiSumiInk on washi: hanko seals, brush-stroke gauges, an ensō for the day’s average, dry-brush rules.Shippori Mincho, Zen Kaku Gothic New
BlueprintDraftingAn engineering sheet: dimensioned bars, 45° hatching, callouts, a title block.Geist, Geist Mono
RetroInstrumentA 1970s bench instrument: VU meters, LCDs, keycaps that press in, corner screws.Archivo Narrow, Space Mono
DeparturesDeparturesA split-flap board. Every reset is a departure with a gate, a time and a status.Barlow, Barlow Condensed
Flight deckFlightDeckAn avionics primary flight display. Usage is a tape; pace is the attitude indicator.B612, B612 Mono
ReceiptReceiptThermal paper. Every ping prints a receipt with line items, a stamp and a barcode.Courier Prime

System, Dark, Glass, Terminal, Yantra and Relief draw with the standard kit.

Gazette
Gazette
Sumi
Sumi
Blueprint, Drafting skin
Blueprint · Drafting
Retro, Instrument skin
Retro · Instrument
Departures
Departures
Flight deck
Flight deck
Receipt
Receipt

Renders are from the demo seed, not real accounts.

How a skin works

A skin is a type conforming to RunicSkin (Sources/Runic/Skins/RunicSkin.swift). It composes up to three pages:

  • providerPage: the provider card (windows, balance, cost, insights).
  • frontPage: the overview of every provider.
  • resetsPage: windows counting down, and banked resets.

and supplies chrome slots the shared surfaces ask for: panel, tabs, chip, actionRow, sectionHeader, note, footer, popoverChrome, panelInset, showsTabTray, and stageOverlay for decoration over the whole popover.

Every slot returns nil for “use the standard rendering”, so a skin implements only what it changes and no view in Views/Menu/ ever branches on a theme id. A theme names its skin with "skin" under style in its JSON; the registry resolves it and falls back to the standard kit for an unknown id, so a hand-edited theme file can never blank the panel.

Fonts

All bundled faces are SIL Open Font License, static weights only. Variable fonts silently fall back to the system face under NSHostingView, so they are never bundled. Faces are addressed by PostScript name (Font.custom("ShipporiMincho-SemiBold", fixedSize:)), and text that uses one carries .skinFace(), which clears the font design a monospaced font pick would otherwise push through the whole panel. Provenance for every file is in Sources/Runic/Resources/Fonts/FONT_PROVENANCE.md.

Writing your own

You can add a theme as data: drop a JSON file in ~/Library/Application Support/Runic/Themes/ with "skin": "standard" (or any bundled skin) and your own colours. A new skin is code; see Contributing.

Edit this on the wiki