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.
Adding a repository
Section titled “Adding a repository”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 paste | It 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/branch | the same, from branch instead of the default |
a direct link ending in .json | used as-is |
any other https:// address | treated as a folder; wmkeyboard-repo.json is appended |
a bare host/path with no scheme | assumed 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.
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.
Browsing the catalogue
Section titled “Browsing the catalogue”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.
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.”
Installing an addon
Section titled “Installing an addon”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.
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.
| Type | Question | Confirms 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.
Where each type lands
Section titled “Where each type lands”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:
| Type | Lands as | Opened from |
|---|---|---|
| Theme | A new custom theme in your gallery | Themes |
| Layout | A new custom layout, off until you enable it | Languages → Your layouts |
| Dictionary | Extra words for one language (needs the manifest to say which) | Custom dictionaries |
| Emoji keywords | Extra search terms for one language’s emoji | Emoji keywords |
| Snippets | Added to your snippet list under fresh ids | Snippets |
| Stickers | A new local sticker pack | Sticker packs → Your packs |
| Icon pack | Added to your icon library | Icons → Icon pack |
| Font | Added to your font library | Fonts → Installed fonts |
| Emoji font | Added to your font library | Emoji → Emoji font |
| Key sound | Added to your sound library | Key press → Sound style |
| Plugin | Lands on disk switched off | Plugins → 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:
| Cap | Types |
|---|---|
| 1 MB | Plugin |
| 4 MB | Theme, Layout, Snippets, Key sound |
| 8 MB | Emoji keywords, Icon pack |
| 32 MB | Dictionary, Font, Emoji font |
| 64 MB | Stickers |
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 pluginsEven 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.
Managing your repositories
Section titled “Managing your repositories”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.
Options
Section titled “Options”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.
Details & edge cases
Section titled “Details & edge cases”- 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.
