<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://keyboardkit.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://keyboardkit.com/" rel="alternate" type="text/html" /><updated>2026-07-04T08:51:26+00:00</updated><id>https://keyboardkit.com/feed.xml</id><title type="html">KeyboardKit</title><subtitle>KeyboardKit helps you create custom keyboards for iOS and iPadOS, using Swift and SwiftUI. </subtitle><entry><title type="html">Custom Keyboards are Overlapped by Keyboard Toolbar</title><link href="https://keyboardkit.com/blog/2026/07/04/custom-keyboards-are-overlapped-by-keyboard-toolbar" rel="alternate" type="text/html" title="Custom Keyboards are Overlapped by Keyboard Toolbar" /><published>2026-07-04T05:00:00+00:00</published><updated>2026-07-04T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/07/04/custom-keyboards-are-overlapped-by-keyboard-toolbar</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/07/04/custom-keyboards-are-overlapped-by-keyboard-toolbar"><![CDATA[<p>We have noticed that iOS will overlay any custom keyboard with the host application’s keyboard toolbar, when switching back to an already initialized custom keyboard. This happens in all custom keyboards.</p>

<h2 id="the-problem">The Problem</h2>

<p>When selecting an already initialized custom keyboard after using another keyboard, the host application will render its keyboard toolbar inside the frame of the custom keyboard.</p>

<p>This happens in all custom keyboards, including KeyboardKit-based ones as well as in Grammarly and Gboard:</p>

<p><img src="/assets/blog/26/0704/grammarly.png" alt="Grammarly keyboard" /></p>

<p><img src="/assets/blog/26/0704/gboard.png" alt="Gboard keyboard" /></p>

<p>This does not happen when launching a custom keyboard for the first time. It only happens when first initializing a keyboard, then switching to another keyboard, then switching back to the already initialized keyboard.</p>

<h2 id="steps-to-reproduce">Steps to Reproduce</h2>

<p>You can easily reproduce this bug by following the steps below:</p>

<ul>
  <li>Use an app that has keyboard toolbar controls, e.g. Apple Notes</li>
  <li>Select a custom keyboard, e.g. Grammarly or Gboard</li>
  <li>Switch to another keyboard</li>
  <li>Switch back to the same keyboard</li>
</ul>

<p>You should now see the keyboard toolbar controls overlay the custom keyboard, at least in iOS 26.5. If you can’t reproduce it, please let us know, so that we can pinpoint when this started happening.</p>

<h2 id="workaround-attempts">Workaround Attempts</h2>

<p>We tried adding a button to redraw the keyboard when this happens, but it didn’t help. It seems like the toolbar is always merged with the keyboard once the keyboard is presented after initialization.</p>

<h2 id="next-steps">Next Steps</h2>

<p>We hope that iOS 27 will fix this problem, and will track any progress in <a href="https://github.com/KeyboardKit/KeyboardKit/issues/1055">this issue</a>. If you report this to Apple
using the <a href="">Feedback Assistant</a>, you can mention our report <code class="language-plaintext highlighter-rouge">FB23560337</code> for additional details.</p>]]></content><author><name>danielsaidi</name></author><category term="apple-bugs" /><summary type="html"><![CDATA[We have noticed that iOS will overlay any custom keyboard with the host application’s keyboard toolbar, when switching back to an already initialized custom keyboard. This happens in all custom keyboards.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0704/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0704/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.7 is out</title><link href="https://keyboardkit.com/blog/2026/07/04/keyboardkit-10-7" rel="alternate" type="text/html" title="KeyboardKit 10.7 is out" /><published>2026-07-04T05:00:00+00:00</published><updated>2026-07-04T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/07/04/keyboardkit-10-7</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/07/04/keyboardkit-10-7"><![CDATA[<p>KeyboardKit 10.7 is out! This version adds undo capabilities to the keyboard, adds many new settings pickers, and finishes the namespace refactoring that was initially planned for KeyboardKit 11.</p>

<p><img src="/assets/versions/10_7.jpg" alt="KeyboardKit header image" /></p>

<p>This release comes out close to <a href="/blog/2026/06/22/keyboardkit-10-6">KeyboardKit 10.6</a>, which was released not even two weeks ago. The reason is to get these new things out and get your feedback before KeyboardKit 11.</p>

<h2 id="️-actions">⚡️ Actions</h2>

<p>The <code class="language-plaintext highlighter-rouge">KeyboardAction</code> has new actions, like <code class="language-plaintext highlighter-rouge">.openMainApp</code> (without a deep link and reason), and <code class="language-plaintext highlighter-rouge">.undo</code>. The <code class="language-plaintext highlighter-rouge">StandardKeyboardActionHandler</code> also has a new <code class="language-plaintext highlighter-rouge">undoLastRecordedDocumentChange</code> function.</p>

<h2 id="-licenses">📜 Licenses</h2>

<p>The <code class="language-plaintext highlighter-rouge">LicenseErrorAlert</code> that is used by KeyboardKit Pro has been redesigned to be more informative, and fit better in with the overall iOS platform design.</p>

<p><img src="/assets/blog/26/0626/LicenseErrorAlert.jpg" alt="License Error Alert" class="medium" /></p>

<h2 id="-namespaces">📦 Namespaces</h2>

<p>KeyboardKit 10.7 flattens the remaining namespaces, to complete the extensive namespace transition earlier than initially planned, to give us all time to migrate before KeyboardKit 11.</p>

<h2 id="️-settings">🎛️ Settings</h2>

<p>KeyboardKit 10.7 also adds many more pickers and settings for various keyboard models, including a brand new <code class="language-plaintext highlighter-rouge">KeyboardActionPicker</code>. This will let us harmonize settings, and use the same base picker for all models.</p>

<p>The <code class="language-plaintext highlighter-rouge">Keyboard</code> namespace has these new pickers: <code class="language-plaintext highlighter-rouge">DockEdgePicker</code>, <code class="language-plaintext highlighter-rouge">InputToolbarTypePicker</code>, <code class="language-plaintext highlighter-rouge">InputTypePicker</code>, <code class="language-plaintext highlighter-rouge">KeyboardCasePicker</code>, <code class="language-plaintext highlighter-rouge">KeyboardTypePicker</code>, <code class="language-plaintext highlighter-rouge">LayoutTypePicker</code>, <code class="language-plaintext highlighter-rouge">ReturnKeyTypePicker</code>, <code class="language-plaintext highlighter-rouge">SpacebarLongPressBehaviorPicker</code>, <code class="language-plaintext highlighter-rouge">SpacebarMenuTypePicker</code>, and there’s also a brand new <code class="language-plaintext highlighter-rouge">KeyboardActionPicker</code>.</p>

<h2 id="-styling">🎨 Styling</h2>

<p>As part of implementing the new pickers, there are new images, and image builders to add icons to the pickers:</p>

<p><code class="language-plaintext highlighter-rouge">.keyboardArrowBackward</code>, <code class="language-plaintext highlighter-rouge">.keyboardArrowForward</code>, <code class="language-plaintext highlighter-rouge">.keyboardCase</code>, <code class="language-plaintext highlighter-rouge">.keyboardEscape</code>, <code class="language-plaintext highlighter-rouge">.keyboardFunction</code>, <code class="language-plaintext highlighter-rouge">.keyboardInputType</code>, <code class="language-plaintext highlighter-rouge">.keyboardSpace</code>, <code class="language-plaintext highlighter-rouge">.keyboardSystemSettings</code>, <code class="language-plaintext highlighter-rouge">.keyboardType</code>, <code class="language-plaintext highlighter-rouge">.keyboardUrlDomain</code>.</p>

<h2 id="️-undo">↩️ Undo</h2>

<p>This version adds undo functionality to the keyboard engine. This makes it possible to undo text insertions, text deletions, and autocompletions in smart steps. We write more about this feature <a href="/blog/2026/06/24/undo-support-is-coming-to-keyboardkit">here</a>.</p>

<p>Undo is currently opt-in, to avoid unexpected side-effects. Enable the <code class="language-plaintext highlighter-rouge">undoManager</code> experiment to try it out.</p>

<h2 id="conclusion">Conclusion</h2>

<p>KeyboardKit 10.7 is a huge release that adds since long requested features, makes many structural changes for a greater developer experience, and irons out some bugs.</p>

<p>For more details, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.7.0">release notes</a> for a full list of changes. Update now to get access to all improvements.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="proxy" /><category term="settings" /><category term="styling" /><summary type="html"><![CDATA[KeyboardKit 10.7 is out! This version adds undo capabilities to the keyboard, adds many new settings pickers, and finishes the namespace refactoring that was initially planned for KeyboardKit 11.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_7.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_7.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.6.1 patch restores the host application bundle ID sync.</title><link href="https://keyboardkit.com/blog/2026/07/02/keyboardkit-10.6.1" rel="alternate" type="text/html" title="KeyboardKit 10.6.1 patch restores the host application bundle ID sync." /><published>2026-07-02T05:00:00+00:00</published><updated>2026-07-02T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/07/02/keyboardkit-10.6.1</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/07/02/keyboardkit-10.6.1"><![CDATA[<p>A KeyboardKit 10.6.1 patch has been released, that restores the host bundle ID that was disabled in the 10.6 release two weeks ago.</p>

<!--![KeyboardKit header image](/assets/blog/26/0702/image.jpg)-->

<h2 id="host-application">Host Application</h2>

<p>KeyboardKit 10.6.0 disabled the host application bundle ID feature, which stopped working in iOS 26.4. Since iOS 27 haven’t restored the required APIs, we determined that it was best to remove this code.</p>

<p>However, some apps are still using this to provide a good user experience on iOS releases before 26.4. Due to this, we have decided to revert this removal, and instead soft deprecate the property.</p>

<h2 id="conclusion">Conclusion</h2>

<p>KeyboardKit 10.6.1 is a small patch that reverts the removal of a function that is still used by some apps. The feature is not soft deprecated, and will be removed in KeyboardKit 11.</p>

<p>For more details, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.6.1">release notes</a> for a full list of changes. Update now to get access to all improvements.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="proxy" /><category term="settings" /><category term="styling" /><summary type="html"><![CDATA[A KeyboardKit 10.6.1 patch has been released, that restores the host bundle ID that was disabled in the 10.6 release two weeks ago.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0702/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0702/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.7 beta 1 is out</title><link href="https://keyboardkit.com/blog/2026/06/26/keyboardkit-10-7-beta" rel="alternate" type="text/html" title="KeyboardKit 10.7 beta 1 is out" /><published>2026-06-26T05:00:00+00:00</published><updated>2026-06-26T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/26/keyboardkit-10-7-beta</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/26/keyboardkit-10-7-beta"><![CDATA[<p>KeyboardKit 10.7 beta is out! This version adds undo capabilities to the keyboard, adds many settings pickers, and finishes the namespace flattening that was initially planned for KeyboardKit 11.</p>

<p><img src="/assets/versions/10_7-beta.jpg" alt="KeyboardKit header image" /></p>

<p>This beta release comes out very close to <a href="">KeyboardKit 10.6</a>, which was released just a few days ago. The reason for this is to get all the new things into your hands as soon as possible, to get your early feedback.</p>

<h2 id="️-actions">⚡️ Actions</h2>

<p>The <code class="language-plaintext highlighter-rouge">KeyboardAction</code> has new actions, like <code class="language-plaintext highlighter-rouge">.openMainApp</code> (without a deep link and reason), and <code class="language-plaintext highlighter-rouge">.undo</code>. The <code class="language-plaintext highlighter-rouge">StandardKeyboardActionHandler</code> also has a new <code class="language-plaintext highlighter-rouge">undoLastRecordedDocumentChange</code> function.</p>

<h2 id="-licenses">📜 Licenses</h2>

<p>The <code class="language-plaintext highlighter-rouge">LicenseErrorAlert</code> that is used by KeyboardKit Pro has been redesigned to be more informative, and fit better in with the overall iOS platform design.</p>

<p><img src="/assets/blog/26/0626/LicenseErrorAlert.jpg" alt="License Error Alert" class="medium" /></p>

<h2 id="-namespaces">📦 Namespaces</h2>

<p>KeyboardKit 10.7 flattens the remaining namespaces, to complete the extensive namespace transition earlier than initially planned, to give us all time to migrate before KeyboardKit 11.</p>

<h2 id="️-settings">🎛️ Settings</h2>

<p>KeyboardKit 10.7 also adds many more pickers and settings for various keyboard models, including a brand new <code class="language-plaintext highlighter-rouge">KeyboardActionPicker</code>. This will let us harmonize settings, and use the same base picker for all models.</p>

<p>The <code class="language-plaintext highlighter-rouge">Keyboard</code> namespace has these new pickers: <code class="language-plaintext highlighter-rouge">DockEdgePicker</code>, <code class="language-plaintext highlighter-rouge">InputToolbarTypePicker</code>, <code class="language-plaintext highlighter-rouge">InputTypePicker</code>, <code class="language-plaintext highlighter-rouge">KeyboardCasePicker</code>, <code class="language-plaintext highlighter-rouge">KeyboardTypePicker</code>, <code class="language-plaintext highlighter-rouge">LayoutTypePicker</code>, <code class="language-plaintext highlighter-rouge">ReturnKeyTypePicker</code>, <code class="language-plaintext highlighter-rouge">SpacebarLongPressBehaviorPicker</code>, <code class="language-plaintext highlighter-rouge">SpacebarMenuTypePicker</code>, and there’s also a brand new <code class="language-plaintext highlighter-rouge">KeyboardActionPicker</code>.</p>

<h2 id="-styling">🎨 Styling</h2>

<p>As part of implementing the new pickers, there are new images, and image builders to add icons to the pickers:</p>

<p><code class="language-plaintext highlighter-rouge">.keyboardArrowBackward</code>, <code class="language-plaintext highlighter-rouge">.keyboardArrowForward</code>, <code class="language-plaintext highlighter-rouge">.keyboardCase</code>, <code class="language-plaintext highlighter-rouge">.keyboardEscape</code>, <code class="language-plaintext highlighter-rouge">.keyboardFunction</code>, <code class="language-plaintext highlighter-rouge">.keyboardInputType</code>, <code class="language-plaintext highlighter-rouge">.keyboardSpace</code>, <code class="language-plaintext highlighter-rouge">.keyboardSystemSettings</code>, <code class="language-plaintext highlighter-rouge">.keyboardType</code>, <code class="language-plaintext highlighter-rouge">.keyboardUrlDomain</code>.</p>

<h2 id="️-undo">↩️ Undo</h2>

<p>This version adds undo functionality to the keyboard engine. This makes it possible to undo text insertions, text deletions, and autocompletions in smart steps. We write more about this feature <a href="/blog/2026/06/24/undo-support-is-coming-to-keyboardkit">here</a>.</p>

<p>Undo is currently opt-in, to avoid unexpected side-effects. Enable the <code class="language-plaintext highlighter-rouge">undoManager</code> experiment to try it out.</p>

<h2 id="conclusion">Conclusion</h2>

<p>KeyboardKit 10.7 is a huge release that adds since long requested features, makes many structural changes for a greater developer experience, and irons out some bugs.</p>

<p>For more details, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.7.0-beta.1">release notes</a> for a full list of changes. Update now to get access to all improvements.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="proxy" /><category term="settings" /><category term="styling" /><summary type="html"><![CDATA[KeyboardKit 10.7 beta is out! This version adds undo capabilities to the keyboard, adds many settings pickers, and finishes the namespace flattening that was initially planned for KeyboardKit 11.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_7-beta.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_7-beta.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Undo Support is Coming to KeyboardKit</title><link href="https://keyboardkit.com/blog/2026/06/24/undo-support-is-coming-to-keyboardkit" rel="alternate" type="text/html" title="Undo Support is Coming to KeyboardKit" /><published>2026-06-24T05:00:00+00:00</published><updated>2026-06-24T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/24/undo-support-is-coming-to-keyboardkit</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/24/undo-support-is-coming-to-keyboardkit"><![CDATA[<p>We’re excited to announce that KeyboardKit 10.7 will feature a brand new undo manager, which lets you undo text insertions, deletions and autocompletes.</p>

<h2 id="what-does-this-mean">What does this mean?</h2>

<p>This will be a huge thing for the keyboard engine, especially since the native APIs lack any kind of undo control.</p>

<p>KeyboardKit’s custom undo engine will allow you to build nice features on top of it, for instance to allow a back swipe to undo the last change. We will also add new undo features over time.</p>

<p>Being able to undo autocomplete and autocorrect suggestions will be another huge win, where any destructive operations finally become revertible.</p>

<h2 id="how-does-it-work">How does it work?</h2>

<p>The standard action handler will use the new <code class="language-plaintext highlighter-rouge">TextDocumentUndoManager</code> to record revertible changes, like text insertions, deletions, and applied autocomple suggestions.</p>

<p>Changes of the same type will be recorded in chunks, to let us undo many subsequent changes of the same type with a single undo. This means that typing several subsequent characters will be recorded as a single change, to let us undo word by word insertions as separate undos.</p>

<p>The same goes for text deletions, where tapping backspace multiple times will be revertible with a single undo, and applying several subsequent autocomplete suggestions.</p>

<p>Changes will be stored in sequences in a change log, which means that you can type, delete, and complete freely and use the undo manager to rollback change by change. Due to a keyboard extension’s limited control over the text document, moving the input cursor will reset the undo stack.</p>

<p>To make it easy to trigger undo operations, there will be a new <code class="language-plaintext highlighter-rouge">.undo</code> keyboard action, that can be triggered with code or by adding an undo button to the keyboard.</p>

<h2 id="when-will-this-be-available">When will this be available?</h2>

<p>The new undo manager will be available in KeyboardKit 10.7, which will be released later in June. It will be opt-in at first, to allow us to test it with large changesets, to ensure that it doesn’t affect performance.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="localization" /><summary type="html"><![CDATA[We’re excited to announce that KeyboardKit 10.7 will feature a brand new undo manager, which lets you undo text insertions, deletions and autocompletes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0624/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0624/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.6 is out</title><link href="https://keyboardkit.com/blog/2026/06/22/keyboardkit-10-6" rel="alternate" type="text/html" title="KeyboardKit 10.6 is out" /><published>2026-06-22T05:00:00+00:00</published><updated>2026-06-22T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/22/keyboardkit-10-6</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/22/keyboardkit-10-6"><![CDATA[<p>KeyboardKit 10.6 is out! This version minimizes the number of on-launch redraws to minimize launch flickering, and makes it possible to swipe up and down on the spacebar to move the cursor in greater steps.</p>

<p><img src="/assets/versions/10_6.jpg" alt="KeyboardKit header image" /></p>

<p>This also version starts reducing namespace nesting, as described <a href="https://github.com/KeyboardKit/KeyboardKit/issues/1045">here</a>. Expect less nesting and more surface-level types, with renaming guides to help you migrate. This change will be implemented in steps.</p>

<h2 id="-essentials">🌱 Essentials</h2>

<p>The <code class="language-plaintext highlighter-rouge">KeyboardInputViewController</code> has been adjusted to minimize the number of on-launch redraws, to minimize height and view flickering. This makes it more stable to launch KeyboardKit-based keyboards.</p>

<p>The <code class="language-plaintext highlighter-rouge">Keyboard.SpacebarDragGestureHandler</code> has been extended with up and down drag support. When you drag the spacebar vertically, the cursor will now move to the end of the previous/next sentence.</p>

<h2 id="-host">🏠 Host</h2>

<p>Since the host app bundle ID keeps returning nil in iOS 27 beta, the <code class="language-plaintext highlighter-rouge">hostApplicationBundleId</code> property is now deprecated, and will always return nil. See the documentation for ways to work around this.</p>

<h2 id="-layout">🔣 Layout</h2>

<p>The keyboard switcher key placement is adjusted on older devices, and the <code class="language-plaintext highlighter-rouge">DeviceConfiguration</code> applies the updated edge insets on iPads running iOS 18 and earlier.</p>

<h2 id="-namespaces">📦 Namespaces</h2>

<p>This version implements the namespace changes for the <code class="language-plaintext highlighter-rouge">Layout</code>, <code class="language-plaintext highlighter-rouge">Localization</code>, <code class="language-plaintext highlighter-rouge">Proxy</code>, <code class="language-plaintext highlighter-rouge">Settings</code>, <code class="language-plaintext highlighter-rouge">Status</code> and <code class="language-plaintext highlighter-rouge">Themes</code> features. This involves a lot of cleanups and renamings.</p>

<h2 id="️-settings">🎛️ Settings</h2>

<p>The <code class="language-plaintext highlighter-rouge">KeyboardSettingsPicker</code> has been extended with more functionality, to make it easier to port various pickers to use this component in the future. This will reduce the amount of picker code in the library.</p>

<h2 id="conclusion">Conclusion</h2>

<p>KeyboardKit 10.6 makes faster and more stable to launch KeyboardKit-based keyboards. The version also adds new features, like improved spacebar drag, and starts flattening namespaces for improved discoverability.</p>

<p>For more details, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.6.0">KeyboardKit 10.6 release notes</a>. Upgrade now to take advantage of all improvements.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="localization" /><summary type="html"><![CDATA[KeyboardKit 10.6 is out! This version minimizes the number of on-launch redraws to minimize launch flickering, and makes it possible to swipe up and down on the spacebar to move the cursor in greater steps.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_6.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_6.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Wrapping Up an Eventful Q2</title><link href="https://keyboardkit.com/blog/2026/06/15/wrapping-up-an-eventful-q2" rel="alternate" type="text/html" title="Wrapping Up an Eventful Q2" /><published>2026-06-15T06:00:00+00:00</published><updated>2026-06-15T06:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/15/wrapping-up-an-eventful-q2</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/15/wrapping-up-an-eventful-q2"><![CDATA[<p>This post aims to give you an update on the many things that have been happening in Q2, in case you missed it, with some looks into the future and what you can expect ahead.</p>

<h2 id="wwdc-26">WWDC 26</h2>

<p>WWDC 26 came and went without any major announcements that directly affect KeyboardKit or the custom keyboard parts of the system. It’s more or less business as usual, with new features rather than disruption.</p>

<p>That said, we are keeping an eye on Apple’s Foundation Models and on-device capabilities that keep improving over time. We already use these models for some predictions, and will explore how to take things further.</p>

<h2 id="ios-27-beta">iOS 27 Beta</h2>

<p>We have started testing KeyboardKit against the iOS 27 developer beta to identify features and design choices that may need adjustments before the final release.</p>

<p>For those who went through the Liquid Glass transition last year: unlike then, where devices still on iOS 18 kept the old pre-Liquid Glass design, any tweaks we make for iOS 27 will also apply to iOS 26.</p>

<h2 id="ios-264-host-application-bundle-id">iOS 26.4 Host Application Bundle ID</h2>

<p>Since iOS 26.4, the host application bundle ID has been returning nil in keyboard extensions. We had hoped this would be resolved, but testing on the iOS 27 beta shows the same behavior persists.</p>

<p>We are taking this as a signal that Apple no longer will support this in its current form. Until they provide public ways to identify and navigate back to the host application, we’ll pause our efforts and shift focus toward UI/UX.</p>

<h2 id="q2-releases">Q2 Releases</h2>

<p>Two releases shipped this quarter:</p>

<p><a href="https://keyboardkit.com/blog/2026/04/08/keyboardkit-10-4">KeyboardKit 10.4</a> focused on performance, with improved keyboard launch times and new ways to launch the main app with a specific reason from within the keyboard extension.</p>

<p><a href="https://keyboardkit.com/blog/2026/05/19/keyboardkit-10-5">KeyboardKit 10.5</a> was a broader release, adding a new language, new accessibility tools, new 26.4 emojis, new autocomplete settings, and much more.</p>

<h2 id="keyboardkit-11">KeyboardKit 11</h2>

<p>We have put a lot of care into designing the KeyboardKit feature namespaces, but think we went too far with type nesting. We will therefore begin moving views, styles, and other important types out of their namespaces and into the top level, to make the SDK easier to explore and use. This will be complete in KeyboardKit 11.0.</p>

<p>Beyond that, KeyboardKit 11 will focus on bringing Swift 6 support for structured concurrency, and migrate from <code class="language-plaintext highlighter-rouge">ObservableObject</code> to <code class="language-plaintext highlighter-rouge">Observable</code>, requiring iOS 17 as the minimum deployment target.</p>

<h2 id="licensing-updates">Licensing Updates</h2>

<p>We are happy to announce that all <a href="https://keyboardkit.com/business">business licenses</a> now include an expiration grace period, making it easier and smoother to renew your license files without any interruption, giving you and your users more time.</p>

<p>This applies retroactively to existing licenses. We will begin sending out updated license files to all business license customers starting this week. Don’t hesitate to <a href="mailto:info@keyboardkit.com">reach out</a> if you have any questions.</p>]]></content><author><name>danielsaidi</name></author><category term="general" /><summary type="html"><![CDATA[This post aims to give you an update on the many things that have been happening in Q2, in case you missed it, with some looks into the future and what you can expect ahead.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0615/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0615/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">All Business Licenses Now Include Expiration Grace</title><link href="https://keyboardkit.com/blog/2026/06/11/business-licenses-now-include-an-expiration-grace-period" rel="alternate" type="text/html" title="All Business Licenses Now Include Expiration Grace" /><published>2026-06-11T06:00:00+00:00</published><updated>2026-06-11T06:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/11/business-licenses-now-include-an-expiration-grace-period</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/11/business-licenses-now-include-an-expiration-grace-period"><![CDATA[<p>All KeyboardKit <a href="/business">business licenses</a> now include a license expiration grace period, to give you and your users time to upgrade the app when the license needs to be renewed.</p>

<h2 id="background">Background</h2>

<p>KeyboardKit 10 added support for binary license files, which can be validated on-device, without having to use a network call to contact a remote license validation server.</p>

<p>Since keyboard extensions need <a href="/faq#terminology">Full Access</a> to make network calls, this means that keyboards that use a license file don’t need Full Access to validate licenses.</p>

<p>However, bundling a license file with your app means that the app must be updated with a new license file when you renew your license. KeyboardKit Pro will stop working in older app versions, when their license file expires.</p>

<p>To make this process smoother and give you and your users time to upgrade, our business licenses has offered expiration grace as an add-on service. Starting today, this is automatically included in all business plans.</p>

<h2 id="how-does-it-work">How does it work?</h2>

<p>Starting today, all standard <a href="/business">Business</a> licenses now include a 1 month expiration grace period, which means that the license file can be used for an additional month after your license expires, before it stops working.</p>

<p>Furthermore, all <a href="/business">Business+</a> licenses include a 2 month period to allow for an even longer upgrade period, and all <a href="/business">Enterprise</a> licenses start with 3 month, with the possibility to extend it even more.</p>

<p>Note that the expiration grace period is NOT intended to delay invoice payments. You will still be contacted a month before your license expires, and will receive a renewal invoice as soon as you confirm that you want to renew your license. Your license will renew from the expiration date.</p>

<h2 id="rollout">Rollout</h2>

<p>We will start rolling out this change today, and will send our updated license files to business license customers throughout the upcoming week.</p>

<p>We trust this change will be a welcome addition to our business offering, and that it will remove some previous timing complexities when renewing your license. Don’t hesistate to <a href="mailto:info@keyboardkit.com">contact us</a> if you have any questions.</p>]]></content><author><name>danielsaidi</name></author><category term="pro" /><category term="licenses" /><summary type="html"><![CDATA[All KeyboardKit business licenses now include a license expiration grace period, to give you and your users time to upgrade the app when the license needs to be renewed.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0611/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0611/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Fleksy Shuts Down Their Website</title><link href="https://keyboardkit.com/blog/2026/06/08/fleksy-shuts-down-their-website" rel="alternate" type="text/html" title="Fleksy Shuts Down Their Website" /><published>2026-06-08T06:00:00+00:00</published><updated>2026-06-08T06:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/08/fleksy-shuts-down-their-website</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/08/fleksy-shuts-down-their-website"><![CDATA[<p>It just came to our attention that the software keyboard SDK vendor <a href="https://fleksy.com">Fleksy</a> has shut down their website, ending a confusing period where the future of the company and their virtual keyboard SDK has been unclear.</p>

<p><img src="/assets/blog/26/0608/fleksy.jpg" alt="Fleksy Logo" /></p>

<h2 id="background">Background</h2>

<p>For those who haven’t followed, Fleksy was one of the few companies offering a commercial keyboard SDK for mobile platforms. This made them a serious competitor to KeyboardKit, in a very niche market.</p>

<p>At some point last year, Fleksy quietly stopped developing their SDK without any public announcement. No blog post and no statement on their website. The website stayed up, but things like the pricing matrix were removed.</p>

<p>This created confusion in the keyboard SDK space. During a period, we were regularly contacted by developers and companies asking us about the state of Fleksy, whether it was still being maintained, whether the company was still operating, and whether to look for alternatives.</p>

<p>As a competitor, that’s a strange situation to be in. We didn’t have any answers. All we could do was point to the lack of activity, let people draw their own conclusions, and hope they would consider giving KeyboardKit a try.</p>

<h2 id="the-shutdown">The Shutdown</h2>

<p>The shutdown of the Fleksy website hopefully puts an end to this ambiguous chapter. Whatever was still active, this is about as definitive a signal as you can get that the SDK is no longer available.</p>

<p>We don’t want to further discuss or elaborate on the reason behind why Fleksy decided to sunset their website and SDK, or the way in which it happened. We just hope that if you are affected, this post can guide you forward.</p>

<h2 id="moving-forward">Moving Forward</h2>

<p>If you are currently using the Fleksy Virtual Keyboard SDK and are looking for a way forward, we would love to help. KeyboardKit has been in active development for years, offers a modern Swift- and SwiftUI-based API, and is built specifically for iOS keyboard extensions.</p>

<p>Feel free to <a href="mailto:info@keyboardkit.com">reach out to us</a> to start a conversation. We are happy to discuss what a transition might look like for your app or product. There is no pressure and no sales pitch, just a genuine offer to help if you are stuck.</p>]]></content><author><name>danielsaidi</name></author><category term="general" /><summary type="html"><![CDATA[It just came to our attention that the software keyboard SDK vendor Fleksy has shut down their website, ending a confusing period where the future of the company and their virtual keyboard SDK has been unclear.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0608/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0608/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Case Study - Indic Transliteration Keyboard</title><link href="https://keyboardkit.com/blog/2026/06/02/akshar-case-study" rel="alternate" type="text/html" title="Case Study - Indic Transliteration Keyboard" /><published>2026-06-02T07:00:00+00:00</published><updated>2026-06-02T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/06/02/akshar-case-study</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/06/02/akshar-case-study"><![CDATA[]]></content><author><name>danielsaidi</name></author><category term="case-studies" /><summary type="html"><![CDATA[Say hi to Akshar - an Indic transliteration keyboard for iPhone and iPad, built by solo developer Krishna Permi.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/case-studies/akshar/header.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/case-studies/akshar/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>