<?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-06-12T12:53:08+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">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><entry><title type="html">KeyboardKit 10.5 is out</title><link href="https://keyboardkit.com/blog/2026/05/19/keyboardkit-10-5" rel="alternate" type="text/html" title="KeyboardKit 10.5 is out" /><published>2026-05-19T05:00:00+00:00</published><updated>2026-05-19T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/05/19/keyboardkit-10-5</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/05/19/keyboardkit-10-5"><![CDATA[<p>KeyboardKit 10.5 is out! This release adds Arabic (PC) support and adds new accessibility settings to increase the font weight and key height. It also adds new iOS 26.4 emojis, improves autocomplete, and much more.</p>

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

<h2 id="new-locale">New Locale</h2>

<p>KeyboardKit 10.5 adds support for 🇦🇪 Arabic (PC), which is a variant of the classic Arabic layout, with different keys and callout actions.</p>

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

<p>The <code class="language-plaintext highlighter-rouge">KeyboardController</code> protocol has a new <code class="language-plaintext highlighter-rouge">resetKeyboardInputType</code> function which is used by the system to disable emoji search when the text input moves.</p>

<h2 id="️-accessibility">♿️ Accessibility</h2>

<p>This version adds a new <code class="language-plaintext highlighter-rouge">KeyboardAccessibility</code> namespace, with new accessibility settings that let you adjust the font weight and button height.</p>

<h2 id="-autocomplete">💡 Autocomplete</h2>

<p>This version adds a new <code class="language-plaintext highlighter-rouge">additionalAutocompletions</code> dictionary, and adds more standard suggestions to <code class="language-plaintext highlighter-rouge">additionalAutocorrections</code>. This makes suggestions more accurate, and lets you register custom values.</p>

<p>For instance, the default autocompletions dictionary now contains the suggestion “he’ll” for “hell”. Unlike before, this manual addition will be a regular suggestion, and not an autocorrecting one.</p>

<p>The <code class="language-plaintext highlighter-rouge">Autocomplete.SettingsScreen</code> has a new toggle that can be used to hide the autocomplete toolbar. You can also toggle the <code class="language-plaintext highlighter-rouge">AutocompleteSettings.isToolbarEnabled</code> property with code.</p>

<p>Besides all this, the <code class="language-plaintext highlighter-rouge">Autocomplete.StandardAutocompleteService</code> has been improved to filter out any duplicate suggestions.</p>

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

<p>The <code class="language-plaintext highlighter-rouge">KeyboardLayout.DeviceConfiguration</code> type now supports defining custom <code class="language-plaintext highlighter-rouge">edgeInsets</code>, which is applied to the edge of the keyboard. The standard layouts are adjusted to use it on Liquid Glass iPad devices.</p>

<p>The standard keyboard layouts now place the keyboard switcher first on Liquid Glass iPad devices, which aligns better with the native Liquid Glass layouts.</p>

<h2 id="-localization">🌐 Localization</h2>

<p>The new <code class="language-plaintext highlighter-rouge">KeyboardLocale</code> namespace is used to contain all locale-specific types. This lets us use <code class="language-plaintext highlighter-rouge">Locale</code> for Foundation-specific extensions.</p>

<p>The native <code class="language-plaintext highlighter-rouge">Locale</code> has a new <code class="language-plaintext highlighter-rouge">.arabic_pc</code> locale, which adds Arabic (PC)-specific layouts and callouts to KeyboardKit.</p>

<h2 id="-emojis">😀 Emojis</h2>

<p>This version adds support for all new iOS 26.4 emojis - 🫪🧑‍🩰🫍🫈🛘🫯🪊🪎 - as well as skin tone support for two person emojis.</p>

<p>The <code class="language-plaintext highlighter-rouge">EmojiKeyboard</code> now supports skin tones in emoji search. The <code class="language-plaintext highlighter-rouge">KeyboardInputViewController</code> will now also cancels emoji search when the cursor moves.</p>

<h2 id="-proxy">📄 Proxy</h2>

<p>The <code class="language-plaintext highlighter-rouge">UITextDocumentProxy</code> has a new <code class="language-plaintext highlighter-rouge">moveTextInputCursorToRefreshContext(sleepInterval:)</code> extension, which can be used to move the cursor in a controlled way, to refresh the document context.</p>

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

<p>The <code class="language-plaintext highlighter-rouge">Keyboard.SettingsScreen</code> is moved to <code class="language-plaintext highlighter-rouge">KeyboardSettings</code> and <code class="language-plaintext highlighter-rouge">LocaleSettingsScreen</code> has been moved to <code class="language-plaintext highlighter-rouge">KeyboardLocale</code>.</p>

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

<p>The new version slightly increases the font weight for image and lowercase keys, and redesigns the content view of all swipe down-enabled keys to look a bit more like native.</p>

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

<p>KeyboardKit 10.5 adds support for a new locale, and adds new accessibility features. It also adds several small capabilities to the various types, polishes the design, and fixes some bugs.</p>

<p>For more details, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.5.0">KeyboardKit 10.5 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.5 is out! This release adds Arabic (PC) support and adds new accessibility settings to increase the font weight and key height. It also adds new iOS 26.4 emojis, improves autocomplete, and much more.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_5.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_5.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A Brand New KeyboardKit Website</title><link href="https://keyboardkit.com/blog/2026/05/18/a-brand-new-keyboardkit-website" rel="alternate" type="text/html" title="A Brand New KeyboardKit Website" /><published>2026-05-18T06:00:00+00:00</published><updated>2026-05-18T06:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/05/18/a-brand-new-keyboardkit-website</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/05/18/a-brand-new-keyboardkit-website"><![CDATA[<p>Today we launch a brand new version of the KeyboardKit website. The new site is the result of a collaboration with UX designer <a href="https://www.linkedin.com/in/lovisa-lindstaf/">Lovisa Lindstaf</a>, and we couldn’t be happier with the outcome.</p>

<h2 id="why-we-rebuilt">Why We Rebuilt</h2>

<p>The previous KeyboardKit website had a lot of information, but didn’t guide visitors to where they needed to go. Basic building blocks were stacked together without any clear structure or purpose.</p>

<p>This made it hard for us to add new content. With no clear structure to follow, new information had no natural home. Visitors felt that too, often struggling to understand the product and to find what they were looking for.</p>

<p>In contrast, the new site, as shown by Lovisa in her <a href="https://www.linkedin.com/posts/lovisa-lindstaf_big-milestone-moment-my-first-client-project-ugcPost-7460649891220922370-hNpK/">announcement video</a>, has a purpose with every section and page. This makes it easier for us to add content, and easier for visitors to find it.</p>

<h2 id="the-design-philosophy">The Design Philosophy</h2>

<p>For this project, Lovisa’s core design philosophy was to design for decision-making. That meant structuring the new site to serve both technical and business audiences, reducing friction, and building trust.</p>

<h3 id="guiding-dual-audiences">Guiding Dual Audiences</h3>

<p>The KeyboardKit site serves two distinct groups: developers (often coming from GitHub) who want to evaluate the technology, and decision-makers (CTO/CEO) who care about business value and commercial fit.</p>

<p>The new site structures information so developers get the technical details they need instantly, while decision-makers are presented with the business value up front.</p>

<h3 id="from-information-to-conversion">From Information to Conversion</h3>

<p>The new site communicates what KeyboardKit is and highlights the value it creates. By building natural paths toward both features and commercial plans, the site guides visitors to the information most relevant to them.</p>

<h3 id="reducing-cognitive-load">Reducing Cognitive Load</h3>

<p>By streamlining the information architecture, the new site makes it easier to find what you need. Its structure guides visitors through the content, and the new side menu makes long articles easier to navigate.</p>

<h3 id="establishing-professional-weight">Establishing Professional Weight</h3>

<p>For B2B clients, trust is everything. The new site moves from a “project feel” toward a business-grade finish that matches the ambitions of the product, and the expectations of the clients KeyboardKit wants to attract.</p>

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

<p>We hope you will love the new site as much as we do. We couldn’t have asked for a better collaboration. Make sure to reach out to <a href="https://www.linkedin.com/in/lovisa-lindstaf/">Lovisa</a> if you need help to improve your company or product website.</p>]]></content><author><name>danielsaidi</name></author><category term="general" /><summary type="html"><![CDATA[Today we launch a brand new version of the KeyboardKit website. The new site is the result of a collaboration with UX designer Lovisa Lindstaf, and we couldn’t be happier with the outcome.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0518/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0518/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.4 is out</title><link href="https://keyboardkit.com/blog/2026/04/08/keyboardkit-10-4" rel="alternate" type="text/html" title="KeyboardKit 10.4 is out" /><published>2026-04-08T05:00:00+00:00</published><updated>2026-04-08T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/04/08/keyboardkit-10-4</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/04/08/keyboardkit-10-4"><![CDATA[<p>KeyboardKit 10.4 is out! This release drastically improves the keyboard launch time and adds ways to work around the <a href="http://localhost:4000/blog/2026/03/02/ios-26-4-host-application-bundle-id-bug">breaking host application changes in iOS 26.4</a>, which remain in 26.5.</p>

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

<h2 id="keyboard-launch-time">Keyboard Launch Time</h2>

<p>This version improves the keyboard launch time, by making the keyboard controller postpone costly operations until the keyboard has appeared.</p>

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

<p>This version adjusts the <code class="language-plaintext highlighter-rouge">hostApplicationBundleId</code> logic to handle <a href="https://keyboardkit.com/blog/2026/03/02/ios-26-4-host-application-bundle-id-bug">the breaking changes in iOS 26.4</a>, which remain broken in the 26.5 betas.</p>

<p>While the host application bundle ID is broken, you should consider a UX workaround, for instance by letting your users pick a <code class="language-plaintext highlighter-rouge">HostApplication</code> with the new <code class="language-plaintext highlighter-rouge">HostApplication.Picker</code>. But if this truly cripples your app, you should consider filing a <a href="https://feedbackassistant.apple.com">feedback</a> or using a TSI (technical support incident).</p>

<h2 id="app">App</h2>

<p>This version adds a new <code class="language-plaintext highlighter-rouge">openMainApp</code> action that can open the main app from the keyboard, with an optional <code class="language-plaintext highlighter-rouge">reason</code>. The reason is persisted in a new <code class="language-plaintext highlighter-rouge">KeyboardAppContext</code>, which is available to the app.</p>

<p>For instance, launching the main app to start dictation will set the context reason to <code class="language-plaintext highlighter-rouge">dictation</code>. The main app can then check this property and if dictation is started, and show a message or toast that tells the user to tap the back arrow to return to the keyboard.</p>

<p>The <code class="language-plaintext highlighter-rouge">reason</code> is automatically reset when the main app is sent to the background, which means that any such message will automatically be hidden once the reason has served its purpose.</p>

<h2 id="autocomplete">Autocomplete</h2>

<p>The <code class="language-plaintext highlighter-rouge">Autocomplete.Toolbar</code> can now be set to scroll with the new <code class="language-plaintext highlighter-rouge">autocompleteToolbarScrollMode</code> view modifier and the new <code class="language-plaintext highlighter-rouge">Autocomplete.ToolbarScrollMode</code> enum.</p>

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

<p>Since the breaking host application changes in iOS 26.4 remain in 26.5, we should take this as a hint to design our keyboards to work around these limitations. KeyboardKit 10.4 therefore adds new ways to manage the host application and open the main app with a reason, to allow for better UX.</p>

<p>For complete details about all changes, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.4.0">KeyboardKit 10.4 release notes</a>. Upgrade today to take advantage of these new features and improvements.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="actions" /><category term="app" /><category term="autocomplete" /><category term="host-app" /><summary type="html"><![CDATA[KeyboardKit 10.4 is out! This release drastically improves the keyboard launch time and adds ways to work around the breaking host application changes in iOS 26.4, which remain in 26.5.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_4.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_4.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit - Brand Redesign In Progress</title><link href="https://keyboardkit.com/blog/2026/03/30/brand-redesign-in-progress" rel="alternate" type="text/html" title="KeyboardKit - Brand Redesign In Progress" /><published>2026-03-30T07:00:00+00:00</published><updated>2026-03-30T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/03/30/brand-redesign-in-progress</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/03/30/brand-redesign-in-progress"><![CDATA[<p>KeyboardKit is getting a new icon! We’re moving from a glowing keyboard key to an abstract design with two Ks on a gradient background that carries over from the old icon.</p>

<h2 id="the-previous-icon">The previous icon</h2>

<p>The previous icon has been with us for a while. Designed by digital artist <a href="https://matthewskiles.com">Matthew Skiles</a>, it added a glass-like, glowing design to the original, plain keyboard key design.</p>

<p><img src="/assets/icon-old/icon-header.png" alt="Old Icon" class="plain medium" /></p>

<p>While we absolutely loved this design, we have struggled with explaining what the A in the old icon stands for. All attempts to tweak it to better communicate KeyboardKit have been unsuccessful.</p>

<h2 id="the-new-product-icon">The new product icon</h2>

<p>The new icon design takes a more abstract approach. Rather than having a literal key, it places two discrete, K-like glass-shapes on top of the gradient background from the previous icon.</p>

<p><img src="/assets/icon/header.png" alt="New Icon" class="plain medium" /></p>

<p>This icon design lets us carry over the color identity from the original icon and stay true to our visual roots, while taking the brand in a new, exciting direction.</p>

<h2 id="app-icon-variants">App icon variants</h2>

<p>While the new KeyboardKit product icon is a colorful bundle of joy, we acknowledge that its colorful style can be distracting in certain contexts.</p>

<p>This is why we will tone it down for the <a href="/app">KeyboardKit app</a> - and instead let the same glass shapes be placed on a single color gradient.</p>

<div class="grid col4">
  <img src="/assets/icon/app-light.png" alt="App Icon - light" class="plain" />
  <img src="/assets/icon/app-dark.png" alt="App Icon - dark" class="plain" />
  <img src="/assets/icon/app-clear.png" alt="App Icon - clear" class="plain" />
  <img src="/assets/icon/app-tint.png" alt="App Icon - tint" class="plain" />
</div>

<p>This toned-down approach will let the KeyboardKit icon fit in better on the iOS home screen, while the original can still be allowed to pop in marketing material.</p>

<p>While this design is probably <em>too</em> plain, we will iterate on it to find something visually distintivtive for the iOS home screen, while at the same time let the app users switch to the colorful icon if they like.</p>

<h2 id="implementation">Implementation</h2>

<p>The new icon is a work in progress. We’re trying it out in the open rather than waiting for a perfect result behind closed doors, and we expect to tweak it as we see how it looks in different contexts.</p>

<p>As such, you may find that the previous icon is still being used in some places. We’ll update these as the rollout continues, and would love to hear what you think.</p>]]></content><author><name>danielsaidi</name></author><category term="general" /><summary type="html"><![CDATA[KeyboardKit is getting a new icon! We’re moving from a glowing keyboard key to an abstract design with two Ks on a gradient background that carries over from the old icon.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0330/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0330/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Case Study - BossAI Voice First Keyboard</title><link href="https://keyboardkit.com/blog/2026/03/06/tapling-case-study" rel="alternate" type="text/html" title="Case Study - BossAI Voice First Keyboard" /><published>2026-03-06T07:00:00+00:00</published><updated>2026-03-06T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/03/06/tapling-case-study</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/03/06/tapling-case-study"><![CDATA[]]></content><author><name>danielsaidi</name></author><category term="case-studies" /><summary type="html"><![CDATA[Meet Tapling - a small companion that lives in your keyboard’s suggestion bar and taps along while you type. Type normally and Tapling quietly keeps you company.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/case-studies/tapling/header.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/case-studies/tapling/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">iOS 26.4 Host Application Bug</title><link href="https://keyboardkit.com/blog/2026/03/02/ios-26-4-host-application-bundle-id-bug" rel="alternate" type="text/html" title="iOS 26.4 Host Application Bug" /><published>2026-03-02T05:00:00+00:00</published><updated>2026-03-02T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/03/02/ios-26-4-host-application-bundle-id-bug</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/03/02/ios-26-4-host-application-bundle-id-bug"><![CDATA[<p>A change has been discovered in the iOS 26.4 betas and RC, that causes the host application bundle ID to become empty. This causes different problems for different versions of KeyboardKit.</p>

<h2 id="the-issue">The Issue</h2>

<p>In the iOS 26.4 betas and RC, the <code class="language-plaintext highlighter-rouge">hostApplicationBundleId</code> value is empty. This affects a keyboard’s ability to identify in which app it’s currently used.</p>

<p>When the host application bundle ID becomes empty, keyboards may not be able to:</p>

<ul>
  <li>Provide app-specific customizations or behaviors.</li>
  <li>Implement context-aware features that depend on knowing the host app.</li>
  <li>Navigate back to the keyboard from the main application, during dictation.</li>
</ul>

<p>Many keyboard developers, including those not using KeyboardKit, have reported encountering this problem, which is caused by private APIs being changing in iOS.</p>

<h2 id="what-we-know">What We Know</h2>

<p>The issue has is documented tracked in the KeyboardKit GitHub repository. For more information, discussions, and updates on this issue, please visit <a href="https://github.com/KeyboardKit/KeyboardKit/issues/1014">this bug report</a>.</p>

<h2 id="keyboardkit-implications">KeyboardKit Implications</h2>

<p>This iOS 26.4 change will affect KeyboardKit in different ways, based on which version you’re using.</p>

<ul>
  <li>
    <p>KeyboardKit 10.2.1 and earlier uses Objective-C to parse the host application information. This approach <em>crashes</em> when the bundle information is missing.</p>
  </li>
  <li>
    <p>KeyboardKit 10.2.2 and later uses Swift to parse the host application information. This is more robust and will not crash, but the bundle identifier will be <em>empty</em>.</p>
  </li>
</ul>

<p>It’s very important that you promptly upgrade to KeyboardKit 10.2.2 or later to avoid this crash.</p>

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

<p>While we look at alternatives, or until Apple issues a fix, developers experiencing this issue should:</p>

<ul>
  <li>Upgrade to KeyboardKit 10.2.2 or later.</li>
  <li>Implement graceful fallbacks when the bundle ID is empty.</li>
  <li>Avoid relying on the host application for critical functionality.</li>
  <li>Monitor the <a href="https://github.com/KeyboardKit/KeyboardKit/issues/1014">GitHub issue</a> for more information and updates.</li>
</ul>

<p>We’ll continue monitoring the situation and will update you as more information becomes available or when Apple releases a fix. Please share any findings in this issue.</p>

<h2 id="reporting-your-problems-to-apple">Reporting your problems to Apple</h2>

<p>We urge the community to report this problem to Apple, using the <a href="https://feedbackassistant.apple.com">Feedback Assistant</a>. If you do, consider referring them to our feedback with the <code class="language-plaintext highlighter-rouge">FB22247647</code> ID.</p>

<h3 id="our-bug-report">Our bug report</h3>

<p>This is a copy of the bug report that we have reported to Apple, using the Feedback Assistant:</p>

<p><strong>OBS!</strong> We’re fully aware that this bug report refers to private APIs, which you take no responsibility for and strongly discourages people to use. However, being able to identify a custom keyboard’s host application is critical for custom keyboard developers, to be able to tailor the UX and features to fit the currently active app, and to be able to smoothly navigate back to the keyboard from the main app. This feedback shares what has stopped working, with the hopes that you can reverse the removal, or replace it with a proper, public API.</p>

<p><strong>PROBLEM:</strong>
We have started noticing crashes in iOS 26.4, that are caused by a private API that has been used by keyboard extensions to resolve the bundle ID of the host application that is currently using the keyboard. The reason for the crash is that the last steps of resolving the bundle ID has started returning <code class="language-plaintext highlighter-rouge">nil</code> in 26.4. This caused a crash in apps that used old Objective-C ways to try to parse the nil value.</p>

<p><strong>FIXING THE CRASH:</strong> 
The attached code below uses a newer approach, which uses Swift to parse the string. This code doesn’t crash, but it still returns <code class="language-plaintext highlighter-rouge">nil</code> as bundle ID.</p>

<p><strong>IMPLICATIONS:</strong> 
When the host application bundle ID becomes <code class="language-plaintext highlighter-rouge">nil</code>, developers are no longer able to identify the host application. This causes severe problems for keyboard developers that tailor the keyboard functionality to the host application, or need the host application ID for critical features. While we understand that you may want to remove or change private APIs over time, this particular change will strongly affect all custom keyboards and lead to a much worse user experience. Some keyboards will be severely crippled by not being able to access the host application bundle ID.</p>

<p><strong>SUGGESTION:</strong>
Due to the severe implications of this change, we ask you to reverse the removal that causes this to return NIL, or replace it with a proper, public API to let custom keyboard developers identify the host application in a safe manner. You can require Full Access and limit the capability to the <code class="language-plaintext highlighter-rouge">UIInputController</code>.</p>]]></content><author><name>danielsaidi</name></author><category term="apple-bugs" /><summary type="html"><![CDATA[A change has been discovered in the iOS 26.4 betas and RC, that causes the host application bundle ID to become empty. This causes different problems for different versions of KeyboardKit.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0302/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0302/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Case Study - BossAI Voice First Keyboard</title><link href="https://keyboardkit.com/blog/2026/02/18/boss-ai-case-study" rel="alternate" type="text/html" title="Case Study - BossAI Voice First Keyboard" /><published>2026-02-18T07:00:00+00:00</published><updated>2026-02-18T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/02/18/boss-ai-case-study</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/02/18/boss-ai-case-study"><![CDATA[]]></content><author><name>danielsaidi</name></author><category term="case-studies" /><summary type="html"><![CDATA[Meet BossAI - a voice-first AI keyboard that transforms how you use your apps. Speak naturally, get polished text. Give a command, get intelligent responses. All without leaving your conversation.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/case-studies/boss-ai/header.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/case-studies/boss-ai/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>