KeyboardKit is a SwiftUI SDK that lets you create fully customizable keyboard extensions with a few lines of code.
KeyboardKit Pro extends KeyboardKit with features like autocomplete & autocorrect, AI support, a powerful emoji keyboard, dictation, themes, app templates, and much more.
Keyboard extensions can be used within all other apps on iOS, where text input is supported. It's the only way for your product or brand to directly interact with other apps on iOS. Don't miss out!
KeyboardKit Pro requires a license to be used. You can sign up on the KeyboardKit website or the Gumroad store.
KeyboardKit Pro can be installed with the Swift Package Manager:
https://github.com/KeyboardKit/KeyboardKitPro.git
Important
Unlike KeyboardKit, KeyboardKit Pro is a binary target and must only be linked to the app target.
To use KeyboardKit in a keyboard extension, just import KeyboardKitPro
and let your KeyboardViewController
inherit KeyboardInputViewController
instead of UIInputViewController
:
import KeyboardKitPro
class KeyboardController: KeyboardInputViewController {}
This gives you access to lifecycle functions like viewWillSetupKeyboardView
, observable state, services, etc.
The easiest way to set up KeyboardKit is to create a KeyboardApp
value that defines information for your app:
extension KeyboardApp {
static var keyboardKitDemo: Self {
.init(
name: "KeyboardKit",
licenseKey: "keyboardkitpro-license-key",
bundleId: "com.keyboardkit.demo",
appGroupId: "group.com.keyboardkit.demo",
deepLinks: .init(app: "kkdemo://")
)
}
}
To set up your keyboard, just override viewDidLoad
and call setupPro(for:)
with your KeyboardApp
:
class KeyboardViewController: KeyboardInputViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupPro(for: .keyboardKitDemo) { result in
// Use the result or handle the error if you want
}
}
}
This will make KeyboardSettings
sync data between the main app and its keyboard if an appGroupId
is defined, register a KeyboardKit Pro license if a licenseKey
is defined, set up dictation, deep links, etc.
To replace or customize the standard KeyboardView
keyboard, just override viewWillSetupKeyboardView
and call setupKeyboardView
with the view you want to use:
class KeyboardViewController: KeyboardInputViewController {
override func viewWillSetupKeyboardView() {
super.viewWillSetupKeyboardView()
setupKeyboardView { [weak self] controller in // <-- Use weak or unknowned self!
KeyboardView(
state: controller.state,
services: controller.services,
buttonContent: { $0.view },
buttonView: { $0.view },
collapsedView: { $0.view },
emojiKeyboard: { $0.view },
toolbar: { _ in MyCustomToolbar() }
)
}
}
}
To set up your main app with the same configuration, just wrap the root content view in a KeyboardAppView
:
import SwiftUI
import KeyboardKitPro
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
KeyboardAppView(for: .keyboardKitDemo) {
ContentView()
}
}
}
}
Setting up your app and keyboard with a KeyboardApp
will make settings sync between the two if an appGroupId
is defined, register your KeyboardKit Pro license if a licenseKey
is defined, set up dictation, deep links, etc.
For more information, see the getting started guide.
KeyboardKit supports 70 keyboard-specific locales:
🇺🇸 🇦🇱 🇦🇪 🇦🇲 🇧🇾 🇧🇬 🇦🇩 🏳️ 🇭🇷 🇨🇿
🇩🇰 🇳🇱 🇧🇪 🇦🇺 🇨🇦 🇬🇧 🇺🇸 🇪🇪 🇫🇴 🇵🇭
🇫🇮 🇫🇷 🇨🇦 🇧🇪 🇨🇭 🇬🇪 🇩🇪 🇦🇹 🇨🇭 🇬🇷
🇺🇸 🇮🇱 🇭🇺 🇮🇸 🏳️ 🇮🇩 🇮🇪 🇮🇹 🇰🇿 🇹🇯
🇹🇯 🇹🇯 🇱🇻 🇱🇹 🇲🇰 🇲🇾 🇲🇹 🇲🇳 🏳️ 🇳🇴
🇳🇴 🇮🇷 🇵🇱 🇵🇹 🇧🇷 🇷🇴 🇷🇺 🇷🇸 🇷🇸 🇸🇰
🇸🇮 🇪🇸 🇦🇷 🇲🇽 🇸🇪 🇰🇪 🇹🇷 🇺🇦 🇺🇿 🏴
KeyboardKit Pro unlocks localized keyboards, layouts, callouts and behaviors for all supported locales.
KeyboardKit comes packed with free, open-source features to help you build amazing custom keyboards:
KeyboardKit Pro extends KeyboardKit with Pro features:
- ⌨️ Essentials - More essential tools, previews, toolbars, etc.
- 🤖 AI - Features that are needed for AI.
- 📱 App - App-specific screens & views.
- 💡 Autocomplete - Local & remote autocomplete, next word prediction, etc.
- 🗯 Callouts - Localized callout actions for all supported locales.
- 🎤 Dictation - Dictate text from the keyboard.
- 😀 Emojis - A powerful emoji keyboard, search, etc.
- ⌨️ External - Auto-detect if an external keyboard is connected.
- 🏠 Host - Identify and open specific host applications.
- 🔣 Layout - Localized layouts for all supported locales.
- 🌐 Localization - Services & views for all supported locales.
- 👁 Previews - Keyboard & theme previews for in-app use.
- 📄 Proxy - Allow
UITextDocumentProxy
to read the full document. - 📝 Text - Allow users to type within the keyboard.
- 🍭 Themes - A theme engine with many pre-defined themes.
The online documentation has a detailed article for each feature, a thorough getting-started guide, code samples, etc. You can also build it from the source code to get better formatting.
The main repository has a demo app that shows how to set up the main keyboard app, show keyboard status, provide in-app settings, link to system settings, apply custom styles, etc.
The app has two keyboards - a Keyboard
that uses KeyboardKit and a KeyboardPro
that uses KeyboardKit Pro. Note that you need to enable Full Access for some features to work, like haptic feedback.
Important
The demo isn't code signed and can therefore not use an App Group to sync settings between the app and its keyboards. As such, the KeyboardPro
keyboard has settings screens in the keyboard as well.
If you want to try KeyboardKit without having to write any code or build the demo app from Xcode, the KeyboardKit app lets you try out many features by just downloading it from the App Store.
Feel free to reach out if you have questions or if you want to contribute in any way:
- Website: keyboardkit.com
- Mastodon: @[email protected]
- Twitter: @getkeyboardkit
- E-mail: [email protected]
KeyboardKit Pro requires a license to be used. You can sign up on the KeyboardKit website or the Gumroad store.