KeyboardKit lets you create amazing custom keyboards with a few lines of code, using Swift & SwiftUI.
KeyboardKit extends Apple's limited keyboard APIs with more capabilities. KeyboardKit Pro extends further by unlocking localized keyboards, autocomplete, an emoji keyboard, AI support, themes, and much more.
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.
The easiest way to set up KeyboardKit is to first create a KeyboardApp
value for your app:
extension KeyboardApp {
static var keyboardKitDemo: KeyboardApp {
.init(
name: "KeyboardKit",
licenseKey: "your-key-here", // Sets up KeyboardKit Pro!
appGroupId: "group.com.keyboardkit.demo", // Sets up App Group data sync
locales: .keyboardKitSupported, // Sets up the enabled locales
autocomplete: .init( // Sets up custom autocomplete
nextWordPredictionRequest: .claude(...) // Sets up AI-based prediction
),
deepLinks: .init(app: "kkdemo://", ...) // Defines how to open the app
)
}
}
Next, let your KeyboardController
inherit KeyboardInputViewController
instead of UIInputViewController
:
class KeyboardController: KeyboardInputViewController {}
This unlocks additional functions and capabilities, and injects services
and observable state
to the controller.
Next, override viewDidLoad()
and call setupPro(for:)
with your app value:
class KeyboardViewController: KeyboardInputViewControllerย {
override func viewDidLoad() {
super.viewDidLoad()
setup(for: .keyboardKitDemo) { result in
// If result is successful, KeyboardKit Pro is now active
// You can now customize your keyboard and tweak features
}
}
}
To replace or customize the standard KeyboardView
view, just override viewWillSetupKeyboardView()
and call setupKeyboardView(with:)
with the view that you want to use:
class KeyboardViewController: KeyboardInputViewControllerย {
override func 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: { $0.view }
)
}
}
}
To set up your main app with the same keyboard configuration, just wrap the content view in a KeyboardAppView
:
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
KeyboardAppView(for: .keyboardKitDemo) {
ContentView()
}
}
}
}
For more information, see the getting started guide and essentials articles.
KeyboardKit supports 71 keyboard-specific locales:
๐บ๐ธ ๐ฆ๐ฑ ๐ฆ๐ช ๐ฆ๐ฒ ๐ง๐พ ๐ง๐ฌ ๐ฆ๐ฉ ๐ณ๏ธ ๐ณ๏ธ ๐ญ๐ท
๐จ๐ฟ ๐ฉ๐ฐ ๐ณ๐ฑ ๐ง๐ช ๐ฆ๐บ ๐จ๐ฆ ๐ฌ๐ง ๐บ๐ธ ๐ช๐ช ๐ซ๐ด
๐ต๐ญ ๐ซ๐ฎ ๐ซ๐ท ๐จ๐ฆ ๐ง๐ช ๐จ๐ญ ๐ฌ๐ช ๐ฉ๐ช ๐ฆ๐น ๐จ๐ญ
๐ฌ๐ท ๐บ๐ธ ๐ฎ๐ฑ ๐ญ๐บ ๐ฎ๐ธ ๐ณ๏ธ ๐ฎ๐ฉ ๐ฎ๐ช ๐ฎ๐น ๐ฐ๐ฟ
๐น๐ฏ ๐น๐ฏ ๐น๐ฏ ๐ฑ๐ป ๐ฑ๐น ๐ฒ๐ฐ ๐ฒ๐พ ๐ฒ๐น ๐ฒ๐ณ ๐ณ๏ธ
๐ณ๐ด ๐ณ๐ด ๐ฎ๐ท ๐ต๐ฑ ๐ต๐น ๐ง๐ท ๐ท๐ด ๐ท๐บ ๐ท๐ธ ๐ท๐ธ
๐ธ๐ฐ ๐ธ๐ฎ ๐ช๐ธ ๐ฆ๐ท ๐ฒ๐ฝ ๐ธ๐ช ๐ฐ๐ช ๐น๐ท ๐บ๐ฆ ๐บ๐ฟ
๐ด๓ ง๓ ข๓ ท๓ ฌ๓ ณ๓ ฟ
KeyboardKit only includes localized strings, whileย KeyboardKit Pro unlocks localized keyboards, layouts, callouts and behaviors for all supported locales.
KeyboardKit provides a free, open-source keyboard engine. KeyboardKit Pro unlocks more powerful pro features.
- ๐ฑ Essentials - Essential keyboard utilities, models, services & views.
- โจ๏ธ Essentials-KeyboardView - Render a native-looking, customizable iOS keyboard.
- ๐ฅ Actions - Trigger & handle keyboard-related actions.
- ๐ฑ App - Define and set up your app, settings, etc.
- ๐ก Autocomplete - Perform autocomplete as the user types.
- ๐ฏ Callouts - Show input & secondary action callouts.
- ๐ฅ๏ธ Device - Identify device type, device capabilities, etc.
- ๐ Emojis - Emojis, categories, versions, skin tones, etc.
- ๐ Feedback - Trigger audio & haptic feedback with ease.
- ๐ Gestures - Handle a rich set of gestures on any key.
- ๐ฃ Layout - Define and customize dynamic keyboard layouts.
- ๐ Localization - Localize your keyboard in 71 locales.
- ๐บ๏ธ Navigation - Open urls and other apps from the keyboard.
- ๐ Previews - Extensive SwiftUI preview support.
- ๐ Proxy - Extend the text document proxy with more capabilities.
- โ๏ธ Settings - Provide keyboard settings & link to System Settings.
- ๐ฉบ Status - Detect if a keyboard is enabled, has full access, etc.
- ๐จ Styling - Style your keyboard to great extent.
- ๐ฑ Essentials - More essential tools, previews, toolbars, etc.
- โจ๏ธ Essentials-KeyboardView - Make the keyboard view do a lot more.
- ๐ค 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 thorough getting-started guide, a detailed article for each feature, 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.
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 keyboard settings 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
- E-mail: info@keyboardkit.com
- Bluesky: @keyboardkit.bsky.social
- Mastodon: @keyboardkit@techhub.social
KeyboardKit Pro requires a license to be used. You can sign up on the KeyboardKit website or the Gumroad store.