Skip to content
PressboardKit
IntroductionBrowse docs

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 as KeyboardAction values.
  • 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 a UIInputViewController subclass. 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.

Edit this page on GitHub