| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| 11.0.0 source code.tar.gz | 2026-10-01 | 4.0 MB | |
| 11.0.0 source code.zip | 2026-10-01 | 4.0 MB | |
| README.md | 2026-10-01 | 11.0 kB | |
| Totals: 3 Items | 8.1 MB | 0 | |
KeyboardKit 11 uses Swift 6.2 and strict concurrency. This made it possible to remove a lot of dispatch and MainActor.run code, which makes the library more stable. This work also involved making more types MainActor, while aiming to keep most of the library unchanged. The KeyboardContext proxy logic is thus moved to a new main actor-bound KeyboardControllerContext, to keep the core context versatile.
KeyboardKit 11 almost doubles the number of supported locales, bringing the total to 111. This is made possible by the improved diacritics engines, which now supports combination marks. As part of this, we have also improved the layout engine and harmonized many layouts, to keep them consistent across configuration changes, and fixed a bunch of incorrect swipe down actions on iPad.
KeyboardKit 11 also adds a new plugin architecture, which lets us move sensitive code, like permissions and system API usage, out of the core library. This plugin model is an exciting new part of KeyboardKit, and will let us build more capabilities and integrations outside of the core SDK, and let you decide which plugins you want to use.
Finally, this version removes deprecated code, ends all experiments, and uses LocalizedStringResource for UI components localization.
💡 Biggest Changes
The biggest structural changes in KeyboardKit 11 that will most likely affect you, is how controller-related state has been moved from the keyboard context to the new controller context, and how dictation and host application detection now requires plugins to be enabled.
📦 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 types that need it are now@MainActor. - dSYMs are now included in the package, so there's no need for a separate download.
🌱 Essentials
KeyboardKit 11 cleans up large parts of the library and adds new, powerful diacritic support.
Keyboard.BackgroundStyleis a new, separate background style type.Keyboard.Diacritichas new Apache, Choctaw, Hawaiian, Hebrew, Navajo, and Samoan variants.Keyboard.Diacritichas newcombiningMarkreplacement support.Keyboard.DiacriticInsertionResulthas been renamed toDiacriticReplacement.Keyboard.Diacritic.CombiningMarkis a new type with common combining marks.Keyboard.SpacebarMenuTitlecan now render an image.Keyboard.SpacebarMenuTypehas a newlayoutmenu that switches between the current locale's layout types.Keyboard.SpacebarMenuTypehas a newdockEdgemenu that switches the one-handed keyboard dock edge.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.KeyboardSettings.isUndoManagerEnabledis nowtrueby default.KeyboardStatehas a newcontrollerContextproperty of typeKeyboardControllerContext.KeyboardViewDragGestureOverlayis a new view that maps drag gestures to layout items.KeyboardViewDragGestureOverlayStyleis a new style that can be applied with.keyboardViewDragGestureOverlayStyle(_:).
💥 Actions
KeyboardKit 11 doesn't change the action model in any significant way.
KeyboardActionhas a newisDiacriticActionproperty.
📱 App
KeyboardKit 11 adds new ways to instruct users how to return to the keyboard.
KeyboardAppOpenReasonMessageis a new message struct.KeyboardAppOpenReasonMessageViewis a new message view.
💡 Autocomplete
The new KeyboardKitAutocompletePlugin 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.isLoadingproperty has 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 nowasync throws.AutocompleteSettings.isAutoLearnEnabledhas been removed.AutocompleteSettingsScreenhas been cleaned up and polished.AutocompleteSuggestionhas a newdeleteBackwardsCountproperty.AutocompleteSuggestion.isUnknownhas been renamed toisCurrent.AutocompleteSuggestionSourceis a new enum with known sources.StandardAutocompleteServicewarms up its engine to avoid launch hangs.StandardAutocompleteServicenow honors the new delete backwards count.KeyboardInputViewControllernow uses the new throttle interval to throttle autocomplete operations.
🎤 Dictation
The new KeyboardKitDictationPlugin makes it a lot easier to set up dictation, and isolates permissions to the plugin.
KeyboardKitDictationPluginis a new plugin package.KeyboardKithas new ways to inject a dictation engine.DictationEnginedefines a standard implementation in the plugin.DictationKeyboardOverlaynow enforces theDictationSettings.silenceLimit.DictationMethodhas been removed, since dictation now uses a single method.DictationVolumeRecorderandDictationSpeechRecognizerhave moved to the plugin.StandardDictationServicehas a newshouldTryToReturnToKeyboardAfterStartingDictationproperty.StandardDictationServicehas a newtryToReturnToKeyboardAfterStartingDictation(with:)function.
🏠 Host Application
The new KeyboardKitHostPlugin contains all host application bundle ID logic, and isolates system API usage to the plugin.
KeyboardKitHostPluginis a new plugin package.KeyboardKithas new ways to inject a host application resolver.
🔣 Layout
This version harmonizes many layouts to keep them consistent across configuration changes.
- Numeric iPad layouts adjust the bottom right keys to enable swipe down.
- All layouts with 3 and 4 input rows now have the same total height.
KeyboardLayouthas newitemFrames,item(at:)andaction(at:)functions.
🌐 Localization
This version adds support for new locales, bringing the total number of supported locales to 111.
- New supported locales:
AfrikaansBasque (France)Basque (Spain)BosnianEnglish (South Africa)EsperantoGalician (Spain)KalaallisutKyrgyzMāoriRomanshSamoanTurkmenYiddishZulu
- New supported Indigenous North American locales:
ApacheBlackfootChickasawChochenyoChoctawComancheKiowaLushootseedMvskokeNez PerceOsageSalishWixarika
- New supported Sámi locales:
Kildin SámiLule SámiPite SámiSkolt SámiSouth SámiUme Sámi
This version also updates locale information and localized input logic.
KeyboardSettingsscreens now usesLocalizedStringResource.Localeno longer defines aflagand its list items just show text.
📄 Proxy
This version removes some task wrappers around async operations.
UITextDocumentProxyhas newdeleteFullDocumentContextfunctions.UITextDocumentProxy.moveTextInputCursorfunctions are now async throws.
⚙️ Settings
KeyboardKit 11 rewrites 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.KeyboardSettingsScreenhas a new top keyboards section that links to the language settings screen.
🇻🇳 Vietnamese
KeyboardKit 11 drastically improves the Vietnamese input support.
Vietnamese.Diacritichas newcombiningMarkandcombiningMarkCharsproperties.Vietnamese.Diacritic.CombiningMarkmirrors the baseKeyboard.Diacritic.CombiningMark.Vietnamese.Diacritic.mũ,mócandtrăngcan now be applied to vowels with tones, e.g.á+a=>ấ.Vietnamese.Diacritic.mũandmóccan now replace each other, e.g.ô+w=>ơ, just likemũandtrăng.VietnameseInputEnginecan now apply tones to full words, e.g.Tuân+sbecomesTuấnandmoi+jbecomesmọi.
💥 Breaking changes
Vietnamese.allDiacriticVariantsFor*andVietnamese.allDiacriticVowelVariantshave been removed.
🐛 Bug Fixes
KeyboardActionadjusts the font for currencies like "kr".KeyboardInputViewControllernow performs autocomplete on locale change.KeyboardLayouthas been fixed for Hawaiian, by applying a proper macron.
🚨 Breaking Changes
DictationMethodhas been removed.DictationSpeechRecognizerhas moved to the dictation plugin.DictationVolumeRecorderhas moved to the dictation plugin.GestureButtonScrollStatehas been removed.KeyboardApp.keyboardSettingsKeyPrefixhas been removed.KeyboardAppHomeScreenseparates keyboard settings from feature settings.KeyboardAppHomeScreensettingsSection*localization and visibility is renamed tofeatureSettingsSection*.KeyboardAppHomeScreenkeyboard link has moved to a newkeyboardSettingsSection*section.KeyboardContextmoves proxy logic toKeyboardControllerContext.KeyboardContextmoves Liquid Glass logic toProcessInfo.KeyboardContext.autocapitalizationTypeOverridehas been removed.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 around.KeyboardInputViewController.originalTextDocumentProxyis now fully internal.KeyboardSettings.storeand.storeKeyPrefixare no longer mutable.Locale.flaghas been removed.Locale.keyboardKitNamehas been removed.