Skip to content
This repository was archived by the owner on Sep 27, 2025. It is now read-only.

Releases: KeyboardKit/KeyboardKitPro

9.9.0

26 Aug 11:41

Choose a tag to compare

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

  • KeyboardController has a new setIsLiquidGlassEnabled(...) function to enable the new Liquid Glass design.

👑 KeyboardKit Pro

  • UITextDocumentProxy has a new moveTextInputCursor(steps:) function.
  • UITextDocumentProxy has a new moveTextInputCursorToBeginning() function.
  • UITextDocumentProxy has a new moveTextInputCursorToEnd() function.

🐛 Bug Fixes

  • KeyboardAction.shift now behaves correctly if tapped as a first action with auto-capitalization disabled.
  • KeyboardContext's preferredAutocapitalizedCase now 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

20 Aug 06:19

Choose a tag to compare

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

  • KeyboardController has a new setIsLiquidGlassEnabled(...) function to enable the new Liquid Glass design.

👑 KeyboardKit Pro

  • EmojiKeyboard now applies a style-based spacing between its sections.
  • UITextDocumentProxy has a new moveTextInputCursor(steps:) function.
  • UITextDocumentProxy has a new moveTextInputCursorToBeginning() function.
  • UITextDocumentProxy has a new moveTextInputCursorToEnd() function.

🐛 Bug Fixes

  • KeyboardAction.shift now behaves correctly if tapped as a first action with auto-capitalization disabled.
  • KeyboardContext's preferredAutocapitalizedCase now behaves correctly when it's triggered for new lines.
  • KeyboardController now ignores keyboard type change for certain keyboard types, like .emojis and .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

17 Aug 20:57

Choose a tag to compare

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

  • KeyboardController has a new setIsLiquidGlassEnabled(...) function to enable the new Liquid Glass design.

9.9.0-beta.1

17 Aug 11:42

Choose a tag to compare

This version performs final library changes for 9.x, and adds support for Liquid Glass on iOS 26 and aligned platform versions.

✨ Features

  • KeyboardController has a new setIsLiquidGlassEnabled(...) function that can be used to enforce the new Liquid Glass design.

💡 Adjustments

  • KeyboardView and all keyboard styles will now render a keyboard that looks like the native iOS 26 keyboard when running iOS 26.

9.8.0

17 Aug 10:56

Choose a tag to compare

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.Actions can now init with actions and chars.
  • Callouts.Actions.base now has domain callout actions.
  • Callouts.ActionCallout now shows domain callout actions.
  • InputSet has brand new default value builder parameters.
  • Keyboard.KeyboardType has a new .webSearch keyboard type.
  • KeyboardAction has brand new standard layout value builders.
  • KeyboardAction has a new .urlDomain action for domain input.
  • View has a new .keyboardLayout(_:) view modifier that can inject a custom layout.

👑 Pro

  • KeyboardLayout has new localized value builders for all supported locales.
  • KeyboardLayout has new .setWidth(...) item mutations.
  • KeyboardLayout has a new .baseLayout(...) layout builder.
  • KeyboardLayout has a new .iPadLayout(...) layout builder.
  • KeyboardLayout has a new .iPhoneLayout(...) layout builder.
  • KeyboardLayout has 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 KeyboardCallout namespace has been renamed to Callouts.
  • The KeyboardCalloutContext has been renamed to CalloutContext.

⚠️ Experimental Features

  • KeyboardInputViewController has a new enableExperimentalDocumentChangeTracking() function.

🐛 Bug Fixes

  • KeyboardInputViewController now reloads when the document changes.
  • KeyboardAction.keyboardType will now set the native type for .alphabetic.

🗑️ Deprecations

  • Color+Standard has been deprecated. Use KeyboardAction extensions.
  • CalloutService and all service implementations have been deprecated.
  • InputSet has been nested and is renamed to KeyboardLayout.InputSet.
  • KeyboardKitPro.ProLayoutService and all sub classes have been deprecated.
  • KeyboardLayoutService and all service implementations have been deprecated.
  • KeyboardStyleService and all service implementations have been deprecated.

9.8.0-beta.3

29 Jul 12:11

Choose a tag to compare

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.Actions can now init with actions and chars.
  • Callouts.Actions.base now has domain callout actions.
  • Callouts.ActionCallout now shows domain callout actions.
  • InputSet has brand new default value builder parameters.
  • Keyboard.KeyboardType has a new .webSearch keyboard type.
  • KeyboardAction has brand new standard layout value builders.
  • KeyboardAction has a new .urlDomain action for domain input.
  • View has a new .keyboardLayout(_:) view modifier that can inject a custom layout.

👑 Pro

  • KeyboardLayout has new localized value builders for all supported locales.
  • KeyboardLayout has new .setWidth(...) item mutations.
  • KeyboardLayout has a new .baseLayout(...) layout builder.
  • KeyboardLayout has a new .iPadLayout(...) layout builder.
  • KeyboardLayout has a new .iPhoneLayout(...) layout builder.
  • KeyboardLayout has 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 KeyboardCallout namespace has been renamed to Callouts.
  • The KeyboardCalloutContext has been renamed to CalloutContext.

⚠️ Experimental Features

  • KeyboardInputViewController has a new enableExperimentalDocumentChangeTracking() function.

🗑️ Deprecations

  • Color+Standard has been deprecated. Use KeyboardAction extensions.
  • CalloutService and all service implementations have been deprecated.
  • InputSet has been nested and is renamed to KeyboardLayout.InputSet.
  • KeyboardKitPro.ProLayoutService and all sub classes have been deprecated.
  • KeyboardLayoutService and all service implementations have been deprecated.
  • KeyboardStyleService and all service implementations have been deprecated.

9.8.0-beta.2

24 Jul 09:28

Choose a tag to compare

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.Actions can now init with actions and chars.
  • Callouts.Actions.base now has domain callout actions.
  • Callouts.ActionCallout now shows domain callout actions.
  • InputSet has brand new default value builder parameters.
  • Keyboard.KeyboardType has a new .webSearch keyboard type.
  • KeyboardAction has brand new standard layout value builders.
  • KeyboardAction has a new .urlDomain action for domain input.
  • View has a new .keyboardLayout(_:) view modifier that can inject a custom layout.

👑 Pro

  • KeyboardLayout has new localized value builders for all supported locales.
  • KeyboardLayout has new .setWidth(...) item mutations.
  • KeyboardLayout has a new .baseLayout(...) layout builder.
  • KeyboardLayout has a new .iPadLayout(...) layout builder.
  • KeyboardLayout has a new .iPhoneLayout(...) layout builder.
  • KeyboardLayout has 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 KeyboardCallout namespace has been renamed to Callouts.
  • The KeyboardCalloutContext has been renamed to CalloutContext.

⚠️ Experimental Features

  • KeyboardInputViewController has a new enableExperimentalDocumentChangeTracking() function.

🗑️ Deprecations

  • Color+Standard has been deprecated. Use KeyboardAction extensions.
  • CalloutService and all service implementations have been deprecated.
  • InputSet has been nested and is renamed to KeyboardLayout.InputSet.
  • KeyboardKitPro.ProLayoutService and all sub classes have been deprecated.
  • KeyboardLayoutService and all service implementations have been deprecated.
  • KeyboardStyleService and all service implementations have been deprecated.

9.7.2

16 Jul 06:39

Choose a tag to compare

✨ Features

  • EmojiContext exposes more skin tone functions and improves performance.

💡 Adjustments

  • Some settings types now implement Sendable.
  • KeyboardAppView now injects an EmojiContext into the environment.

9.7.1

15 Jul 22:49

Choose a tag to compare

💡 Adjustments

  • KeyboardAppView now injects an EmojiContext into the environment.

9.7.0

15 Jul 13:56

Choose a tag to compare

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

  • EmojiContext and EmojiSettings are two new state types.
  • EmojiKeyboard will now show the last selected emoji skin tone.
  • KeyboardAction.StandardActionHandler registers the skin tone for selected emojis.

💡 Adjustments

  • Autocomplete.ToolbarItem will automatically wrap itself in a scroll view if needed.

🐛 Bug Fixes

  • KeyboardKit Pro adds missing localizations for Bengali.
  • KeyboardAction.shift now renders correctly for caps lock.

🗑️ Deprecations

  • Color+Standard has been deprecated and now use KeyboardAction extensions.
  • Font+Standard has been deprecated and now use KeyboardAction extensions.
  • Keyboard.ButtonStyle+Standard has been deprecated and now use KeyboardAction extensions.
  • KeyboardAction has reverted its standard button color deprecations.