[0.1.9.0] — 2026-06-26 18:55 IST · UI
This release is the UI overhaul. Every screen in the app has been reskinned against a new design system built from scratch on top of Material 3. The token layer, typography, component library, icon set, and settings screen all land together here. Nothing about how Kern reads, edits, or saves files has changed — this release is entirely about how it looks and feels.
Design system
Kern now has its own token layer (KernColorScheme, KernTheme, KernType, KernRadius, Density) sitting above Material 3's ColorScheme. Legacy call sites that reference Material 3 tokens directly continue to work without changes; the new tokens project onto them at theme resolution time.
Colour. Light and dark neutral palettes, 12 user-selectable accent colours, and per-format identity hues (the colour associated with each file type) are all defined as first-class tokens. Accent and theme choices persist across sessions.
Radius. A single locked value: Soft 6dp, applied consistently everywhere. No mixed corner radii.
Typography. Four font families are bundled as res/font/*.ttf under SIL OFL licences:
| Family | Use |
|---|---|
| Outfit | UI chrome — labels, buttons, metadata |
| Quicksand | Wordmark |
| IBM Plex Mono | Cell references, technical metadata |
| Sora | EPUB reading body |
Brand assets. Theme-aware chevron mark and wordmark lockup PNGs (res/drawable-nodpi/) that switch correctly between light and dark.
Component library (KernComponents.kt)
A shared set of composables used consistently across every screen:
KernIconButton · KernSegmented · FileBadge · OnDevicePill · SectionLabel · KernDivider · KernToggle · KernTopBar · KernBottomSheet · SheetActionRow · EditorToolbar · ToolbarButton · ToolbarSeparator
KernTopBar applies statusBarsPadding() and EditorToolbar applies navigationBarsPadding(), which fixes the top-bar/status-bar and bottom-toolbar/navigation-bar clashes that existed across all editors and the settings screen.
Icon set (KernIcons.kt)
Semantic mappings over Material Outlined icons, plus a custom GitHub vector. All icon references in the app go through this file rather than raw Material icon names.
Settings screen
A new Settings screen is wired from the file browser's settings cog (Destinations.SETTINGS). It is organised into grouped surface cards:
Appearance — Theme (light / dark / system) and Density selector.
Accent — 12-swatch colour picker. The selected accent propagates to header highlights, selection states, and per-format hue tints throughout the app.
Files & storage — Scan toggles for Documents and Downloads folders. These are now functional: FileScanner skips any folder whose toggle is off, so its files no longer appear in the browser or open in the app.
Privacy & permissions — Network access and analytics are shown as permanently off (no network permission in the manifest). Storage access status reflects the real runtime permission state and taps through to the system grant dialog when missing (previously this row was hardcoded to "GRANTED").
About — Version, licence (AGPL-3.0 text displayed in a full-screen scrollable dialog from res/raw/license.txt), Source code (opens the Kern GitHub repo), and PDF engine (opens the Qyra GitHub repo). Both links use external intents and require no network permission.
Settings are persisted via KernSettings.kt, an observable SharedPreferences-backed store for theme mode, accent, density, scan-documents, and scan-downloads.
Per-screen reskin
Every screen has been updated to the new design system. Notable specifics:
File browser — BrandMark + OnDevicePill header, KernSegmented tabs (Recent / All / Pinned), KernToggle chips for format filtering, reskinned list rows and grid cards, KernBottomSheet for sort and per-file actions, empty and missing-permission states.
Grid editors (CSV and Excel) — Sunken cell-reference pill styled in IBM Plex Mono, accent-coloured header selection, per-format hue tints on column and row headers, EditorToolbar at the bottom, zoom badge.
Word editor — Paper-page surface with updated formatting toolbar.
EPUB editor — Reading body set in Sora, chapter navigation and TOC sheet reskinned.
PowerPoint editor — 16:9 canvas, thumbnail rail, slide toolbar.
PDF editor — Page and zoom pills, tools bottom sheet.
EditorChrome — Migrated to KernTopBar and tokens; toolbar and extra-actions slots added for per-editor extensibility.
Bug fixes
Browser rescanning. The file list was being rebuilt on every navigation return. It now scans once on first load, again when a scan toggle changes, and again after a permission grant. Returning from an open file shows the cached list.
Scan toggles had no effect. The Documents and Downloads scan toggles in Settings were stored but not read by FileScanner. They are now respected.
Storage permission status was hardcoded. The Privacy & permissions card always showed "GRANTED" regardless of the real state. It now reads the live permission and updates when the user grants or revokes access.
Status-bar and navigation-bar clashes. The settings screen, all editor top bars, and all file viewers now apply statusBarsPadding(). Editor bottom toolbars apply navigationBarsPadding(). The visual overlap with system bars is gone.
Test results
| Environment | Suites | Tests | Result |
|---|---|---|---|
| Android Studio (device) | 5 | 15 | All passing |
No new automated tests in this release. All changes are UI and design. A tests-only release (0.1.9.1) is due next.
What comes next
Currently, not much. I will soon finish up Alpha by focusing on each file type and improving them one by one, especially for editing.