Releases: KeyboardKit/KeyboardKitPro
9.9.0
This version performs final changes for 9.x and adds support for Liquid Glass.
This version also adds new proxy extensions and fixes two auto-capitalization and keyboard casing bugs.
✨ Features
KeyboardControllerhas a newsetIsLiquidGlassEnabled(...)function to enable the new Liquid Glass design.
👑 KeyboardKit Pro
UITextDocumentProxyhas a newmoveTextInputCursor(steps:)function.UITextDocumentProxyhas a newmoveTextInputCursorToBeginning()function.UITextDocumentProxyhas a newmoveTextInputCursorToEnd()function.
🐛 Bug Fixes
KeyboardAction.shiftnow behaves correctly if tapped as a first action with auto-capitalization disabled.KeyboardContext'spreferredAutocapitalizedCasenow behaves correctly when it's triggered for new lines.
💥 Keyboard Layout View Modifier
The .keyboardLayout(...) view modifier is no longer needed, since KeyboardView already has a layout parameter.
We can use it to inject a custom layout, which also removes any risk of triggering multiple keyboard layout recalculations.
Since the modifier was in beta, it has been removed. If you use it, please switch to injecting the layout into the initializer instead.
9.9.0-beta.3
This version performs final changes for 9.x and adds support for Liquid Glass.
This version also adds new proxy extensions and fixes two auto-capitalization and keyboard casing bugs.
✨ Features
KeyboardControllerhas a newsetIsLiquidGlassEnabled(...)function to enable the new Liquid Glass design.
👑 KeyboardKit Pro
EmojiKeyboardnow applies a style-based spacing between its sections.UITextDocumentProxyhas a newmoveTextInputCursor(steps:)function.UITextDocumentProxyhas a newmoveTextInputCursorToBeginning()function.UITextDocumentProxyhas a newmoveTextInputCursorToEnd()function.
🐛 Bug Fixes
KeyboardAction.shiftnow behaves correctly if tapped as a first action with auto-capitalization disabled.KeyboardContext'spreferredAutocapitalizedCasenow behaves correctly when it's triggered for new lines.KeyboardControllernow ignores keyboard type change for certain keyboard types, like.emojisand.custom.
💥 Keyboard Layout View Modifier
The .keyboardLayout(...) view modifier is no longer needed, since KeyboardView already has a layout parameter.
We can use it to inject a custom layout, which also removes any risk of triggering multiple keyboard layout recalculations.
Since the modifier was in beta, it has been removed. If you use it, please switch to injecting the layout into the initializer instead.
9.9.0-beta.2
This version performs final changes for 9.x and adds support for Liquid Glass.
🗑️ Keyboard Layout View Modifier
The .keyboardLayout(...) view modifier that was added in KeyboardKit 9.8 is no longer used.
Since KeyboardView already has a layout parameter, we can use it to inject a custom layout.
This approach also removes any risk of triggering multiple recalculations of the keyboard layout.
If you use the view modifier, please switch to injecting the layout into the initializer instead.
✨ Features
KeyboardControllerhas a newsetIsLiquidGlassEnabled(...)function to enable the new Liquid Glass design.
9.9.0-beta.1
This version performs final library changes for 9.x, and adds support for Liquid Glass on iOS 26 and aligned platform versions.
✨ Features
KeyboardControllerhas a newsetIsLiquidGlassEnabled(...)function that can be used to enforce the new Liquid Glass design.
💡 Adjustments
KeyboardViewand all keyboard styles will now render a keyboard that looks like the native iOS 26 keyboard when running iOS 26.
9.8.0
With the new view modifier-based callout & style customizations working well, the corresponding services have been soft deprecated.
This mean that they WILL be removed in the next major version, but they are only deprecated with comments and not using attributes.
The reason for this is that they are still used internally. Adding deprecation attributes would trigger a large amount of warnings.
🔣 BETA - Keyboard Layout View Modifier
This version adds a .keyboardLayout view modifier to KeyboardKit Pro, which can be used to customize the current keyboard layout.
This works just like the .keyboardCalloutActions and .keyboardButtonStyle modifiers that let you inject a custom value builder.
This view modifier and all new layout values is currently only available in KeyboardKit Pro, but fully available in KeyboardKit 10.
You can use the KeyboardLayout.standard(for:) builder to create a standard layout for any keyboard context and its active locale.
KeyboardKit Pro also adds new localized keyboard layout values for all supported locales. They will replace the localized services.
Warning
This new keyboard layout modifier currently causes too many calculations, so do not use it in production yet. Only use it to evaluate if you think the view modifier-based approach is better than the service approach.
📃 BETA - Keyboard Type Change Handling
This version makes the controller redraw its keyboard when the active text field changes, to properly handle keyboard type changes.
This works by having the controller check the text document proxy's keyboard type in each textDidChange and redraw if it changes.
This feature is disabled by default in the betas, since it can cause strange behaviors, performance issues, and maybe even crashes.
You can enable it with the enableExperimentalKeyboardTypeChangeTracking(...) function. Make sure to report any problems you find.
✨ Features
Callouts.Actionscan now init with actions and chars.Callouts.Actions.basenow has domain callout actions.Callouts.ActionCalloutnow shows domain callout actions.InputSethas brand new default value builder parameters.Keyboard.KeyboardTypehas a new.webSearchkeyboard type.KeyboardActionhas brand new standard layout value builders.KeyboardActionhas a new.urlDomainaction for domain input.Viewhas a new.keyboardLayout(_:)view modifier that can inject a custom layout.
👑 Pro
KeyboardLayouthas new localized value builders for all supported locales.KeyboardLayouthas new.setWidth(...)item mutations.KeyboardLayouthas a new.baseLayout(...)layout builder.KeyboardLayouthas a new.iPadLayout(...)layout builder.KeyboardLayouthas a new.iPhoneLayout(...)layout builder.KeyboardLayouthas a new.standard(for:)layout builder.
🔧 Performance Improvements
- KeyboardKit Pro's new layout builders improve the layout rendering performance.
- To enable the improvements, apply the new
.keyboardLayout(...)view modifier. - Return
$0.standardLayout(for:)for a standard layout with better performance. - You can customzie the standard layout and still get the underlying improvements.
📦 Renamings
- The
KeyboardCalloutnamespace has been renamed toCallouts. - The
KeyboardCalloutContexthas been renamed toCalloutContext.
⚠️ Experimental Features
KeyboardInputViewControllerhas a newenableExperimentalDocumentChangeTracking()function.
🐛 Bug Fixes
KeyboardInputViewControllernow reloads when the document changes.KeyboardAction.keyboardTypewill now set the native type for.alphabetic.
🗑️ Deprecations
Color+Standardhas been deprecated. UseKeyboardActionextensions.CalloutServiceand all service implementations have been deprecated.InputSethas been nested and is renamed toKeyboardLayout.InputSet.KeyboardKitPro.ProLayoutServiceand all sub classes have been deprecated.KeyboardLayoutServiceand all service implementations have been deprecated.KeyboardStyleServiceand all service implementations have been deprecated.
9.8.0-beta.3
With the view modifier-based callout & style customizations working, the corresponding services have been soft deprecated. This means they WILL be removed in the next major version, but are only deprecated with comments and not using attributes.
The reason for this is that they are still used internally. Adding deprecation attributes would trigger a large amount of warnings.
🔣 BETA - View Modifier Layout Customizations
This version adds a .keyboardLayout view modifier to KeyboardKit Pro, which can be used to customize the current keyboard layout.
This works just like the .keyboardCalloutActions and .keyboardButtonStyle modifiers that let you inject a custom value builder.
This view modifier and all new layout values is currently only available in KeyboardKit Pro, but fully available in KeyboardKit 10.
You can use the KeyboardLayout.standard(for:) builder to create a standard layout for any keyboard context and its active locale.
KeyboardKit Pro also adds new localized keyboard layout values for all supported locales. They will replace the localized services.
This modifier based-approach will make it a lot easier to customize the keyboard layout. As such, the services are soft deprecated.
📃 BETA - Keyboard Type Change Handling
This version makes the controller redraw its keyboard when the active text field changes, to properly handle keyboard type changes.
This works by having the controller check the text document proxy's keyboard type in each textDidChange and redraw if it changes.
This feature is disabled by default in the betas, since it can cause strange behaviors, performance issues, and maybe even crashes.
You can enable it with the enableExperimentalKeyboardTypeChangeTracking(...) function. Make sure to report any problems you find.
✨ Features
Callouts.Actionscan now init with actions and chars.Callouts.Actions.basenow has domain callout actions.Callouts.ActionCalloutnow shows domain callout actions.InputSethas brand new default value builder parameters.Keyboard.KeyboardTypehas a new.webSearchkeyboard type.KeyboardActionhas brand new standard layout value builders.KeyboardActionhas a new.urlDomainaction for domain input.Viewhas a new.keyboardLayout(_:)view modifier that can inject a custom layout.
👑 Pro
KeyboardLayouthas new localized value builders for all supported locales.KeyboardLayouthas new.setWidth(...)item mutations.KeyboardLayouthas a new.baseLayout(...)layout builder.KeyboardLayouthas a new.iPadLayout(...)layout builder.KeyboardLayouthas a new.iPhoneLayout(...)layout builder.KeyboardLayouthas a new.standard(for:)layout builder.
🔧 Performance Improvements
- KeyboardKit Pro's new layout builders improve the layout rendering performance.
- To enable the improvements, apply the new
.keyboardLayout(...)view modifier. - Return
$0.standardLayout(for:)for a standard layout with better performance. - You can customzie the standard layout and still get the underlying improvements.
📦 Renamings
- The
KeyboardCalloutnamespace has been renamed toCallouts. - The
KeyboardCalloutContexthas been renamed toCalloutContext.
⚠️ Experimental Features
KeyboardInputViewControllerhas a newenableExperimentalDocumentChangeTracking()function.
🗑️ Deprecations
Color+Standardhas been deprecated. UseKeyboardActionextensions.CalloutServiceand all service implementations have been deprecated.InputSethas been nested and is renamed toKeyboardLayout.InputSet.KeyboardKitPro.ProLayoutServiceand all sub classes have been deprecated.KeyboardLayoutServiceand all service implementations have been deprecated.KeyboardStyleServiceand all service implementations have been deprecated.
9.8.0-beta.2
With the new view modifier-based callout & style customizations working well, the corresponding services have been soft deprecated.
This mean that they WILL be removed in the next major version, but they are only deprecated with comments and not using attributes.
The reason for this is that they are still used internally. Adding deprecation attributes would trigger a large amount of warnings.
🔣 BETA - View Modifier Layout Customizations
This version adds a .keyboardLayout view modifier to KeyboardKit Pro, which can be used to customize the current keyboard layout.
This works just like the .keyboardCalloutActions and .keyboardButtonStyle modifiers that let you inject a custom value builder.
This view modifier and all new layout values is currently only available in KeyboardKit Pro, but fully available in KeyboardKit 10.
You can use the KeyboardLayout.standard(for:) builder to create a standard layout for any keyboard context and its active locale.
KeyboardKit Pro also adds new localized keyboard layout values for all supported locales. They will replace the localized services.
This modifier based-approach will make it a lot easier to customize the keyboard layout. As such, the services are soft deprecated.
📃 BETA - Keyboard Type Change Handling
This version makes the controller redraw its keyboard when the active text field changes, to properly handle keyboard type changes.
This works by having the controller check the text document proxy's keyboard type in each textDidChange and redraw if it changes.
This feature is disabled by default in the betas, since it can cause strange behaviors, performance issues, and maybe even crashes.
You can enable it with the enableExperimentalKeyboardTypeChangeTracking(...) function. Make sure to report any problems you find.
✨ Features
Callouts.Actionscan now init with actions and chars.Callouts.Actions.basenow has domain callout actions.Callouts.ActionCalloutnow shows domain callout actions.InputSethas brand new default value builder parameters.Keyboard.KeyboardTypehas a new.webSearchkeyboard type.KeyboardActionhas brand new standard layout value builders.KeyboardActionhas a new.urlDomainaction for domain input.Viewhas a new.keyboardLayout(_:)view modifier that can inject a custom layout.
👑 Pro
KeyboardLayouthas new localized value builders for all supported locales.KeyboardLayouthas new.setWidth(...)item mutations.KeyboardLayouthas a new.baseLayout(...)layout builder.KeyboardLayouthas a new.iPadLayout(...)layout builder.KeyboardLayouthas a new.iPhoneLayout(...)layout builder.KeyboardLayouthas a new.standard(for:)layout builder.
🔧 Performance Improvements
- KeyboardKit Pro's new layout builders improve the layout rendering performance.
- To enable the improvements, apply the new
.keyboardLayout(...)view modifier. - Return
$0.standardLayout(for:)for a standard layout with better performance. - You can customzie the standard layout and still get the underlying improvements.
📦 Renamings
- The
KeyboardCalloutnamespace has been renamed toCallouts. - The
KeyboardCalloutContexthas been renamed toCalloutContext.
⚠️ Experimental Features
KeyboardInputViewControllerhas a newenableExperimentalDocumentChangeTracking()function.
🗑️ Deprecations
Color+Standardhas been deprecated. UseKeyboardActionextensions.CalloutServiceand all service implementations have been deprecated.InputSethas been nested and is renamed toKeyboardLayout.InputSet.KeyboardKitPro.ProLayoutServiceand all sub classes have been deprecated.KeyboardLayoutServiceand all service implementations have been deprecated.KeyboardStyleServiceand all service implementations have been deprecated.
9.7.2
✨ Features
EmojiContextexposes more skin tone functions and improves performance.
💡 Adjustments
- Some settings types now implement
Sendable. KeyboardAppViewnow injects anEmojiContextinto the environment.
9.7.1
💡 Adjustments
KeyboardAppViewnow injects anEmojiContextinto the environment.
9.7.0
After developer feedback, this version reverts some previos deprecations and moves standard values back to the KeyboardAction type.
The idea with the initial refactoring was to attach the standard value builders to each value type, to make them easier to find. But since each builder is related to a KeyboardAction, it makes more sense to convert them back to action extensions, since this groups them all together.
✨ Features
EmojiContextandEmojiSettingsare two new state types.EmojiKeyboardwill now show the last selected emoji skin tone.KeyboardAction.StandardActionHandlerregisters the skin tone for selected emojis.
💡 Adjustments
Autocomplete.ToolbarItemwill automatically wrap itself in a scroll view if needed.
🐛 Bug Fixes
- KeyboardKit Pro adds missing localizations for Bengali.
KeyboardAction.shiftnow renders correctly for caps lock.
🗑️ Deprecations
Color+Standardhas been deprecated and now useKeyboardActionextensions.Font+Standardhas been deprecated and now useKeyboardActionextensions.Keyboard.ButtonStyle+Standardhas been deprecated and now useKeyboardActionextensions.KeyboardActionhas reverted itsstandardbutton color deprecations.