Clean-room ZMK steno engine with trie/DAWG dictionary
Find a file
afiqzudinhadi 2af45eafce Steno engine with BLE split-storage architecture
Full steno engine: chord detection, MPHF/trie dict lookup, Plover
formatter (18 commands), undo (ring buffer), HID + Unicode output.

Split-storage specific:
- BLE GATT service for dict queries (query/prefix/batch)
- LRU cache on central side (CONFIG_STENO_SPLIT_CACHE_SIZE)
- Dict embedded on peripheral, engine runs on central
- 3-way dispatch: split_dict / MPHF / simple trie

Build system: auto-fetch Plover dict, MPHF compiler with block
compression (~56K entries in 420KB), CMake integration.
2026-07-02 02:06:37 +08:00
dicts Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
dts Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
include/dt-bindings/zmk Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
src Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
tests Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
tools Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
zephyr Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
.gitignore Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
CMakeLists.txt Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
Kconfig Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
LICENSE Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00
README.md Steno engine with BLE split-storage architecture 2026-07-02 02:06:37 +08:00

zmk-steno-engine

Clean-room steno engine for ZMK keyboards. Split-storage architecture: full dictionary on peripheral (right) half, queried over BLE from central (left) half.

Status: Early development — not yet functional.

Architecture

ZMK splits run two nRF52840 halves connected via BLE. The right (peripheral) half has ~533KB free flash — enough for a full steno dictionary. The left (central) half runs the steno engine.

┌─────────────┐  BLE GATT query  ┌──────────────┐
│  Left half   │ ───────────────► │  Right half   │
│  (central)   │ ◄─────────────── │ (peripheral)  │
│              │   translation     │               │
│  Steno engine│                  │  Dictionary    │
│  LRU cache   │                  │  (~533KB)      │
└─────────────┘                  └──────────────┘

Key design decisions:

  • Dictionary stored on peripheral → no flash pressure on central
  • BLE GATT custom service for stroke→translation queries
  • LRU cache on central side → reduces BLE round-trips for common words
  • Orthographic rules run on central after dictionary lookup

License

PolyForm Noncommercial 1.0.0