Skip to content
WM KeyboardWM Keyboard
Accessibility

Installing addons

Paste a repository URL, browse the catalogue, install what you like.

An addon repository is just a URL (a GitHub repo or any https:// host) that points at a small JSON index of themes, layouts, dictionaries and the rest. You add the repository once, browse what it offers in a searchable grid, and install one addon at a time.

Screenshot pending
A repository's catalogue: search, type filters, and a two-column grid of addon cards.

Open Add repository and paste an address. As you type, the dialog shows exactly what it resolved to (Will read: <url>), so you can see where the data is actually coming from before anything is fetched:

You pasteIt fetches
github.com/user/repo (with or without .git, with or without a scheme)raw.githubusercontent.com/user/repo/HEAD/wmkeyboard-repo.json
github.com/user/repo/tree/branch or .../blob/branchthe same, from branch instead of the default
a direct link ending in .jsonused as-is
any other https:// addresstreated as a folder; wmkeyboard-repo.json is appended
a bare host/path with no schemeassumed to be https://

Plain http:// is rejected rather than silently upgraded to https, and so is anything with a non-https scheme. The Add button stays disabled until the address resolves.

Screenshot pending
Pasting a repository address. The preview line under the field shows exactly what will be fetched.

If the address doesn’t resolve, or the resulting page can’t be read as an addon repository, you get an error dialog rather than a half-added entry. Pasting a repository you’ve already added isn’t an error either: it just opens the existing one, so following the same link twice is harmless.

Each repository has its own screen: a search field that matches an addon’s name, description, author and tags, a row of type filter chips generated from whatever that repository actually contains, and a grid of cards below it.

Every card shows the addon’s first screenshot (or a plain icon in its type’s colour if it has none), a status badge that doubles as the install button, and a line of version · size · author. Tapping a card opens its detail page, which is where the fuller description and licence live.

Screenshot pending
An addon's detail page, with its licence and repository details.

If the manifest declares a licence, the detail page shows it as its own row: the identifier (MIT, OFL-1.1, and so on) inline where there is one, or “Tap to read the licence” when there’s only full text to show. Tapping opens the complete text in a scrolling dialog. An addon with no licence information at all just says “Not stated.”

Tap the download arrow on a card, or Install on its detail page. Installing always does two things and stops: it puts the file on your device, and (for themes, layouts, icon packs, emoji fonts, key sounds and plugins) it asks whether you want to switch to it. Fonts, dictionaries, emoji keyword packs, snippet packs and sticker packs have nothing to “switch to”; they’re live the moment they land.

That split matters because a repository is meant to be safe to browse: installing three themes while you’re comparing them should not repaint your keyboard three times.

Screenshot pending
The prompt after a first install, offering to switch to what you just installed.

The question only appears the first time you install something with a slot to fill: updating an addon that wasn’t already active just updates it quietly. If the addon you’re updating was the one you had active, it’s automatically re-applied under its new id instead of asking you to re-confirm a choice you never revoked.

TypeQuestionConfirms as
Theme“Use it as your keyboard theme now?”Switch to it
Icon pack“Use its icons on the keyboard now?”Switch to it
Emoji font“Draw emoji with it now?”Switch to it
Key sound“Use it as your key sound now?”Switch to it
Layout“Turn it on so you can type with it?”Turn on
Plugin“Turn it on so it shows in the plugins panel?”Turn on

Dismissing the prompt just says “Not now”: the addon stays installed either way, and every detail page has an outlined “Use — open …” button that takes you straight to the right settings screen if you change your mind later.

Some addons were designed with others: a theme that wants a particular font and key sound says so, and installing it offers to fetch them in the same tap. You still get asked about one thing, the addon you tapped. Its fonts and sounds install quietly, and saying yes to the theme is what puts them on the board. “Only this one” skips them, and the theme falls back to your global font and sound.

Installing hands the downloaded file to the same importer the app uses for a file you open by hand, so an addon from a repository and one you drag in from Downloads end up identical:

TypeLands asOpened from
ThemeA new custom theme in your galleryThemes
LayoutA new custom layout, off until you enable itLanguages → Your layouts
DictionaryExtra words for one language (needs the manifest to say which)Custom dictionaries
Emoji keywordsExtra search terms for one language’s emojiEmoji keywords
SnippetsAdded to your snippet list under fresh idsSnippets
StickersA new local sticker packSticker packs → Your packs
Icon packAdded to your icon libraryIcons → Icon pack
FontAdded to your font libraryFonts → Installed fonts
Emoji fontAdded to your font libraryEmoji → Emoji font
Key soundAdded to your sound libraryKey press → Sound style
PluginLands on disk switched offPlugins → Allow plugins

A dictionary or emoji keyword pack that doesn’t say which language it’s for gets rejected rather than guessed at, and each type has its own size cap on what it will download:

CapTypes
1 MBPlugin
4 MBTheme, Layout, Snippets, Key sound
8 MBEmoji keywords, Icon pack
32 MBDictionary, Font, Emoji font
64 MBStickers

Plugins are a special case. Installing one requires “Allow plugins” to already be on; otherwise the detail page tells you so before you even tap Install, with a shortcut straight to the switch:

WM KeyboardToolsPluginsAllow plugins

Even with the switch on, a plugin installed from a repository always lands disabled; you still turn it on yourself through the prompt above or from the plugins list. A plugin is also the one type where the manifest’s checksum isn’t optional: without one to verify against, the install is refused outright. See Plugin permissions for what a plugin can and can’t reach once it’s running.

An addon can also declare a minimum app version. If your build is older than that, its detail page still shows it, but the install itself is refused until you update WM Keyboard.

The Addons screen lists every repository you’ve added, with the count of addons in each and a three-dot menu for Refresh, Open homepage (when the manifest declares one), and Remove.

Removing a repository only removes it from that list. Anything you already installed from it keeps working; you just stop getting update checks for it. The app adds one sample repository automatically the first time you open the Addons screen, so there’s something to browse before you’ve found one of your own; removing it is permanent and it won’t come back.

Repositories refresh automatically every time you open the Addons screen, and you can force it with Refresh. A repository that’s briefly unreachable keeps showing what it last had rather than emptying out.

WM KeyboardAddons

Reach the Addons screen from the home grid or by searching “Addons” in settings search. Adding and browsing repositories, and installing from them, all happen on this one screen and the ones you navigate to from it. There’s nothing addon-specific tucked away anywhere else in settings, aside from the plugin subsystem switch above. See the Addons settings reference for a full screen-by-screen breakdown, and Updates & management for the repository cap and what backup covers.

  • Repository files are plain data, never code. Adding a repository or installing a theme, dictionary, sticker pack or any other type never executes anything (the one exception, a plugin, still only lands as an inert file until you separately turn it on). There are eleven addon types in total: themes, layouts, dictionaries, emoji keyword packs, snippets, sticker packs, icon packs, fonts, emoji fonts, key sounds and plugins.
  • Updating replaces rather than duplicates. When a newer version of an installed addon comes in, the old copy is removed only after the new one verifies successfully, so you never end up with two copies of the same theme.
  • A failed install doesn’t need cleanup. If a download is rejected (wrong checksum, over the size cap, not enough free space), the partial download is always deleted, whether the install succeeded or failed.
  • The catalogue card’s install button and the detail page’s Install button do the same thing. You never have to open an addon just to install it.

See What are addons? for the trust model and the full addon-type table, Updates & management for update checks and uninstalling, and the addon repository format reference if you want to publish your own.