No description
Find a file
2026-06-24 16:09:06 +08:00
dicts Phase 3: dictionary loading pipeline + binary embedding 2026-06-22 21:26:23 +08:00
dts Implement Phase 2: real platform shims + behavior driver + steno key defines 2026-06-22 21:02:14 +08:00
include Cleanup: remove dead files from rapid iteration 2026-06-23 00:29:06 +08:00
src Fix linker: disable ortho cache, stub CancelAllStenoKeys, stub flash, fix C linkage for raise_zmk_keycode_state_changed 2026-06-23 00:06:57 +08:00
tools/dict_compiler Phase 3b: working dict compiler + dict download script 2026-06-22 21:52:57 +08:00
zephyr Initial skeleton: ZMK module structure + Javelin submodule + stub shims 2026-06-22 20:49:01 +08:00
.gitignore Auto-download + compile Plover dict during build 2026-06-23 00:47:15 +08:00
CMakeLists.txt Fix dict embedding: scope source property to app target directory 2026-06-24 15:43:00 +08:00
Kconfig Fix: Plover + Lapwing are additive, not exclusive 2026-06-23 00:58:17 +08:00
README.md Add key bindings reference link to README 2026-06-24 16:09:06 +08:00

zmk-javelin-steno

ZMK module that integrates the Javelin steno engine for on-board stenography on ZMK keyboards.

Status

Work in progress. Engine compiles and initializes. Dictionary auto-downloads and compiles during build. Requires sufficient flash for the compiled dictionary (~3-4MB for full Plover/Lapwing). Currently focused on nRF52840 boards with 1MB flash (nice_nano_v2). Not yet tested on boards with more flash or external QSPI.

Requirements

  • ZMK v0.3.0
  • nRF52840-based board (nice_nano_v2, etc.)
  • Split keyboard: steno runs on central half only

Setup

Add to your west.yml:

manifest:
  remotes:
    - name: afiqzudinhadi
      url-base: https://github.com/afiqzudinhadi
    - name: jthlim
      url-base: https://github.com/jthlim
  projects:
    - name: zmk-javelin-steno
      remote: afiqzudinhadi
      revision: main
    - name: javelin-steno
      remote: jthlim
      revision: main
      path: zmk-javelin-steno/javelin

Add to your .conf:

CONFIG_ZMK_JAVELIN_STENO=y
CONFIG_ZMK_JAVELIN_STENO_DICT_PLOVER=y
CONFIG_CPLUSPLUS=y
CONFIG_LIB_CPLUSPLUS=y
CONFIG_HEAP_MEM_POOL_SIZE=32768

Add to your .keymap (see steno_keys.h for all available key bindings):

#include <dt-bindings/zmk/javelin_steno.h>
#include <behaviors/javelin_steno.dtsi>

steno_layer {
    bindings = <
        &javsteno STENO_S1  &javsteno STENO_TL  &javsteno STENO_PL ...
    >;
};

Known Issues

  • Plover and Lapwing dictionaries exceed nRF52840 flash (1MB). Dictionary embedding works but linker rejects due to flash overflow.
  • Boards with external QSPI flash (like the original Javelin hardware) would not have this limitation.

License

This module is a bridge layer. The Javelin steno engine itself is licensed under PolyForm Noncommercial 1.0.0.