Skip to content
WM KeyboardWM Keyboard
Accessibility

Backup & restore

Every switch on the Backup & restore screen: locations, automatic backup, sync between devices, what goes in an export, and what an import merges or replaces.

The Backup & restore screen is where you choose where backups go, how often they run, how your devices sync, and where you write your keyboard to a file or read one back in. This page is the field reference for every switch, button, and message on it. For the reasoning behind the merge-vs-replace split and a walkthrough of moving to a new phone, see Backup & restore instead.

The Backup & restore screen: what to include, plus the export and import buttons.
The Backup & restore screen: what to include, plus the export and import buttons.
The Backup & restore screen: what to include, plus the export and import buttons.
WM KeyboardDataBackup & restore

Reach it from the Data group on the settings home screen, or by searching “Backup & restore” in settings search. From the top, the screen has:

PartWhat it is
Status cardWhether automatic backup is on, how often and to how many locations, when the last backup was, and when this device last synced. Back up now runs a backup straight away. Sync now appears while sync is on
LocationsOne card per place backups can go, and Add a location
Automatic backupOpens the schedule, the passphrase, where backups go, and what goes in
Sync devicesOpens sync between your devices
FilesExport to a file, What goes in an export, and Import a file

The status card turns red when the last backup or the last sync failed, and says why.

A location is one place backups can go: a folder, a server, or a cloud account. You can add any number, of any kind, for example two WebDAV servers and a Dropbox. Add a location opens a list of the kinds this build can reach:

LocationWhat it needsNotes
FolderChoose a folder, a folder pickerAnywhere a files app can reach: the device, an SD card, or a cloud app’s synced folder
Google DriveWhere in Drive (Hidden app folder, the default, or A folder you can see), Folder in My Drive for the second, and Allow access to Drive, plus a line saying whether it’s allowedThe hidden folder is visible to no other app, the Drive app included. A folder you can see is an ordinary folder in My Drive, made on first use; the app can open only the files it made itself. Each choice asks Google for its own permission
DropboxSign in / Sign out, plus “Signed in.” or “Not signed in yet.”You get a folder of your own under Apps
OneDriveSame sign-in row as DropboxSame folder-under-Apps arrangement
WebDAVService, then Server, User name, Password and Folder; or, for Other WebDAV server, Server address, User name, PasswordService knows the address shape of Nextcloud, ownCloud, Seafile, Koofr, pCloud (US and EU), Yandex Disk, kDrive, Hetzner Storage Box and 4shared, and shows the address it builds. Nextcloud adds Sign in with Nextcloud, which opens your server’s login page and fills in an app password. Tailscale Taildrive asks only for the Share (your tailnet, the computer and the share name, as Tailscale shows them) and a Folder, with no sign-in. The folder is made on first use. User name can stay empty for a server that doesn’t ask for one. A plain http address gets a warning and is refused at upload time, because the password rides along on every request. The exception is an address on your Tailscale network (Taildrive’s 100.100.100.100, a 100.64.0.0/10 tailnet address or a ts.net name), where Tailscale encrypts the traffic
S3Service, Endpoint (for Other S3 service), the service’s account field where it has one, Bucket, Region, Folder in the bucket, Access key ID, Secret access key, Put the bucket in the path (toggle, default off, only for Other S3 service)Service fills in the endpoint and the addressing for Amazon S3, Cloudflare R2, Backblaze B2, Wasabi, Google Cloud Storage, DigitalOcean Spaces, Hetzner, Scaleway, OVHcloud, Akamai (Linode), Storj, IDrive e2, MinIO and Garage, and lists example regions. R2 asks for the Account ID, IDrive e2 for the Endpoint, MinIO and Garage for Server and port. A plain http endpoint gets a warning
SFTPServer, Port (default 22), User name, Password, Private key, Key passphrase, Directory, Server key, Allow old algorithms (toggle, default off)A password, a key, or both; the key is tried first. Ed25519, ECDSA and RSA keys in OpenSSH or PEM form work, encrypted or not. The first connection saves the server’s key, and after that the app connects only to a server with the same key: Forget the server key is for when you really did change the server. The folder is made on first use. Old algorithms add SHA-1 for old NAS firmware
Windows share (SMB)Server, Share, Folder, User name, Password, Domain, Port (default 445), Encrypt the connection (toggle, default on)SMB 2 and 3, signed after the sign-in. Encryption needs SMB 3, and with the toggle on, a server that can’t encrypt is refused. Turning it off puts a warning under the toggle. A server that answers a wrong password with a guest session is refused as a wrong password. The folder is made on first use
Git repositoryHost (GitHub, GitLab, or Gitea / Forgejo), Server, Repository, Access token, Branch, Folder, Commit message, Commit author name, Commit author email, Add [skip ci] (toggle, default on), Allow a public repository (toggle, default off)Leave Server empty for github.com, gitlab.com or codeberg.org; type an address for your own server or GitHub Enterprise. You can paste the whole repository address into Repository. Empty Branch is the default branch. The commit message takes {action}, {file}, {device} and {date}. Each backup, and each deleted old backup, is a commit, and the history keeps all of them, so a public repository is refused unless you allow it. Sync through a Git location commits its sync file each time it changes
Email (IMAP)Server, Security (TLS, STARTTLS or None; default TLS), Port (993, or 143), User name, Password, Mail folder (default “WM Keyboard backups”)Each backup is one email in its own folder, made on first use. Most services want an app password. Some, such as Gmail, keep a deleted email in another folder, so old backups can still count against your quota

Three of these only appear when the build can reach them, and all three conditions are decided when the APK is built. Google Drive needs the Google Play services library, which the F-Droid build leaves out. Dropbox and OneDrive each need a client id compiled in. A kind with nothing behind it is left off the list rather than shown and then refused.

The location opens in a sheet. Every kind has an optional Name, with an example that suits the kind, for the day you have two of them. Typed details save when you tap Add or Save, so a half-typed address is never tried by a backup that happens to run meanwhile. Test the connection makes the same first call a backup makes, with what’s on screen now, and says “It works. Backups can go here.” or what went wrong.

Dropbox and OneDrive sign in through your browser. When you approve, the browser hands you straight back to this screen. The row reads “Signing in…” over a progress bar for the second or two it takes to finish with the service, then “Signed in.” The sign-in finishes even if Android closed the app while you were typing your password. For Google Drive, Google shows its own account picker and consent screen. If you come back from it without access, a message says the app couldn’t finish signing in, instead of the button quietly staying as it was.

Each card shows the location’s name, what tells it apart (the folder, the server, the bucket), and how its last backup went: “Last backup: <relative time>”, “No backup here yet”, “Automatic backups do not go here”, or what went wrong. A location that sync uses adds “Syncs here.” The menu on each card has Restore from <name> and Remove. Removing a location leaves the backups already there where they are, and forgets how to sign in to it.

Restore from <name> lists every automatic backup at that location, newest first. Each row shows the device that made it (“This device” for this phone), when, and the size. A lock marks one that has a passphrase. Tap a row to download that backup and open the ordinary import confirmation, which lists what’s inside before anything changes. For an encrypted backup the app tries your stored passphrase first, and asks only when that doesn’t open it. This is the only way back for a Google Drive backup, because the app’s Drive folder is hidden from every other app, the Drive app included.

WM KeyboardDataBackup & restoreAutomatic backup

This page writes a backup on a timer to the locations you tick. It stays inert until at least one ticked location has everything it needs.

SettingTypeDefaultShown when
Back up automaticallyToggleOffalways (off until a ticked location is usable)
How oftenSlider over 1, 2, 3, 4, 6, 8, 12, 18, 24, 36, 48, 72, 96, 120 and 168 hours24 hours (1 day)Back up automatically on
Backups to keepSlider, 1–305Back up automatically on
Only while chargingToggleOnBack up automatically on
Only on Wi-FiToggleOnSame, and only while a ticked location needs a connection (anything but a Folder)
Back up toA tick box per locationOn for every locationalways
Protect with a passphraseToggleOffalways
PassphrasePassword fieldemptyProtect with a passphrase on
What goes in a backupThe same thirteen switches as the export list, with their own settingsSame defaults as the export listalways

Each backup goes to every ticked location. A location you untick keeps its settings and gets no backups until you tick it again. One passphrase covers the automatic backups and the sync files, so use the same one on every device that syncs.

Include API keys under What goes in a backup is yours to turn on. Without a passphrase, its subtitle strongly suggests turning one on first, and turning it on asks you to confirm, because anyone who can open the location could then read your keys. It doesn’t refuse.

WM KeyboardDataBackup & restoreSync devices

Sync keeps your devices the same. Each device keeps one sync file at the locations you tick. Every device reads the files of the others, and the newest change to each setting wins.

SettingTypeDefaultShown when
Sync this deviceToggleOffalways (needs a location)
When to syncChoice: Soon after a change / On a schedule / Only when I askSoon after a changeSync on
How oftenSlider, the same stops as the backup interval6 hoursSync on, On a schedule
Sync API keys and passwordsToggleOffSync on
Sync throughA tick box per locationthe first location, when you turn sync onalways
What syncsThe thirteen section switches, with their own settingsSettings, Themes, Snippetsalways
Keep on this device: Toolbar and toolboxToggleOffalways (needs Settings ticked in What syncs)
Keep on this device: Languages and layoutsToggleOffalways (needs Settings ticked in What syncs)
Sync nowButtonalways

Soon after a change pushes about a minute after you stop changing things, and pulls every hour and each time the app starts. On a schedule runs at the interval you set. Only when I ask runs only when you tap Sync now. Turning sync on runs the first sync straight away, and on that first sync the settings of your other devices win. Anything only this device has goes to the others.

Your devices must share at least one ticked location. Tick more than one and the sync file goes to each, so sync keeps working while one service is down.

Some settings never sync, because they only fit one device: the keyboard size and position on each screen, one-handed mode, the floating keyboard, the hardware keyboard, paired KDE Connect computers, the app lock, what’s installed or downloaded on the device, and this screen’s own settings. Everything else in a ticked section syncs, including settings added in later versions.

Keep on this device holds back two more groups when you want them different here, a phone and a tablet with different toolbars for example. Toolbar and toolbox covers which tools there are, their order and how they look. Languages and layouts covers the layouts you switch between, the extra languages and the layout picked for each app. A ticked group isn’t sent, and changes from your other devices don’t touch it. Untick it and this device takes what your other devices have, as it did when it first joined.

Sync API keys and passwords is off by default. It works with or without a passphrase. Without one, the subtitle strongly suggests turning one on first, and turning it on asks you to confirm.

WM KeyboardDataBackup & restoreWhat goes in an export

What goes in an export is thirteen toggles, top to bottom. Twelve are independent; the thirteenth, Include API keys, only exists while Settings is on:

SettingSubtitleDefault
SettingsEvery keyboard settingOn
Include API keys (shown only while Settings is on)The keys for translate, GIF, search and AIOff
ThemesYour custom themesOn
DictionaryThe words the keyboard learned from youOff
ClipboardThe saved clipboard historyOff
SnippetsYour saved text snippetsOn
Sticker packsYour own sticker packs, with the imagesOff
Icon packsYour own icon packs, with the imagesOff
Custom word listsThe word lists you imported for any languageOn
Add-on repositoriesThe add-on sources you added, so you can install from them againOn
Emoji historyYour recent emoji, your favourites and the skin tone of each oneOn
Typing statisticsYour daily typing counts and your all-time speedOn
VocabularyYour word lists, imported packs and learning progress. Downloaded packs are left out; they can be downloaded again.On
Swipe styleHow you swipe: where your finger lands, the readings you corrected, and the shape you draw each word inOff

Sticker packs and icon packs default off because their images make the file larger, not out of any privacy concern. Dictionary, Clipboard and Swipe style default off because they’re your personal typing history rather than configuration; the swipe shapes are filed under the words you drew them for. Emoji history is personal too, but it defaults on: it’s a few hundred bytes, and unlike a word list or a model there’s nowhere to download it back from. Add-on repositories carries only the repository addresses you’ve added, not the addons installed from them.

Export to a file stays disabled until at least one toggle is on. Tap it to open Android’s save dialog. The name takes the form wmkeyboard-backup-<date>-<time>.wmconfig.json, timestamped down to the second so repeated exports don’t overwrite each other. The file goes wherever you choose, and nothing is uploaded anywhere. Afterward you see one of:

ResultMessage
Wrote successfully, Settings on with Include API keys on“The app exported the backup with your API keys in it. Keep that file as safe as a password.”
Wrote successfully, otherwise“The app exported the backup.”
Couldn’t write the file“The app could not write that file.”

Import a file opens a document picker for any file type. It reads the file and tries to decode it before changing anything. Nothing is written until you confirm a dialog.

OutcomeWhat happens
File is a current .wmconfig.json bundleAn “Import backup?” dialog lists each section found (for example “Themes: 3 custom themes”), states that settings merge while dictionary, clipboard, and snippets replace, and adds a warning if the file contains API keys
File is a legacy .wmsettings.json fileAn “Import settings?” dialog states how many settings will be overwritten, warns about included API keys, and notes any entries that couldn’t be read and will be skipped
File can’t be read from disk“The app could not read that file.”
File doesn’t decode as either format“That file is not a WM Keyboard backup.”
The import confirmation dialog, listing what a backup file contains before anything is applied.
The import confirmation dialog, listing what a backup file contains before anything is applied.
The import confirmation dialog, listing what a backup file contains before anything is applied.

Confirming a current-format import applies each section independently and merges or replaces depending on which one it is:

SectionOn import
SettingsMerges. Only the preferences present in the file are overwritten, and everything else on the device is left as-is
ThemesReplaces. The entire custom-theme list is swapped for what’s in the file
DictionaryReplaces
ClipboardReplaces
SnippetsReplaces
Sticker packsReplaces. The local collection is cleared and rebuilt from the file
Icon packsReplaces, with the same clear-and-rebuild
Custom word listsReplaces, with the same clear-and-rebuild
Add-on repositoriesMerges. Incoming repository addresses join your existing list, and a duplicate address is skipped rather than overwritten
Emoji historyReplaces. Recents, use counts, favourites and per-emoji skin tones all come from the file
Typing statisticsReplaces. The day-by-day counts and the all-time totals both come from the file
VocabularyReplaces, but only your own word lists and packs. A downloaded catalogue pack stays put, since the bundle never carried it, and the learning-progress record is written whole
Swipe styleReplaces. The finger-position model, the corrected readings and the learned shapes all come from the file

Settings import is rollback-safe. After writing, the keyboard re-reads its own settings to confirm they still parse, and it undoes the write if they don’t. The other sections in the same file still apply even when settings roll back. After a confirmed import you see either “The app restored <sections>.”, a lowercase comma-separated list of what changed, or “The file has nothing to restore.” A rolled-back settings portion appends “The app could not apply the settings. Your settings did not change.” A confirmed legacy import instead reports how many settings it restored, or says “The app could not apply that backup. Your settings did not change.”

Opening a .wmconfig.json or .wmsettings.json file from a file manager routes through this same read-then-confirm flow rather than importing silently.

  • An emoji-history import lands live. The keyboard holds its emoji history in memory while it runs and writes it out when a field closes, so a restore could have been overwritten seconds later. Importing bumps a counter the running keyboard watches, which makes it drop its copy and re-read the file. The panel’s Recent and Favourites tabs refresh on the spot, with nothing to restart.
  • Two file formats, one import path. .wmconfig.json is the current, full-bundle format that Export to a file and the automatic backup write today. .wmsettings.json is an older, settings-only format the app still accepts on import, for files made by earlier versions. Nothing in the current app writes one anymore.
  • The Themes toggle’s own in-app description undersells it. Its info text says a theme’s background image doesn’t travel to another phone, and that only the theme itself does. In the current app the image does travel. It’s embedded in the export and written back to local storage on import, so a restored theme keeps its picture. See Backup & restore for the accurate version.
  • The API-keys switches cover files this screen writes. They have no effect on Android’s own backup system, which is a separate opt-in covered on the Privacy screen and copies saved API keys regardless of anything on this page.
  • Add-on repositories is a bookmark list, not the addons themselves. What an installed addon leaves behind on this screen is in whichever section matches its type: a theme, icon pack, or sticker pack you installed from a repository is already covered by that section.
  • The automatic backup asks the system for two things, both yours to turn off. A charger, from Only while charging, and an unmetered connection, from Only on Wi-Fi. It never asks for an idle device, because the work is a few seconds of copying rather than the kind of job that wants the phone asleep. The Wi-Fi requirement is dropped while only Folder locations are ticked, since they need no connection at all, and the toggle is hidden then for the same reason. With it off, a backup to any other location still waits for some connection, mobile data included, so a run never starts on a phone that is offline and then gets reported as a sign-in problem. An interval is a period, not an alarm clock, so a run lands somewhere inside the window rather than on the hour. Back up now ignores all of it and runs immediately.
  • Changing either condition reschedules the job on the spot. Both toggles are part of what the app compares against the job already queued, so flipping one takes effect without waiting for the current period to end. That matters, because the interval restarts when the job is replaced. Keep changing the conditions and you keep pushing the next run back.
  • Turning the automatic switch on with nowhere usable to go does nothing. The row says what’s missing and stays off: “Add a location first.” with no locations, and “Tick a location in Back up to.” when none is ticked. A location card says what it lacks: “Choose a folder first.” for a Folder, “Sign in first.” for Dropbox and OneDrive, and “Fill in the connection details first.” for WebDAV, S3, SFTP, SMB, FTP, Git and IMAP. “Usable” is a cheap check, not proof the upload will work: a folder grant exists, a WebDAV address is filled in, an S3 bucket and key pair are present, an FTP server and user name are filled in, an SFTP server and user with a password or a key, an SMB server, share and user, a Git repository and token, an IMAP server, user and password, or a Dropbox or OneDrive token was stored. Google Drive counts as usable as soon as you add it, because the permission lives with your Google account rather than in a field here. Test the connection is how to find out for sure.
  • Several locations, one run. The file is built and checked once, then copied to each ticked location, and each one rotates its own old backups. The run counts as done when any location got the file, and a location that failed says so on its card. A notification names the kind of location that failed.
  • Locations are filed as secrets, alongside your API keys. The list of locations holds the WebDAV, FTP, SFTP, SMB and IMAP passwords, SFTP private keys, Git tokens, the S3 secret and the Dropbox and OneDrive sign-ins, so it’s stripped from an export unless Include API keys is on, and kept out of pre-unlock storage either way. With it on, a phone restored from that file gets its locations and sign-ins back; a Folder location then asks for its folder again, because a folder permission means nothing on another phone. Sync never carries locations. Some things never travel at all, on or off: the Back up automatically switch itself, every sync setting, the per-install salt, and the last-run times and errors. That’s deliberate. Restore a bundle on a new phone and you don’t want its automatic backup or its sync coming back switched on by itself.
  • One location can hold several phones’ backups. Each automatic backup’s name records the device and this installation, like wmkeyboard-auto-20260923-033823_78c415cf_Pixel-8.wmconfig.json. Backups to keep counts only this installation’s backups, so two phones sharing a Dropbox each keep their own five and never delete each other’s. Backups from before names carried a device count as this phone’s and are rotated out as new ones arrive. The installation id is not a setting. It never goes into an export or Android’s backup, so a phone restored from either one starts its own set of backups instead of taking over the old phone’s. Clearing the app’s storage or reinstalling makes a new one. Sync files are named the same way, wmkeyboard-sync_<installation>_<device>.wmsync.json (.wmsync.enc with a passphrase), one per device, rewritten in place, and never counted as backups.
  • Every toggle and slider on this screen carries the usual restore button once you move it off its default, in Automatic backup, Sync devices and What goes in an export alike. See Putting one setting back. The text fields are the exception, because an address or a password has no shipped value to go back to.
  • Backup & restore: the guide. Why each default is what it is, Android’s own backup system, and a step-by-step for moving to a new phone.
  • Privacy: the Back up with Android toggle that folds the keyboard into Android’s own backup, separate from the export on this page.
  • What are addons?: how installed addons relate to the repositories this screen’s Add-on repositories toggle backs up.