<?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-04-08T16:31:13+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">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-beta.1">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" /><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>

<p><img src="/assets/blog/26/0330/image.jpg" alt="Post Image" /></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" width="300" class="plain" /></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" width="300" class="plain" /></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">New 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="New 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> type.</p>]]></content><author><name>danielsaidi</name></author><category term="ios-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">New 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="New 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><entry><title type="html">KeyboardKit 10.3</title><link href="https://keyboardkit.com/blog/2026/02/13/keyboardkit-10-3" rel="alternate" type="text/html" title="KeyboardKit 10.3" /><published>2026-02-13T05:00:00+00:00</published><updated>2026-02-13T05:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/02/13/keyboardkit-10-3</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/02/13/keyboardkit-10-3"><![CDATA[<p>KeyboardKit 10.3 is out! This release introduces on-device next word prediction, significantly faster license validation, and faster layout calculations. Let’s explore what’s new!</p>

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

<h2 id="keyboard-essentials">Keyboard Essentials</h2>

<p>The <code class="language-plaintext highlighter-rouge">KeyboardInputViewController</code> gains a new <code class="language-plaintext highlighter-rouge">viewWillSetupKeyboardKit()</code> function, providing  you with better control over the keyboard setup lifecycle.</p>

<p>This new function allows for more precise timing when configuring the keyboard, and avoids any side-effects of overriding <code class="language-plaintext highlighter-rouge">viewDidLoad</code> and failing to call <code class="language-plaintext highlighter-rouge">super.viewDidLoad()</code>.</p>

<h2 id="on-device-next-word-prediction">On-Device Next Word Prediction</h2>

<p>KeyboardKit 10.3 brings support for local, on-device next word prediction using Apple’s Foundation Models. This is available on iPhone 15 Pro and later devices running iOS 26.1 or higher.</p>

<p>The new <code class="language-plaintext highlighter-rouge">Autocomplete.NextWordPredictionMethod.local</code> method has been added to make it easy to enable this functionality with code or from the settings screen. This method is enabled by default.</p>

<p>The next word prediction in <code class="language-plaintext highlighter-rouge">Autocomplete.SettingsScreen</code> has been redesigned to better showcase this new option, making it easier for developers to configure and for users pick it manually.</p>

<h2 id="faster-license-validation">Faster License Validation</h2>

<p>KeyboardKit Pro license validation has been significantly optimized in this release. KeyboardKit now validates licenses much faster, dramatically reducing the flickering that could occur during keyboard initialization. This improvement creates a smoother experience when your keyboard first appears.</p>

<p>Additionally, the <code class="language-plaintext highlighter-rouge">Keyboard.ToggleToolbar</code> now displays the base toolbar view even when no license is registered, to provide a nice fallback in case of license expiration.</p>

<h2 id="layout-improvements">Layout Improvements</h2>

<p>This release brings enhancements to keyboard layout rendering. The <code class="language-plaintext highlighter-rouge">standardPhone</code> configuration has been updated to use a 51-point row height in iOS 26, to match Apple’s updated designs.</p>

<p>Layout caching is now enabled by default, and has been converted from an experiment to a setting. This caching mechanism improves rendering performance by storing computed layouts, resulting in faster keyboard display and reduced computational overhead during layout calculations.</p>

<h2 id="settings-and-developer-tools">Settings and Developer Tools</h2>

<p>A new <code class="language-plaintext highlighter-rouge">isPredictiveTextVisualizationActive</code> setting has been added to help developers verify that predictive text features are working correctly. This developer-focused setting provides visibility into the prediction system, making debugging and validation easier during development.</p>

<h2 id="experimental-features">Experimental Features</h2>

<p>The experiment engine has been refactored for easier use. The <code class="language-plaintext highlighter-rouge">Experiment</code> type now provides all you need to get and toggle experiments, and <code class="language-plaintext highlighter-rouge">Experiments</code> has been reduced to a plain namespace.</p>

<h2 id="bug-fixes">Bug Fixes</h2>

<p>This version includes some bug fixes. For instance, the <code class="language-plaintext highlighter-rouge">Keyboard.LocaleSettingsScreen</code> now handles locale changes more reliably, preventing edge cases where changes could behave unexpectedly.</p>

<p>Additionally, the keyboard now performs autocomplete more reliably on launch, ensuring users see suggestions immediately when they begin typing.</p>

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

<p>KeyboardKit 10.3 brings powerful new capabilities with on-device next word prediction, significant performance improvements with faster license validation and layout caching, and more settings and customization options. These improvements make KeyboardKit more capable and performant.</p>

<p>For complete details about all changes, see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.3.0">KeyboardKit 10.3.0 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="autocomplete" /><category term="feedback" /><category term="layout" /><category term="licenses" /><category term="settings" /><summary type="html"><![CDATA[KeyboardKit 10.3 is out! This release introduces on-device next word prediction, significantly faster license validation, and faster layout calculations. Let’s explore what’s new!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_3.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_3.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">New Case Study - GIF AI Custom GIF Keyboard</title><link href="https://keyboardkit.com/blog/2026/02/09/gif-ai-case-study-copy" rel="alternate" type="text/html" title="New Case Study - GIF AI Custom GIF Keyboard" /><published>2026-02-09T07:00:00+00:00</published><updated>2026-02-09T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/02/09/gif-ai-case-study%20copy</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/02/09/gif-ai-case-study-copy"><![CDATA[]]></content><author><name>danielsaidi</name></author><category term="case-studies" /><summary type="html"><![CDATA[Say hi to GIF AI Keyboard - an innovative keyboard that lets you generate custom GIFs on-the-fly and drop them directly into your conversations, without ever leaving your favorite messaging app.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/case-studies/gif-ai/header.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/case-studies/gif-ai/header.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">KeyboardKit 10.2</title><link href="https://keyboardkit.com/blog/2026/01/09/keyboardkit-10-2" rel="alternate" type="text/html" title="KeyboardKit 10.2" /><published>2026-01-09T06:00:00+00:00</published><updated>2026-01-09T06:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/01/09/keyboardkit-10-2</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/01/09/keyboardkit-10-2"><![CDATA[<p>KeyboardKit 10.2 is out! This release adds a <a href="/blog/2026/01/03/a-brand-new-keyboard-dictation-experience">new dictation engine</a> and new settings, as well as bug fixes and improvements.</p>

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

<h2 id="-dictation">🎤 Dictation</h2>

<p>KeyboardKit 10.2 has a new <code class="language-plaintext highlighter-rouge">.keyboard</code> dictation method that makes it possible to perform dictation directly within the keyboard, with an automated app-sync only when needed.</p>

<p>In-keyboard dictation method will only open the main app to start dictation if needed, then navigate back to the keyboard to perform dictation, keeping an open connection to the dictation engine.</p>

<p><img src="/assets/blog/26/0109//dictation.jpg" alt="In-keyboard dictation screenshot" /></p>

<p>In-keyboard dictation is currently opt-in. Follow the <a href="https://docs.keyboardkit.com/documentation/keyboardkit/developer-dictation">dictation developer guide</a> to set up dictation, then enable keyboard dictation with the dictation settings or the <code class="language-plaintext highlighter-rouge">.keyboardDictation</code> experiment.</p>

<p>In-keyboard dictation is the recommended dictation method moving forward. It has new views that provide a great user experience, like <code class="language-plaintext highlighter-rouge">Dictation.ProgressView</code> and <code class="language-plaintext highlighter-rouge">Dictation.VolumeVisualizer</code>.</p>

<p>The <code class="language-plaintext highlighter-rouge">Dictation</code> feature also has new tools like the new <code class="language-plaintext highlighter-rouge">Dictation.VolumeRecorder</code>. <a href="/pro">KeyboardKit Pro</a> unlocks all required tools to easily set up dictation.</p>

<p>The dictation engine supports the following locales, which means you can use it with languages that are not yet supported by the keyboard engine:</p>

<p>Arabic (ar-SA), Cantonese (yue-CN), Catalan (ca-ES), Chinese (zh-CN), Chinese (zh-HK), Chinese (zh-TW), Croatian (hr-HR), Czech (cs-CZ), Danish (da-DK), Dutch (nl-BE), Dutch (nl-NL), English (en-AE), English (en-AU), English (en-CA), English (en-GB), English (en-ID), English (en-IE), English (en-IN), English (en-NZ), English (en-PH), English (en-SA), English (en-SG), English (en-US), English (en-ZA), Finnish (fi-FI), French (fr-BE), French (fr-CA), French (fr-CH), French (fr-FR), German (de-AT), German (de-CH), German (de-DE), Greek (el-GR), Hebrew (he-IL), Hindi (hi-IN), Hindi (hi-IN-translit), Hindi (hi-Latn), Hungarian (hu-HU), Indonesian (id-ID), Italian (it-CH), Italian (it-IT), Japanese (ja-JP), Korean (ko-KR), Malay (ms-MY), Norwegian Bokmål (nb-NO), Polish (pl-PL), Portuguese (pt-BR), Portuguese (pt-PT), Romanian (ro-RO), Russian (ru-RU), Shanghainese (wuu-CN), Slovak (sk-SK), Spanish (es-419), Spanish (es-CL), Spanish (es-CO), Spanish (es-ES), Spanish (es-MX), Spanish (es-US), Swedish (sv-SE), Thai (th-TH), Turkish (tr-TR), Ukrainian (uk-UA), Vietnamese (vi-VN)</p>

<h2 id="️-keyboard">⌨️ Keyboard</h2>

<p>KeyboardKit 10.2 adds a new <code class="language-plaintext highlighter-rouge">.keyboardReplacementOverlay(...)</code> modifier that can be used to easily replace the keyboard view with an equally sized replacement whenever a boolean condition is met.</p>

<h2 id="-experiments">🧪 Experiments</h2>

<p>Experiment has a new <code class="language-plaintext highlighter-rouge">.keyboardDictation</code> experiment that affects the <code class="language-plaintext highlighter-rouge">.keyboardMethod</code> dictation setting. You can use this to easily toggle keyboard dictation on and off.</p>

<p>Experiments also has a new <code class="language-plaintext highlighter-rouge">Experiments.SettingsScreen</code> that can be used to enable experiments. The <code class="language-plaintext highlighter-rouge">KeyboardApp.HomeScreen</code> has a link to this screen, that is hidden by default.</p>

<h2 id="-feedback">🔉 Feedback</h2>

<p>The <code class="language-plaintext highlighter-rouge">FeedbackContext</code> class has a new <code class="language-plaintext highlighter-rouge">isHapticFeedbackAvailable</code> property, which is only true for devices with haptic feedback.</p>

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

<p>There are many new settings, like the new <code class="language-plaintext highlighter-rouge">isCharacterPreviewEnabled</code> and <code class="language-plaintext highlighter-rouge">isPredictiveTextEnabled</code> keyboard settings, and <code class="language-plaintext highlighter-rouge">isNextCharacterPredictionEnabled</code> autocomplete setting.</p>

<p>The various settings screens have new toggles and structures, to make them provide more options.</p>

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

<p>KeyboardKit 10.2 adds many new features and improvements. There are also a bunch of bug fixes and general improvements. For more info, please see the <a href="https://github.com/KeyboardKit/KeyboardKit/releases/tag/10.2.0">KeyboardKit 10.2 release notes</a>.</p>]]></content><author><name>danielsaidi</name></author><category term="releases" /><category term="dictation" /><category term="experiments" /><category term="settings" /><summary type="html"><![CDATA[KeyboardKit 10.2 is out! This release adds a new dictation engine and new settings, as well as bug fixes and improvements.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/versions/10_2.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/versions/10_2.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">A brand new keyboard dictation experience</title><link href="https://keyboardkit.com/blog/2026/01/03/a-brand-new-keyboard-dictation-experience" rel="alternate" type="text/html" title="A brand new keyboard dictation experience" /><published>2026-01-03T07:00:00+00:00</published><updated>2026-01-03T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2026/01/03/a-brand-new-keyboard-dictation-experience</id><content type="html" xml:base="https://keyboardkit.com/blog/2026/01/03/a-brand-new-keyboard-dictation-experience"><![CDATA[<p>KeyboardKit 10.2 will feature a brand new dictation experience: in-keyboard dictation. This is a huge improvement for keyboard-based apps that rely heavily on dictation.</p>

<h2 id="the-current-dictation-method">The current dictation method</h2>

<p>As you may know, iOS keyboard extensions are strictly limited by Apple and can’t do as much as you may need. For instance, dictation is hard since a keyboard can’t access the device microphone.</p>

<p>KeyboardKit currently works around this strict limitation by letting the keyboard open the main app to start and perform dictation, then navigate back to the keyboard to apply the result.</p>

<p>While this works fairly well, it’s a lackluster experience for keyboards that rely heavily on dictation. This is why we are happy to announce a brand new dictation method: in-keyboard dictation.</p>

<h2 id="the-new-dictation-method">The new dictation method</h2>

<p>In-keyboard dictation method will only open the main app to start dictation if needed, then navigate back to the keyboard to perform dictation, keeping an open connection to the dictation engine.</p>

<p><img src="/assets/blog/26/0103//preview.jpg" alt="In-keyboard dictation screenshot" width="350" /></p>

<p>The dictation engine will stay open as long as the main app is alive. This lets the user perform many subsequent dictation operations without having to open the main app, which is a big improvement.</p>

<p>Together with this experience comes a new <code class="language-plaintext highlighter-rouge">Dictation.ProgressView</code> which is automatically added to the main <code class="language-plaintext highlighter-rouge">KeyboardView</code> while dictation is active, as well as a <code class="language-plaintext highlighter-rouge">Dictation.Indicator</code>.</p>

<p>When applying a dictation result, the keyboard will put dictation in idle mode instead of stopping it. This keeps the dictation going, while stopping it from writing to the observed result.</p>

<h2 id="an-improved-user-experience">An improved user experience</h2>

<p>The user experience will be greatly improved, since the keyboard will only open the main app <em>one time</em>, instead of each time the user wants to dictate.</p>

<p>The result is a seamless dictation experience where the user can start dictation many times without leaving the keyboard. This makes the dictation feature much more useful.</p>

<p>The new progress and indicator views gives you and the user full control. Users can stop dictation at any time, and you can add these views wherever you need them, and customize them freely.</p>

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

<p>The new dictation experience will be available as a beta experiment in KeyboardKit 10.2, which will be released later in January.</p>

<p>Don’t hesitate to reach out to discuss how this can help you improve your keyboard-based product.</p>]]></content><author><name>danielsaidi</name></author><category term="pro" /><category term="dictation" /><summary type="html"><![CDATA[KeyboardKit 10.2 will feature a brand new dictation experience: in-keyboard dictation. This is a huge improvement for keyboard-based apps that rely heavily on dictation.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/blog/26/0103/image.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/blog/26/0103/image.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Black Friday 2025</title><link href="https://keyboardkit.com/blog/2025/11/25/black-friday" rel="alternate" type="text/html" title="Black Friday 2025" /><published>2025-11-25T07:00:00+00:00</published><updated>2025-11-25T07:00:00+00:00</updated><id>https://keyboardkit.com/blog/2025/11/25/black-friday</id><content type="html" xml:base="https://keyboardkit.com/blog/2025/11/25/black-friday"><![CDATA[<p>KeyboardKit’s Black Friday 2025 Deal gives you 50% off on your first KeyboardKit Pro purchase! This means that you can save 50% of an entire year if <a href="/pro">sign up for KeyboardKit Pro today</a>!</p>

<p><img src="/assets/headers/promos/bf25.jpg" alt="Black Friday Banner" /></p>

<p>This amazing deal is valid through November, and works with the Basic, Silver, <em>and</em> Gold tier. This means that you can save up to <a href="/pro">$2.500</a> if you sign up for the <a href="/pro">Yearly Gold Plan</a>!</p>

<p>Enter the following discount code in the <a href="https://kankoda.gumroad.com/l/keyboardkitpro">checkout flow</a>, to apply the discount to your Pro purchase:</p>

<div class="box pro">
  BLACK-FRIDAY-2025
</div>

<p>There has never been a better time to go Pro! See the <a href="/pro">KeyboardKit Pro info page</a> for more details.</p>

<h2 id="network--community">Network &amp; Community</h2>

<p>We are so happy to have an amazing network of friends and partners. See <a href="https://blackfridaydeals.dev/deals/swift/#keyboard-kit-pro-list">BlackFridayDeals.dev</a> for other amazing Black Friday deals from the community.</p>]]></content><author><name>danielsaidi</name></author><category term="promos" /><summary type="html"><![CDATA[KeyboardKit’s Black Friday 2025 Deal gives you 50% off on your first KeyboardKit Pro purchase! This means that you can save 50% of an entire year if sign up for KeyboardKit Pro today!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://keyboardkit.com/assets/headers/promos/bf25.jpg" /><media:content medium="image" url="https://keyboardkit.com/assets/headers/promos/bf25.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>