Skip to content
WM KeyboardWM Keyboard
Accessibility

Theme editor

Every color, key shape, gradient, corner and animation knob for a single custom theme.

The theme editor is where a single custom theme gets built: every color, the key shape, optional gradients, corner-radius overrides, and a live-animated background if you want one. Every field here applies and saves the instant you touch it; there’s no separate save step.

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

The theme editor, with the live preview pinned above the color and shape controls.
WM KeyboardAppearanceKeyboard themes

Create theme on the gallery screen makes a brand-new custom theme (named “My theme”, seeded from a blue swatch, generated as a dark theme) and immediately makes it the active keyboard theme before opening the editor on it.

Built-in themes can’t be edited in place. Their card shows a pencil instead, which copies the built-in into a new custom theme named “(theme) copy”, makes the copy active, and opens the editor on the copy; the original built-in is untouched. The Default (system) card has no pencil at all: it isn’t a stored theme, it’s generated live from your device’s Material You color scheme, so there’s nothing to open in this editor. See Theming overview for the gallery itself and how Default, Material You, and the built-in set fit together.

Importing a .wmtheme.json file (from the gallery’s Import button or by opening the file itself) adds it to Your themes and switches the keyboard to it immediately, without opening this editor. See Sharing themes for both ways to import.

Straight under the preview, before the name field, sits a Looks row: one chip per look this theme carries, an Add look chip, and (while you have a look other than the first one open) a bin icon that deletes the one you’re editing. Everything below that row edits the open look and nothing else, so a theme with four looks is four full colour sets, switched between with a chip.

A theme starts as one look, and the row is just the one chip until you press Add look. Add a second and a Group name field appears below the chips: that’s the label the gallery card shows over the dots. Add look copies the look you have open, so the new one starts where the old one left off, and it greys out after twelve extras (thirteen looks in all).

Theme families and looks is the full story: what a family card looks like in the gallery, the Grouped/Separate choice, and what happens to a family when you copy, export or delete it.

At the top of the editor, a Dark theme switch and a row of swatches let you regenerate every color at once from a single seed:

Start from a color: the Dark theme switch and seed swatch row.

Start from a color: the Dark theme switch and seed swatch row.

Tapping a swatch, or flipping Dark theme, recomputes the board, key, accent, and popup colors from that seed and shade. It deliberately preserves everything that isn’t seed-derived, so a reseed doesn’t erase work you’ve already done elsewhere in the editor: your background image and its opacity/blur, both gradients, the key shape, the key border color and width, the gesture-trail color, all three corner-radius overrides, and the animation type and speed all carry over untouched. Anything you hand-picked that is seed-derived (like a manually recolored key-text or popup color) gets overwritten by the reseed, since there’s no way to tell “kept the default” apart from “picked to match.”

WM KeyboardAppearanceKeyboard themes(edit a theme)

The rest of the editor is grouped into sections, each opening a standard color picker (with an alpha slider on fields that support translucency) when you tap a row.

  • Background — the board’s base color. Supports alpha, which matters once a background image is set: see Image backgrounds for the image picker, crop, opacity, and blur controls that live in this same section.
  • Gradient background — see Gradients below.
  • Key shape: a row that opens a picker with all twelve shapes listed by name, each drawn beside its name at key proportions and at this theme’s own corner radius, so you can see what you’re choosing before you choose it. The full list, and which shapes react to the radius slider, is under Key shapes below.
  • Letter keys — the color, plus an optional Key gradient, a subtle sheen painted over letter keys only (see Gradients).
  • Key text, Modifier keys, Modifier key text (falls back to Key text when left on Auto), Enter key, Enter key icon.
  • Pressed key — the color a key flashes while held; Auto derives it from Letter keys.
  • Key border — off (Auto, no visible border) until you pick a color. Once a border color is set, a Border width slider (0–3dp) appears; it starts at 0dp, so turning on a border color alone doesn’t show one until you also raise the width.

Twelve shapes, in the order the picker lists them. The four plain outlines come first, then the decorative ones:

ShapeWhat it looks likeReads the radius slider?
Rounded (default)The ordinary rounded rectangleYes, 0–28dp
SquareFour sharp corners, no rounding at allNo
PillA full stadium, rounded to half the key’s heightNo
CutCorners chamfered off at 45°Yes, but clamped to 2–14dp
SquircleA superellipse, the same curve family as an iOS app iconNo
ArchRound across the top, nearly square at the bottomNo
LeafTop-left and bottom-right fully round, the other two nearly squareNo
SlantedA parallelogram, both vertical sides leaning rightNo
HexagonPoints at the left and right, flat top and bottomNo
ScallopedA rim of even bumps, like the edge of a biscuitNo
TicketCorners bitten inwards by a circle, like a cinema ticketNo
CircleA round cap centred in the key, like a typewriter’s; wide keys (space, enter) keep a stadiumNo

The shapes that ignore the slider aren’t being lazy about it. Their whole look is a proportion of the key rather than a corner size, so they measure themselves off the key’s own width and height: the arch is always half the key’s height, the hexagon’s points are always a sixth of its width, the scallops always count out at roughly the same size whether it’s a letter key or a spacebar. Wire them to a 0–28dp slider instead and one end of it flattens them into plain rectangles.

Only the drawing changes. Touch targets stay rectangular for every shape, so the gap between two hexagons still belongs to one key or the other, and nothing gets harder to hit.

Slanted is the one shape that draws slightly outside its key. A parallelogram kept inside the key would lose about a third of the width at the top and the bottom, which on a phone-sized key reads as a row of thin straps, so it leans half its slant into the gap on each side instead. Every key stays exactly as wide as it would be with any other shape, and the gap between two keys stays the same width; it just runs on a diagonal. Where there is no gap to lean into, the lean is trimmed to fit.

Keys can wear an image instead of just a color. One picture for the letter keys is enough to theme the whole board; the modifier keys, the enter key, the space bar, the pressed state and the key-preview popup each take an optional image of their own, and fall back sensibly when you don’t set one (space reuses the letter texture, pressed draws the press tint over it; the popup draws color-only rather than borrowing a key’s image).

  • Each texture row picks an image from your gallery; it’s stored downscaled to 512px, so a camera photo won’t bloat the theme file. Rows that have an image show it as a small thumbnail, the same way the background and press-effect image rows do.
  • Crop / Stretch / Tile decides how the image fits a key. Crop keeps its proportions, stretch fills the key exactly, tile repeats it at its natural size — the right choice for pixel-art.
  • Texture opacity blends the image over the key color underneath, which stays the base coat (and what high-contrast accessibility falls back to — textures don’t draw there at all).

Textures travel inside the theme file when you export it. An older app version imports the same file as a plain color theme and loses nothing else.

One key can carry its own colors: its face, its label, its border, and the popup bubble it shows. Add a letter (the style follows that letter onto every layout that has it) or one of the special keys (Enter, Space, Shift, Delete, Symbols…), then set any of the five colors; the rest keep following the theme.

An armed or locked modifier still shows the accent/pressed face whatever color you gave it — state has to stay visible.

Up to six images laid over the keys, purely for decoration: typing goes straight through them. Transparent PNGs work best. Each sticker has position, size, rotation and opacity sliders, adjusted over a live miniature preview so what you drag is what the keyboard shows. Stickers travel with the exported theme the same way textures do.

A small particle burst under every key press: Stars, Hearts, Sparkle, Confetti, Emoji with a field for the emoji to throw (each one becomes its own particle kind), or Images — up to six of your own pictures from the gallery, each one a particle kind the same way. Transparent PNGs look best; they’re stored small and keep their proportions in flight. An Intensity slider scales how many particles a press throws. The effect never plays under reduce motion or power saving, and high-contrast accessibility drops it with the rest of the decoration.

The theme can bring its own key font and key sound. Both are picked from what’s on the device — the styles the app ships plus anything installed from the font and sound libraries — and referenced by name, never copied into the theme file. If someone imports your theme without that font or sound installed, their keyboard quietly uses their own global choice instead; publish the font and sound as their own add-ons and list them under the theme’s requires in a repository manifest so the install screen offers to fetch them together.

Key font covers Latin, Cyrillic and Greek. Every other script keeps its own face, because a Latin-only display font draws a Bengali board as empty boxes.

Add a font for a script is how a theme keeps its look on those boards anyway. Pick a script, pick a face that actually carries its glyphs, and that script uses it instead of its automatic Noto face. Add as many as you have fonts for; the scripts you skip are unaffected. A pixel theme usually needs one file per script, since a single pixel font almost never covers Latin and Bengali and Arabic at once. Each of these is another add-on to publish and list under requires.

Your own per-script pick in Appearance → Fonts still beats the theme’s. You chose that font on purpose, and a theme doesn’t get to overrule it.

For a theme you plan to share: Google Font ids (google:Caveat) resolve the same on every device, and an installed sound or font can be named by its catalogue name — “Typewriter” for a sound, installed:Bloxat for a font — the ids the libraries mint locally differ per phone, so those forms are the ones that travel.

  • Accent — the shift-on tint, active-tool color, and buttons across the panels.
  • Gesture trail — the color of the swipe-typing trail; Auto falls back to Accent. Supports alpha.
  • Popup background and Popup text — the bubble that appears above a key on press; both support Auto fallbacks (deriving from the board/key colors and Key text respectively). Popup background supports alpha.
  • Popup shape — the outline of every popup surface the keyboard draws: the character bubble, the long-press alternates, the language list, the panel menus. Same picker and same twelve shapes as Key shape, drawn at this theme’s popup radius. Until you pick one, the theme follows WM KeyboardKey pressPopup shape.
  • Popup placement — whether the character bubble grows out of the pressed key (the stock style) or floats detached above it. Default leaves the choice to WM KeyboardKey press; the other two make it part of the theme, so a bubble-popup theme looks right on every phone it lands on.
  • Popup outline and its width row — a border around the bubble, off until you pick a color, exactly like the key border. It draws on every popup surface the keyboard opens: the character bubble, the long-press alternates, the spacebar language picker, the clipboard and emoji menus, and the small pickers inside the tool panels.
  • The popup can also wear an image: the Key preview popup row under Key textures paints one inside the bubble, clipped to the popup shape, using the same Crop/Stretch/Tile mode and opacity as the key textures.
  • Menu shape — the list menus (the spacebar language picker, the clipboard and emoji menus) don’t blindly follow the popup shape. On Automatic they take a safe derivative: the plain outlines (Rounded, Square, Cut, Squircle) pass through, the decorative ones fall back to Rounded — a slanted character bubble is charming, a slanted menu clips its own rows. Pick a shape here only to overrule that judgement.
  • Tool background shape — the outline of the background behind each toolbar tool, from the same twelve shapes. It follows WM KeyboardAppearanceToolbarTool background shape until you pick one here, and it draws nothing at all while the tool radius is 0, which is the setting for bare icons.
  • Tool icons — the toolbar’s icon color, Auto by default.
  • Tool circles and Active tool circle — the background behind a toolbar icon, at rest and while pressed/active. Both support alpha.
  • Tool outline and Tool outline width — a border around that background, off until you pick a color, exactly like the key border in Keys. The width row appears once a color is set, and nothing draws until it’s above 0. A theme that sets one keeps it even with the accessibility Key outlines toggle on.
  • Cards & search bar — the chipBackground field; covers suggestion chips and the search-bar surface across the tool panels. Auto falls back to Modifier keys. Supports alpha.
  • Suggestion text — the color of suggestion-strip text and the panels’ body text; Auto falls back to Key text, contrast-guarded against the board. A theme whose keys invert against its board (dark ink on cream keys over a near-black board) gets a legible strip either way, and an explicit choice here is honoured as written.

Chips are the small tappable surfaces inside the tool panels — style pickers, tab strips, converter controls, dictionary suggestions, search bars, the cards in the clipboard, snippet, weather, calendar, grammar and plugin lists, and the buttons and fields a plugin draws. They take the card color above as their background, and this group styles the rest. The panels’ own keypads (calculator, numpad, the converters, the text-editing pad, the handwriting and voice rails) are keys, not chips: they follow the theme’s key shape and key border instead, so a circle-key theme gets circular calculator keys for free.

  • Chip text and Selected chip / Selected chip text — the resting label, and the fill and label of the chip that’s currently active. Auto derives all three from the theme (the selected fill follows the active tool circle).
  • Chip outline and its width row — a border around every chip, off until you pick a color.
  • Chip shape and Chip corner radius — the same twelve-shape picker as everywhere else. The default is the 12dp soft rectangle chips have always drawn.
  • Card shape — the bigger surfaces (clipboard and snippet cards, plugin rows, search bars, the converters’ displays) follow the chip shape only through the same safety rule as the menu shape: plain outlines pass through, decorative ones fall back to Rounded, and an explicit pick here overrules it.

Any row left on Auto shows an “Auto” label under its name instead of a fixed value. Once you’ve overridden it, that row’s color picker gains an Auto button (next to Apply) that clears the override and puts it back on Auto.

Both Board and Keys can carry an optional gradient instead of (technically, painted over) their solid color, toggled on with a switch next to each. Turning one on seeds it with a sensible default (the board gradient starts as a 135° linear blend from Background to Accent, the key gradient as a subtle 90° white sheen), which you can then reshape:

A board gradient turned on: type, angle, and color-stop controls.

A board gradient turned on: type, angle, and color-stop controls.
  • Type — Linear, Radial, or Sweep.
  • Angle — 0–360°, shown for Linear and Sweep only (Radial ignores it).
  • Color stops — 2 to 4, each with its own color and alpha, with Add color / Remove color buttons to grow or shrink the list.

Off by default, so keys everywhere follow the global sliders (two under Appearance, one under Key press). Turning on Theme-specific corner radii seeds three independent sliders for this theme alone, each starting at whatever its global counterpart is set to:

Theme-specific corner radii, with the Key, Popup, and Tool circle sliders.

Theme-specific corner radii, with the Key, Popup, and Tool circle sliders.
  • Key corner radius — 0–28dp, seeded from the global Key corner radius slider (default 8dp) when you turn the switch on.
  • Popup corner radius: 0–40dp, seeded from the global Popup corner radius slider under WM KeyboardKey press (default 12dp).
  • Tool circle radius — 0–20dp (“off,” i.e. square, at 0), seeded from the global Tool circle radius slider (default 20dp).

A second opt-in group, Layout for this theme, works the same way: one switch seeds a set of size overrides from your current global settings, and turning it off clears them all again. Tool background width, toolbar height, popup height, key height, key gap, side padding, key label size, bold labels, corner hint size, and the gesture trail’s width and opacity all live here. 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 under WM KeyboardKey press 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.

Adds continuous motion to the board while the keyboard is on screen:

  • None (default), Flow, or Hue cycle, as a segmented picker.
  • Flow drifts the board gradient along its own axis (or orbits its 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.
  • A Speed slider (0.25×–3×, default 1×) appears once animation is on.

Only three built-in themes ship with animation turned on: Sunset drift and Cyberpunk use Flow, Aurora uses Hue cycle. Every other built-in, and every fresh custom theme, starts on None.

A miniature keyboard preview is pinned at the top of the editor and redraws on every change you make: colors, shape, gradients, corners, all of it, immediately, without leaving the screen.

There’s no Save or Apply button anywhere in this screen: every field write goes straight to storage, so closing the editor (or the app) never loses anything or asks you to confirm.

Duplicating an existing custom theme isn’t available from inside the editor itself; the copy-then-edit flow described in Creating a theme only applies to built-ins, from the gallery.

Deleting a custom theme is a gallery action too: tap the trash icon on its card. A confirmation dialog asks “Delete theme?” with a note that it will be removed permanently, and deleting also removes the theme’s background image file(s) (portrait and landscape) from storage so they don’t linger as orphaned files:

Deleting a custom theme asks for confirmation before removing it.

Deleting a custom theme asks for confirmation before removing it.

Delete (and export) aren’t offered for built-in themes or the Default theme, only for themes in Your Themes.

  • Editing an existing custom theme doesn’t switch to it. Tapping the pencil on a theme already in Your Themes opens the editor without changing your active keyboard theme. Only Create, Duplicate (from a built-in), and Import set the edited theme as active, and only as a side effect of those specific actions, not of editing generally.
  • Typography isn’t part of a theme. The key-label typeface, key-label font size, and hint font size all live outside ThemeSpec entirely. See Keyboard fonts for the font picker, and Appearance → Keys for the two font-size sliders, which apply keyboard-wide rather than per theme.
  • Two “Auto” swatches don’t perfectly match the real keyboard. Pressed key and Active tool circle, when left on Auto, are approximated slightly differently in the editor’s preview swatch than in the formula the real keyboard uses at render time. The difference is subtle and only shows up if you’re comparing pixel-for-pixel; every other Auto fallback (popup background, tool circles at rest, and so on) matches exactly.
  • A theme’s background image lives in this same editor, under Board, but the picker, crop dialog, and opacity/blur sliders are covered in full on Image backgrounds rather than here.
  • Corner-radius overrides here are theme-specific; the sliders they inherit from and the global key-shape basics are covered in Theming overview.
  • Exporting, importing, and installing a theme from a repository are covered in Sharing themes, including what happens to a theme’s colors and images when it travels as a file.