Skip to content

Font Packs & Resources

Firmware protocol v6+ per-bundle versioning & auto-flash

PolyKybd can draw an enormous range of glyphs on its keycaps — Latin of course, but also symbols, CJK, emoji, country flags and the glyph scripts. That glyph set is far too big to compile into the firmware image, so it’s split in two.

Resident fonts vs the font pack

  • Resident fonts are compiled into the firmware. They cover ASCII text and the essential UI chrome, so the keyboard always renders basic legends even with no font pack flashed.
  • The font pack lives in the keyboard’s external QSPI flash (the 4–6 MB resource region) and holds everything else. It’s flashed separately from the firmware and survives a firmware update.

The pack isn’t one big blob — it’s a set of independently-versioned bundles (symbols, Middle-Eastern, syllabic, Asian, flags, emoji, and the fantasy script bundle).

A contact sheet of country-flag glyphs from the flags bundle, each dithered to a 1-bit 72×40 keycap bitmap

Flashed automatically on connect

You normally never manage the pack by hand. When PolyKybdHost connects, the keyboard reports the version of each bundle it holds, and the host flashes only the bundles that are missing or out of date. That’s what the “Updating fonts — do not unplug” screen is: a font-pack bundle being written. It’s quick, and it only happens when something is actually stale.

Checking and updating it yourself

The tray’s Updates menu carries a Keyboard fonts row that already knows the answer: it reads “Keyboard fonts: up to date” when nothing is stale, or “Update keyboard fonts (2)…” when something is — with the outdated bundles named in its tooltip. Clicking it flashes exactly those.

The tray Updates submenu: check for host update, check for keyboard firmware update, and "Update keyboard fonts (1)…"

For troubleshooting you can also drive the pack from the CLI:

Terminal window
polyctl fontpack status # show device-vs-shipped versions per bundle
polyctl fontpack sync # flash every stale bundle
polyctl fontpack flash <id> # force-flash one bundle
polyctl fontpack wipe [id] # empty one bundle (or all)

Wiping a bundle is harmless — the host re-flashes it on the next connect. The same per-bundle view and a wipe are available in the tray under Developer → Font Pack (see developer mode).