Getting started
Introduction
What PressboardKit is, what it deliberately is not, and how the five modules divide the work.
PressboardKit is a keyboard engine for iOS, written in Swift 6 and shipped as a Swift Package. It renders a keyboard that is meant to be indistinguishable from the one Apple ships — the same metrics, the same key-pop, the same callouts, the same timing — and it exposes every one of those behaviours as a parameter you can turn off.
The design promise is one sentence: the defaults reproduce native, so you opt out of a behaviour rather than opting in to get parity.
What it is
- A SwiftUI render view,
PressboardKeyboardView, that draws a resolved layout and reports user intents asKeyboardActionvalues. - A set of pure, testable text helpers — the shift state machine, auto-capitalisation, smart punctuation, delete-by-word, autocorrection, arithmetic evaluation, swipe decoding — that your host calls before it touches the document.
- An optional batteries-included assembly,
PressboardKitApp, which wires all of that together behind aUIInputViewControllersubclass. Most integrations should start here.
What it is not
- It does not own your text document. The engine tells you what the user did; you decide what to insert or delete. That is what keeps it host-agnostic, and it is also what lets you intercept anything before it lands.
- It has no dependency on any host app. You inject the theme, the suggestion source and the settings. The kit imports none of your code.
- It is not a UI kit. There is one visual target — the native iOS keyboard — and the styling seam exists so you can deviate from it deliberately, not so you have to rebuild it.
- It does not ship a speech recogniser. The dictation key is a key; you provide the speech-to-text behind it.
The modules
The package splits into five products so a keyboard extension links only what it needs. That matters more here than in an app: an extension lives on a fraction of an app’s memory, so autocomplete and emoji are separable on purpose.
| Product | Contains |
|---|---|
PressboardKit |
The core engine: the render view, layout state, callouts, shift and caps, the spacebar cursor drag, feedback, and all text-transform logic. |
PressboardKitLayouts |
StandardLayoutResolver and the layout data tables, including the QWERTY, QWERTZ, AZERTY, Dvorak and Colemak arrangements. |
PressboardKitAutocomplete |
DictionarySuggestionProvider, the layered spell checker, and the bundled frequency lists. Optional. |
PressboardKitEmoji |
The emoji panel: catalog, skin tones, recents, full-text search. Optional. |
PressboardKitApp |
PressboardController, PressboardRootView and PressboardInputViewController — the assembled keyboard. Depends on all four above. |
Adding a language is a data-table change in PressboardKitLayouts, not an engine change.
KeyboardLocale currently carries 73 cases.
How the pieces fit
UIInputViewController (yours)
│ hosts
▼
UIHostingController( PressboardKeyboardView ) ← draws the resolved layout
│ onAction: KeyboardAction
▼
Host model ── KeyboardContext ──► StandardLayoutResolver ──► layout
│ helper logic (shift, auto-cap, autocorrect, …)
▼
textDocumentProxy (insert / delete / move caret)
PressboardController in PressboardKitApp is a complete implementation of that host model. If
you subclass PressboardInputViewController you get it without any wiring of your own; if you
assemble the keyboard yourself, it is the reference for what your own model has to do.
Requirements
- iOS 26 or later.
- Swift 6, Swift Package Manager.
- Xcode with a keyboard extension target in your app.
Haptic feedback needs Full Access (RequestsOpenAccess). The key-click sound does not — the
engine plays the system sound itself.
The engine is free — no charge for a licence — but it is licensed, not open source: you register an application and a licence is issued against it. Nothing in code is required today. See Licensing.
Next: Installation, then the quick start.