KeyboardKit 11 Beta
KeyboardKit 11 Beta is out! This pre-release is a way for you to test the many coming changes in the next major version of KeyboardKit. Give it a try and let us know what you think.

Banner Theme
Let’s start with the most important question. What theme will we use for the KeyboardKit 11 version lifecycle?
After focusing on Earth for KeyboardKit 10, we have discussed a new theme for the 11 lifecycle. We usually do release ten versions (11.0-11.9), so perhaps something with ten “things”?
We could go with the human hand or foot, but that would only be exciting for the first five versions. After that, things would get repetitive. Surely, we can do better.
KeyboardKit 11 will therefore bring us back to space, but this time closer to home than in KeyboardKit 9. This time, we’ll blast through the solar system, starting at our magnificent Sun and ending up at Pluto.
And before we start discussing everything in KeyboardKit 11… yes, we count Pluto as a planet. So should you.
Major Changes
This version bumps the package to Swift 6.2 and strict concurrency, which means that many UI types are now @MainActor-bound. This makes the keyboard engine more stable and thread-safe.
We’ve tried to limit @MainActor to types that need to use the controller or its text document proxy, and have made more types Sendable. As part of minimizing the effects on the library, we have moved proxy logic from KeyboardContext to a new KeyboardControllerContext. This makes the base context more versatile.
Strict concurrency is a major change to the library. We have tried to design the changes in a way that will affect you as little as possible, but don’t hesitate to let us know if something doesn’t sit right with you.
Plugins
Another big change is the new plugin architecture that allows us to move sensitive or complex code out of the library, as well as 3rd party integrations.
KeyboardKit 11 ships with two plugins - KeyboardKitDictationPlugin and KeyboardKitHostPlugin - as well as a KeyboardKitAutocompletePlugin placeholder that will ship in an upcoming version.
Feature Updates
While many features have been adjusted to the concurrency changes mentioned above, you should still feel at home with the overall structure, which doesn’t change all that much.
📦 Package
KeyboardKit 11 uses Swift 6.2 and strict concurrency, and defines brand new plugin products.
- The package now uses Swift 6.2 and strict concurrency.
- The package defines new
KeyboardKit...Pluginproducts. - Many types are now
Sendable, and those that need it@MainActor. - dSyms are now included in the package - no need for a separate download.
🌱 Essentials
KeyboardKit 11 cleans up large parts of the library, and removes parts that were previously soft-deprecated.
Keyboard.BackgroundandKeyboard.BackgroundStyleare now separated.KeyboardContexthas a newlocalePresentationCasethat defaults to capitalized.KeyboardControllerContextis a new context type for controller-specific state.KeyboardInputViewControllerhas a newsetPreferredKeyboardCase()function.KeyboardInputViewController’s setup function can now inject autocomplete engines.KeyboardInputViewController’s setup function can now inject a host application resolver.KeyboardStatehas a newcontrollerContextproperty of typeKeyboardControllerContext.
🧩 Extensions
KeyboardKit 11 adds a bunch of new extensions, and cleans up old ones that are no longer used by the library.
ProcessInfohas a newisLiquidGlassAvailableextension.
💡 Autocomplete
The new KeyboardKitAutocompletePlugin is currently empty, but will be used to define additional autocomplete engines in future KeyboardKit versions.
KeyboardKitAutocompletePluginis a new plugin package.AutocompleteContextno longer uses dispatch queues to update itself.AutocompleteContext’sisLoadinghas been removed.AutocompleteContexthas a newcontrollerThrottleIntervalproperty.AutocompleteEngineis now public and adjusted to align with the plugin.AutocompleteEngineWithDownloadSupportis a new protocol.AutocompleteServicemoves some logic to the engine protocol.AutocompleteServicehas a newsupportedLocalesproperty.AutocompleteServicehas a newwarmUp()function.AutocompleteService.autocomplete(_:updating:)is now async throws.AutocompleteSettings’isAutoLearnEnabledhas been removed.AutocompleteSettingsScreenhas been cleaned up and polished.AutocompleteSuggestionnow defines a new.deleteBackwardsCount.AutocompleteSuggestion’s.isUnknownis renamed toisCurrent.AutocompleteSuggestionSourceis a new enum with known sources.StandardAutocompleteServicewarms up its engine to avoid a launch hangs.StandardAutocompleteServicenow honors the new delete backwards count.KeyboardInputViewControllerwill use the new context throttle to throttle autocomplete operations.
🎤 Dictation
The new KeyboardKitDictationPlugin makes it a LOT easier to set up dictation. You don’t have to copy any code since the plugin contains everything, and must only add Info.plist permissions if you use it.
KeyboardKitDictationPluginis a new plugin package.KeyboardKithas ways to inject a dictation engine.DictationEnginedefines a standard implementation in the plugin.DictationMethodis removed, since dictation now uses a single method.DictationVolumeRecorderandDictationSpeechRecognizerare now in the plugin.
🏠 Host Application
The new KeyboardKitHostPlugin contains all host application bundle ID logic, including all sensitive system API usages. This means that the system API usage is not completely opt-in for developers.
KeyboardKitHostApplicationis a new plugin package.KeyboardKithas ways to inject a host application resolver.
🌐 Localization
KeyboardKit 11 view localization now uses LocalizedStringResource instead of String. This makes it easier to localize these parts, and will let us localize these components in more locales in later versions.
- All screen localization types now use
LocalizedStringResource.
⚙️ Settings
KeyboardKit 11 has rewritten the settings store to work better with Swift concurrency.
KeyboardSettingsuses a new thread-safe store resolver.KeyboardSettingsnow requires adeviceTypewhen created.KeyboardSettingshas newresetStore(for:)andresetStore(forAppGroup:)functions.
🐛 Bug Fixes
KeyboardActionadjusts the presentation for multi-char currencies like “kr”.KeyboardInputViewControllernow performs a new autocomplete when the locale changes.
🚨 Breaking Changes
- All deprecated code has been removed.
DictationMethodhas been removed.DictationSpeechRecognizerhas been removed.DictationVolumeRecorderhas been removed.GestureButtonScrollStatehas been removed.KeyboardApp’s.keyboardSettingsKeyPrefixhas been removed.KeyboardContextmoves proxy logic to controller context.KeyboardContextmoves Liquid Glass logic toProcessInfo.KeyboardContext’s.autocapitalizationTypeOverridehas been.KeyboardExperimenthas no active experiments.KeyboardExperimentContexthas been removed.KeyboardExperimentSettingshas been removed.KeyboardHostApplicationProviderhas been removed.KeyboardInputViewControllerlifecycle functions have been reduced.KeyboardInputViewControllernow syncs to its contexts, not the other way.KeyboardSettings.storeand.storeKeyPrefixare no longer mutable values.KeyboardInputViewController’s.originalTextDocumentProxyis now fully internal.
Release Process
We are aiming to release KeyboardKit 11 on October 1st, after iOS 27, macOS 27, and Xcode 27 have been released, with some extra time to gather developer feedback.
Feedback
We will continue to release refined betas as we bring KeyboardKit 11 closer to release. Make sure to reach out if you run into problems, or if you have any feedback or suggestions.
Conclusion
KeyboardKit 11 is a big update, and while the concurrency updates are the most prominent change, there are a bunch of things in this release that make it the strongest major update so far.
KeyboardKit 11 sets the direction for the year to come. We hope that you’ll like it and look forward to another exciting major version year. We have so much planned, and can’t wait to share it with you.
For more details, see the release notes for a full list of changes. Update now to get access to all improvements.
Discussions & More
If you found this interesting, please share your thoughts on Bluesky and Mastodon. Make sure to follow to be notified when new content is published.