Skip to content
WM KeyboardWM Keyboard
Accessibility

Keyboard themes

Every row on the theme list and the theme editor — mode, auto light/dark, and every color, shape, and animation control.

Two screens live behind Keyboard themes: a gallery for picking, creating, and managing themes, and an editor for building one from scratch. This page is the field reference for both. For the reasoning and the bigger picture, read Theming overview and Theme editor instead.

The theme gallery: Mode, Auto (light + dark), and the Themes grid.

The theme gallery: Mode, Auto (light + dark), and the Themes grid.
WM KeyboardAppearanceKeyboard themes

Reach it from Appearance → Style → Keyboard themes, or by searching “themes” in settings search. The whole screen is one scroll, in three groups.

SettingControlOptionsDefault
ModeSegmented rowSystem / Light / Dark / AmoledSystem
Material You colorsToggleOn

Both apply to the settings app itself and to the Default (system) theme only. Every built-in and custom theme carries its own fixed palette regardless of either setting. Amoled always renders dark and forces the Default theme’s board to pure black, unlike System, which waits on the phone’s own light/dark setting.

SettingControlOptionsDefault
Auto themeToggleOff
Light theme (shown only while Auto theme is on)Picker rowDefault, any built-in, or any custom themeDefault (system)
Dark theme (same)Picker rowDefault, any built-in, or any custom themeDefault (system)
Trigger (same)Segmented rowSystem light/dark / Time of day / Sunrise & sunsetSystem light/dark
Light theme from (Time of day only)Time picker7:00 AM
Dark theme from (Time of day only)Time picker7:00 PM

Choosing Sunrise & sunset shows explanatory text instead of a control: it reads the location already saved in the weather tool and computes locally, with no network call, falling back to System light/dark if no location is saved. While Auto theme is on, the Themes grid below still shows which card is selected, but tapping one only previews it; a note above the grid says so.

Auto theme on, with Time of day chosen and both clock rows visible.

Auto theme on, with Time of day chosen and both clock rows visible.
SettingControlOptionsDefault
Theme gallery styleSegmented rowAuto / Grouped / SeparateAuto

Grouped draws a theme that has more than one look as a single card with a dot per look; Separate gives every look its own card. Auto reads the answer to the setup wizard’s “how much do you want to tweak” question: “keep it simple” gets Separate, every other answer (including never having answered) gets Grouped. A caption above the control says which way it’s currently resolving. See Theme families and looks.

ControlWhat it does
Create themeMakes a new custom theme named “My theme”, seeded from the first swatch in the theme editor’s color row, generated as a dark theme, sets it active, and opens the editor on it right away
ImportOpens a file picker for a theme file, adds it to Your themes under a fresh id, and switches to it immediately (the editor doesn’t open)
FlorisBoardReads a FlorisBoard .flex theme file and converts it into a custom theme. See Importing other keyboards
Card tapApplies that theme to the keyboard immediately. On a family card, tapping a dot applies that look and turns the card’s preview to it
Card pencil (custom theme)Opens that theme in the editor
Card pencil (built-in theme)Copies the built-in into a new custom theme named “(name) copy”, makes the copy active, and opens the editor on the copy (the original is untouched)
Card pencil (built-in family)Asks Make a copy first: Only this look copies the look the card is showing, All looks copies the whole family
Card pin (built-in cards only)Adds or removes that look from the keyboard’s Themes tool shortlist. Six built-ins are pinned on a fresh install: Ocean, Pitch black, Snow, Nebula, Sunset drift, Aurora
Card exportSaves a .wmtheme.json file named after the theme, with any background image embedded as base64. A grouped card exports the whole family; a separate card exports just the one look
Card delete (custom themes only)Confirms first, then removes the theme. Its background and texture images are swept off disk once nothing else still points at them, since looks and family copies share image files. Deleting a variant’s own card (Separate style) removes just that look and falls the selection back to the family; deleting a family card, or the first look’s card, removes the whole family and falls back to Default

The grid runs two cards per row: Default (system) first (no edit, export, or delete, since it’s generated live rather than stored), then Your themes (only shown once you have at least one), then Built-in with its own note, “Press a theme to use it. The pencil icon makes a copy that you can edit.” Built-in cards never show a delete button. A second caption under that one explains the pin: your own themes always show in the Themes tool, built-ins only when pinned.

Deleting a custom theme asks for confirmation before removing it.

Deleting a custom theme asks for confirmation before removing it.

There are 28 built-in themes: 18 original WM Keyboard designs plus 10 ports of well-known editor colour schemes (Dracula, Nord, Solarized Dark, Solarized Light, Catppuccin Mocha, Catppuccin Latte, Catppuccin Frappé, Catppuccin Macchiato, Tokyo Night, Cyberpunk). Twenty-two of them sit in five families, so the grouped grid shows eleven built-in cards. See Theming overview for the full list and what each one showcases.

WM KeyboardAppearanceKeyboard themes(edit a theme)

Every field here writes and applies the instant you touch it, so there’s no save step. A live keyboard preview is pinned at the top and redraws on every change (the gradient animation itself is static in this preview; see it move only on the real keyboard).

The theme editor, live preview pinned above the color and shape controls.

The theme editor, live preview pinned above the color and shape controls.
WM KeyboardAppearanceKeyboard themes(edit a theme)Looks
ControlWhat it doesShown when
Look chipsOne chip per look; tapping one points the whole editor below at that lookAlways (a one-look theme shows one chip)
Add lookCopies the open look into a new one and switches to itUntil the theme has twelve looks beyond the first
Delete this look (bin icon)Confirms, then removes the open look and reopens the first oneWhile a look other than the first is open
Group nameText field for the label the gallery card shows over the dotsOnce the theme has more than one look

Everything below this row edits the open look alone. See Theme families and looks.

SettingControl
Theme nameText field
Dark themeToggle (regenerates the palette as a dark or light set)
Seed swatch row15 tappable colors

Tapping a swatch, or flipping Dark theme, reseeds every seed-derived color at once (board, keys, accent, popups) while leaving hand-edited fields, gradients, the background image, key shape, border, and animation untouched.

WM KeyboardAppearanceKeyboard themes(edit a theme)Board
SettingControlDefault
BackgroundColor, alpha#17181C
Gradient backgroundGradient, off by defaultOff
Background imageOpens Select a backgroundNone
Crop image (image set)Opens the crop dialog
Image opacity (image set)Slider, 0–100%100%
Image blur (image set)Slider, 0–250 (off)
Play animated image (image set)ToggleOff
Landscape background imageOpens Select a background, always shownNone
Crop landscape image (landscape image set)Opens the crop dialog
Photo credit (service photo set)Opens the photographer’s page
Rotating background (collection not empty, or rotation on)Opens Rotating backgroundOff
Photo services (own key set, or a service photo kept)Opens the service keys screen

Select a background offers four choices: Add from this device (the system photo picker), Find a photo online (Unsplash and Pexels), Photo collection, and Remove when the slot already has an image.

Applying a background zeroes the board color’s alpha and drops fully opaque key and modifier colors to about 62%, so the photo is visible rather than covered by solid keys; both stay editable afterward. Keys you had already made see-through are left alone.

The landscape image row is independent: it’s shown even with no portrait image set, falls back to the portrait image (or the plain background color) when empty, and lets a portrait photo and a wide crop each fit their own orientation instead of one being stretched into the other.

Play animated image plays a GIF or animated WebP background instead of freezing it on frame one. It and the blur slider exclude each other: turning the switch on zeroes the blur, and raising the blur turns the switch off, because blurring a running animation re-renders it every frame. The animation also holds still under reduce motion and power saving.

The last two rows stay hidden until you have started using photos, so a theme with one gallery picture never shows them. Full walkthroughs: Image backgrounds and Online photos and rotation.

SettingControlDefault
Key shapeRow → picker dialog: Rounded / Square / Pill / Cut / Squircle / Arch / Leaf / Slanted / Hexagon / Scalloped / Ticket / CircleRounded
Letter keysColor, alpha#303338
Key gradientGradient, off by defaultOff
Key textColor#E9E9EE
Modifier keysColor, alpha#222428
Modifier key textColor, alpha off, Auto → Key textAuto
Enter keyColor#4C8DF6
Enter key iconColor#0B1220
Pressed keyColor, Auto → blended from Letter keys and AccentAuto
Key borderColor, Auto → no borderAuto
Border width (border color set)Slider, 0–3dp0dp

The Key shape row opens a dialog rather than filling a segmented row: twelve names don’t fit side by side, and a name on its own doesn’t tell you much, so each row of the dialog draws the shape at key proportions and at this theme’s corner radius. Rounded and Cut both follow the corner-radius value (global or per-theme, see Corners), but Cut clamps its own radius to 2–14dp regardless of the slider. The other ten size themselves off the key’s own width and height and ignore the slider. Shape descriptions are on the theme editor page. Setting a key border color alone shows no visible border until you also raise Border width above 0.

SettingControlDefaultShown when
Letter keysPicks an image from the galleryNoneAlways
Modifier keysSameNoneAlways
Enter keySameNoneAlways
Space barSameNoneAlways
Pressed keysSameNoneAlways
Key preview popupSameNoneAlways
Crop / Stretch / TileSegmented rowCropAny of the six slots has an image
Texture opacitySlider, 10–100%100%Same

Six slots, one image each, drawn over the key colour and clipped to the key shape. One picture in Letter keys is enough to theme the board: the other slots fall back to it or to plain colour rather than sitting empty. Each image is stored downscaled to 512px and a row with one set shows it as a thumbnail, with a bin icon to clear it. Textures travel inside an exported theme.

ControlWhat it does
Add a keyDialog: type a letter, or pick one of Enter, Space, Shift, Delete, Symbols, Emoji, Languageswitch (the globe key)
A key’s rowOpens that key’s own five colours: face, label, border, popup background, popup text
Bin iconDrops the whole override for that key

A letter’s style follows that letter onto every layout that has it. Anything you leave unset keeps following the theme, and an armed or locked modifier still shows the accent or pressed face whatever colour you gave it.

SettingControlRangeDefault
Add a stickerPicks an image from the galleryUp to 6None
Position, acrossSlider0–1 (fraction of the grid’s width)0.5
Position, downSlider0–10.5
SizeSlider0.05–0.8 (fraction of the grid’s width)0.25
RotationSlider-180° to 180°
OpacitySlider10–100%100%

Purely decorative images laid over the keys; the layer takes no touches, so typing goes straight through. Each sticker’s five sliders are adjusted over a live miniature of the board. Positions are fractions of the key grid, not pixels, so a sticker keeps its place across widths and orientations.

SettingControlDefault
AccentColor#8AB4F8
Gesture trailColor, alpha, Auto → AccentAuto
Popup backgroundColor, alpha, Auto → computed scrimAuto
Popup textColor, Auto → Key textAuto
Popup shapeRow → the same picker dialog Key shape usesfollows WM KeyboardKey pressPopup shape
Popup placementSegmented row: Default / On the key / FloatingDefault (follows WM KeyboardKey press)
Popup outlineColor, Auto → no outlineAuto
Popup outline width (outline color set)Slider, 0–3dp0dp
Menu shapeRow → the same picker dialogAutomatic (a safe derivative of Popup shape)

Accent drives the shift-on tint, active-tool highlight, and buttons across the panels. Popup shape covers every popup surface, not just the character bubble: the long-press alternates, the language list, and the panel menus all draw with it. Menu shape is the exception: on Automatic the list menus take Popup shape only when it’s one of the four plain outlines (Rounded, Square, Cut, Squircle) and fall back to Rounded otherwise, since a slanted or scalloped menu clips its own rows. Picking a shape here overrules that.

SettingControlDefault
Tool background shapeRow → the same picker dialog Key shape usesfollows WM KeyboardAppearanceToolbarTool background shape
Tool iconsColor, Auto → Key text at partial opacity over the boardAuto
Tool circlesColor, alpha, Auto → computedAuto
Active tool circleColor, alpha, Auto → same formula as Pressed keyAuto
Tool outlineColor, alpha, Auto → no outlineAuto
Tool outline width (outline color set)Slider, 0–3dp0dp
SettingControlDefault
Cards & search barColor, alpha, Auto → Modifier keysAuto
Suggestion textColor, Auto → Key textAuto

“Cards & search bar” covers suggestion chips and the search bar surface across the tool panels.

Any row still on Auto shows an “Auto” label instead of a swatch; once you override it, its color picker gains an Auto button next to Apply that clears the override again. See Theme editor for the exact fallback formula behind every Auto field.

SettingControlDefault
Chip textColor, Auto → Modifier key text, then Key textAuto
Selected chipColor, alpha, Auto → Active tool circleAuto
Selected chip textColor, Auto → AccentAuto
Chip outlineColor, Auto → no outlineAuto
Chip outline width (outline color set)Slider, 0–3dp0dp
Chip shapeRow → the same picker dialog Key shape usesRounded
Chip corner radius (Rounded or Cut only)Slider, 0–24dp12dp
Card shapeRow → the same picker dialogAutomatic (a safe derivative of Chip shape)

Chips are the small tappable surfaces inside the tool panels: style pickers, tab strips, converter controls, search bars, and the buttons a plugin draws. Their background is the Cards & search bar colour above, and this group styles the rest of them. The radius slider only appears for the two shapes that read a radius. Card shape follows the same safety rule as Menu shape, so the bigger surfaces fall back to Rounded when the chip shape is a decorative one.

The panels’ own keypads (calculator, numpad, the converters, the text-editing pad) are keys rather than chips, so they follow the theme’s key shape and key border instead.

WM KeyboardAppearanceKeyboard themes(edit a theme)Corners
SettingControlRangeDefault when enabled
Theme-specific corner radiiToggleOff
Key corner radius (on)Slider0–28dpseeded from WM KeyboardAppearanceKeysKey corner radius (8dp)
Popup corner radius (on)Slider0–40dpseeded from WM KeyboardKey pressPopup corner radius (12dp)
Tool circle radius (on)Slider0–20dp, “off” at 0seeded from Appearance → Toolbar → Tool circle radius (20dp)

Off by default, so a theme follows the three global sliders: two under Appearance, and the popup one under Key press. Turning the switch on seeds all three radii from their global counterparts at once, and turning it off clears all three back to following the globals again.

WM KeyboardAppearanceKeyboard themes(edit a theme)Layout
SettingControlRangeDefault when enabled
Layout for this themeToggleOff
Tool background width (on)Slider38–64dpyour current global value
Toolbar height (on)Slider32–80dpyour current global value
Popup height (on)Slider32–160dpyour current global value
Key height (on)Slider32–100dpyour current global value
Key gap (on)Slider0–2×your current global value
Side padding (on)Slider0–30%your current global value
Key label size (on)Slider0.7–1.5×your current global value
Bold labels (on)Toggleyour current global value
Corner hint size (on)Slider0.5–2×your current global value
Gesture trail width (on)Slider2–24dpyour current global value
Gesture trail opacity (on)Slider10–100%your current global value

A second opt-in group, off by default. One switch seeds every value in the group from your current global settings, and turning it off clears them all again, so a theme either carries its own sizes or carries none of them. Screen-specific sizes from Layout settings (folded, unfolded, landscape) still win over a theme’s own.

Popup height is the height of the key-preview bubble. The global slider keeps one value for the on-key bubble and another for the floating one; the theme’s override applies to whichever style is switched on.

SettingControlOptionsDefault
AnimationSegmented rowNone / Flow / Hue cycleNone
Speed (not None)Slider0.25×–3×

Flow drifts the board gradient along its own axis (or orbits the center, for a radial gradient); Hue cycle slowly rotates the hue of the board gradient, or the solid board color if no gradient is set. Animation only runs while the keyboard is on screen. Three built-ins ship with it on: Sunset drift and Cyberpunk use Flow, Aurora uses Hue cycle, and every other built-in and every fresh custom theme starts on None.

SettingControlRangeDefault
EffectSegmented rowNone / Stars / Hearts / Sparkle / Confetti / Emoji / ImagesNone
Emoji to throw (Emoji only)Text field, up to 16 charactersEmpty
Particle images (Images only)Picks images from the galleryUp to 6None
Intensity (any effect)Slider0.4×–2.4×

A small particle burst under every key press. With Emoji, each character you type into the field becomes its own particle kind; with Images, each picture does. Transparent PNGs look best. The effect never plays under reduce motion or power saving, and high contrast keys drops it along with the rest of the decoration.

SettingControlDefault
Key fontRow → picker of the fonts on this deviceFollow settings
(a script’s name) fontRow → picker for that scriptOnly listed for scripts the theme names
Add a font for a scriptRow → script picker, then a font picker
Key soundRow → picker of the sounds on this deviceFollow settings

Both are referenced by name, never copied into the theme file, so importing a theme without the font or sound installed just falls back to your own global choice. Key font covers Latin, Cyrillic and Greek only; every other script keeps its automatic Noto face unless the theme names one for it. Your own pick in WM KeyboardAppearanceKeyboard font always beats the theme’s. See Theme editor for the id forms that travel between devices.

The Gradient background (Board) and Key gradient (Keys) rows share one editor. Turning the switch on seeds a default (the board gradient starts as a 135° linear blend from Background to Accent, the key gradient as a subtle 90° white sheen), with a live gradient strip above the controls:

SettingControlRange
TypeSegmented row: Linear / Radial / Sweep
Angle (Linear, Sweep only)Slider0–360°
Color stops2 to 4 color rows, alpha supported on eachAdd color / Remove color

Cropping a background image: pinch to zoom, drag to reposition, three aspect presets.

Cropping a background image: pinch to zoom, drag to reposition, three aspect presets.

Pinch to zoom and drag to pan; the image is always scaled to fill the frame, so there’s never a gap at the edges. Three aspect presets: Keyboard (2.4:1, the default), Wide (1.7:1), and Square (1:1). Confirming writes a new JPEG and deletes the source file. The crop isn’t reversible from inside the editor, so re-picking the original photo starts a fresh crop.

Tapping any color row opens the same dialog: a hex field (label “Hex (AARRGGBB)”, 6 or 8 hex characters; a 6-character value is treated as fully opaque), 21 preset swatches (the 15 seed colors plus 6 grayscale steps from white to black), then Hue, Saturation, and Brightness sliders, plus an Opacity slider on fields that support alpha. Apply confirms; Cancel discards; an Auto button appears only on fields that have a fallback and are currently overridden, and clears the override back to Auto.

  • No per-row restore buttons on either screen. The app-wide putting one setting back control doesn’t appear here, because a theme is something you built rather than a setting the app shipped a default for. Undo works the way the thing itself works instead: a colour row goes back with its picker’s Auto button, the two opt-in groups (theme-specific corner radii, layout for this theme) clear by switching the group off, and a look, sticker or single-key style goes by deleting it. The built-in you copied from is still sitting in the gallery if you want to start over.
  • Editing an existing custom theme doesn’t switch to it. Opening the pencil on a theme already in Your themes just opens the editor. Only Create, the built-in pencil (duplicate), and Import set the opened theme as active, as a side effect of those specific actions.
  • “Landscape background image” is reached only through a specific theme’s editor, not from the gallery screen itself, even though its settings-search entry is filed under the gallery’s breadcrumb, since the editor needs a real theme open, which search alone can’t supply.
  • Mode, Material You colors, and the Auto trigger picker have no settings-search entry. They’re real rows on the gallery screen; searching for “Mode” or “Trigger” won’t surface them directly, so search “themes” or “auto theme” instead.
  • The three corner radii are symmetric with the globals, but the globals aren’t all on one screen. Key corner radius and Tool circle radius come from Appearance; Popup corner radius comes from Key press, which is easy to miss when you’re looking for it under Appearance with the other two.
  • Deleting or exporting is only offered for Your themes. The Default card and every built-in card skip both buttons; a built-in’s pencil makes an editable copy instead of opening it directly.
  • Changing the seed keeps a photo visible. A seed swatch or the light/dark switch rebuilds every color, but when the theme has a background image, how see-through the board and keys are is carried across rather than reset to opaque.
  • The photo rows are conditional, and so is their settings-search behavior. Rotating background and Photo services are reachable from search whether or not their rows are currently visible in the editor, since search navigates to the screen directly.
  • No edition split. Every control on both screens (colors, gradients, images, corners, animation, photos) behaves the same on the full and lite editions.
  • Theming overview — why you’d pick each mode, the full built-in theme list, and how Auto’s three triggers behave.
  • Theme families and looks — family cards, the swatch dots, the Grouped and Separate gallery styles, and building a multi-look theme.
  • Theme editor — the guided walkthrough of building a theme, with the exact fallback formula behind every Auto color.
  • Image backgrounds — the background-image picker, crop, opacity, and blur controls in full.
  • Online photos and rotation — searching Unsplash and Pexels, the photo collection, and the background that changes on a schedule.
  • Sharing themes — exporting, importing, and installing a theme from an addon repository.
  • Appearance — the Style group Keyboard themes opens from, alongside Keyboard font and Icons.
  • Keyboard font and Icons — the two other Style rows; typography and icon glyphs are outside ThemeSpec entirely.