Settings and timing¶
This page lists every user-visible setting and where it lives on the keyboard: the three activity
timeouts (fe/100a / fe/100b), the tapping term and interrupt flavor (stored inside every hold-tap
record, not as a device setting), the three persistent LED settings (ed/1012-1014), host OS,
release mode and keyscan. It gives NayaFlow's names, defaults and ranges, and what the keyboard
validates or refuses. The one thing to know first: there is no global "profile header" on the wire,
and a NayaFlow flash always re-sends the timeouts but never sends the LED settings.
At a glance
- Timeouts:
fe/100aparams00+ three u32 LE milliseconds; anything under 30 s is refused with statusea. - Tapping term and flavor are bytes inside each hold-tap record; moving NayaFlow's slider rewrites every hold-tap record on every layer.
- Flavor
00behaves as hold-preferred,01as balanced,02as tap-preferred (measured on 3.41.0), so NayaFlow's default "Balanced", written as00, types as hold-preferred;04or more stops every key until the board is unplugged. ed/1012scan mode,ed/1013max brightness anded/1014action override are real, persistent device settings with no read command.
Byte strings follow the site's byte convention: params and replies start with the flag or status byte.
Where each setting ends up¶
| NayaFlow control | NayaFlow default | On the keyboard | Read back with |
|---|---|---|---|
| Idle Timeout (0-6000 s) | 90 s | fe/100a field 1 (idle_time_ms) |
fe/100b |
| Sleep Timeout (0-6000 s) | 300 s | fe/100a field 2 (sleep_time_ms) |
fe/100b |
| (no control) | 30 s | fe/100a field 3 (sleep_battery_time_ms) |
fe/100b |
| Tapping Term (10-1000 ms) | 200 ms | term u16 inside every hold-tap record | 30/1003 |
| Interrupt Flavor (4 choices) | Balanced (written as 00, which behaves as hold-preferred) |
flavor byte inside every hold-tap record | 30/1003 |
| LED scan mode | on | ed/1012 |
none |
| LED max brightness (1-100) | 100 | ed/1013 |
none |
| LED action override | until keyboard restart | ed/1014 |
none |
| Hold layer LED activation delay (0-3000 ms) | 0 | unknown | unknown |
| Pointer speed, scroll speed, acceleration; Tune detents | per module | one-byte fields in each module config | 30/100b |
Activity timeouts¶
fe/100a SET ACTIVITY TIMEOUTS and fe/100b GET ACTIVITY TIMEOUTS (NayaCore's names):
the params of 100a are 00 followed by three u32 little-endian millisecond values; the ack is 00
with no data; the reply to 100b (params 00) is 00 followed by the same 12 bytes. NayaCore names
the fields idle_time_ms, sleep_time_ms and sleep_battery_time_ms.
MEASURED 3.41.0, 2026-09-01 + STATIC2.
Read-only
aa 00 50 00 fe 03 10 0b 00 1b 04 reads the three timeouts and changes nothing.
NayaCore's verify block for device settings lists tapping_term_ms,
tap_hold_flavour, idle_time_ms, sleep_time_ms, sleep_battery_time_ms, scanmode_pwm and
led_layer_override STATIC2. NayaFlow describes sleep as a deep
sleep "disabling lighting, bluetooth and memory"3, and the manual gives sleep after 1.5 minutes
idle and deep sleep (Bluetooth disconnected) after 10 minutes, both configurable5.
DOC
NayaFlow's defaults are params 00 90 5f 01 00 e0 93 04 00 30 75 00 00: idle 90 000,
sleep 300 000, third field 30 000 ms. Other captured values are 88 000 / 304 000 / 30 000 and
69 000 / 264 000 / 30 000. NayaFlow never changed the third field in any capture.
MEASURED NayaFlow 1.25.1 on 3.41.0, 2026-09.
The default write and its ack, as whole frames:
aa 00 50 00 fe 0f 10 0a 00 90 5f 01 00 e0 93 04 00 30 75 00 00 e6 04
aa 50 00 00 fe 03 10 0a 00 1a 04
To build the params, convert seconds to milliseconds and write each value as four bytes, least
significant first: 90 s = 90 000 ms = 0x00015f90 = 90 5f 01 00.
The naya-create-kb maintainer's earliest captures (2026-09-15, 3.41.0, before NayaFlow
had written any timeouts) show the board holding 90 000 / 600 000 / 15 000 ms: fe/100b replied
00 90 5f 01 00 c0 27 09 00 98 3a 00 00 REPORTED (raw data
checked1). That matches the manual's "sleep after 1.5 min idle, deep sleep after 10 min"
DOC5, and the third value is below the 30 s floor that writes
enforce, so something other than a normal write set it
INFERRED.
Timeout writes change a persistent setting
fe/100a is stored at once and survives reboots. Values under 30 s are refused with status
ea and nothing is stored; a tool that treats any non-zero status as a transport error will
misreport this as a failed link.
Validation on 3.41.0: any value under 30 s is refused with status ea and nothing is
stored; 30 s and up are stored; 0 means "off" for idle and sleep but is not accepted for the third
field; idle may exceed sleep. MEASURED 3.41.0, 2026-09-11
| Field | Refused with ea |
Stored |
|---|---|---|
| idle | 10, 15, 20, 29 s | 0 (off), 30, 45, 60, 400 s |
| sleep | 20 s | 0 (off); 300 s (NayaFlow's default) |
| third | 5, 15 s (0 is not accepted either) | 45 s |
NayaCore sends fe/100a on every NayaFlow flash, changed or not (identical bytes across
sessions), and then reads fe/100b as its verify ("Settings mismatch: X Write=%1 Read=%2"). There is
no commit step in this protocol. fe/100b is stable across reboots because the timeouts are
persistent, and it changes whenever the timeouts change (captured at 88 s / 304 s after a UI change).
MEASURED NayaFlow 1.25.1 on 3.41.0, 2026-09-01, 2026-09-17 +
STATIC2. Re-sending
valid fe/100a bytes is not a hazard in our records (see the never-send list on
Command map).
NayaFlow's Behavior Settings map onto the first two fields: Idle Timeout and Sleep Timeout sliders, 0-6000 s, stored in seconds in NayaFlow's database; NayaFlow 1.25.1 has no control for the third field STATIC3. The timeout settings first shipped, unannounced, in NayaFlow beta 1.22.0 (keyboard 3.39.4; its note says 3.39.3), and keyboard 3.40.4 fixed three activity-timeout bugs: the right half waking the left when entering idle, a Track not keeping the keyboard awake, and LEDs stuck half on and half off6. DOC
The first field's idle timer turns the key LEDs off. It did not run with the cable in and USB output selected, and it did run on battery (LEDs off at 90 s, one tap restores them). Whether the power source or the output mode gates it is open. What the second and third fields do beyond being stored has not been measured. MEASURED 3.41.0, 2026-09-11
Typing timing: tapping term and interrupt flavor¶
There is no device-wide tapping term and no "profile header" on the wire. The term is
the u16 inside every hold-tap record (once in a 03 record, twice in a 10 record), stored per
record and per bank. NayaFlow writes its single global term and flavor into every hold-tap record,
so moving its slider rewrites every hold-tap record on every layer; nothing else carries the term
(fe/100a does not). MEASURED NayaFlow 1.25.1 capture on 3.41.0,
2026-09-17. The record bytes are on Keymap records.
NayaFlow's Tapping Term slider defaults to 200 ms with a range of 10-1000 ms. Its only timing controls are Tapping Term, Idle Timeout, Sleep Timeout and the Interrupt Flavor dropdown; there is no double-tap window, hold-start, wait-for-release or overlap setting in its UI, in its settings schema, or on the wire. STATIC3 + MEASURED 3.41.0, 2026-09.
Flavor 04 or higher stops every key
A hold-tap record with flavor 04 or more is accepted and stored, and then no key works until
the board is unplugged (a power cycle). Never sweep this byte. Measured on 3.41.0, 2026-09-03.
Interrupt Flavor: NayaFlow offers four policies (Balanced, Hold-Preferred,
Tap-Preferred, Tap-Unless-Interrupted; schema default "balanced")
STATIC3. On the wire it is byte 2 of the hold-tap body in every
record, both banks (byte 5 of a 03 record, byte 8 of a 10 record): switching only the dropdown to
Tap-Preferred changed every layer-0 hold-tap record from 00 to 02, and NayaFlow's reset flash
wrote 00. Valid values are 0-3; 04 stops every key until the board is unplugged; 02 is
tap-preferred.
MEASURED NayaFlow 1.25.1 on 3.41.0, 2026-09-01, 2026-09-03. A home-row typing
test settles 00 and 01: with 00 holds fired on fast rolls (hold-preferred), with 01 fast
rolls typed cleanly (balanced) MEASURED owner's board, 3.41.0,
2026-09-259. So NayaFlow's default "Balanced" is written as 00 and behaves as
hold-preferred; 03 is not measured.
The measured bytes follow ZMK's order (0 hold-preferred, 1 balanced, 2 tap-preferred,
3 tap-unless-interrupted)8, not the order of NayaFlow's dropdown, whose first entry
"Balanced" is written as 00. What NayaFlow writes for Hold-Preferred and Tap-Unless-Interrupted
has not been captured. NayaFlow's verify read-back shows every record as flavor 1, whatever the
board holds (see Keymap records).
NayaCore's own name list reads "balanced, tap-preferred, tap-unless-interrupted, hold-preferred";
indexed 0-3 it contradicts the measured bytes, so it is not the wire enum.
MEASURED 3.41.0, 2026-09-01 to 2026-09-259 +
STATIC2 + INFERRED (03)
| Byte | Behavior on 3.41.0 | NayaFlow writes it for | ZMK order |
|---|---|---|---|
00 |
hold-preferred (holds fire on fast rolls) | "Balanced", its default (default and reset flashes) | hold-preferred |
01 |
balanced (fast rolls type cleanly) | not captured; its verify read-back shows every record as 01 |
balanced |
02 |
tap-preferred | "Tap-Preferred" | tap-preferred |
03 |
not measured | not captured | tap-unless-interrupted |
04+ |
stops every key until the board is unplugged | never | (invalid) |
"transparent-as-default" is a NayaCore setting for unset host slots: it decides whether
NayaCore writes an unassigned key as 0e 00 or 07 00. On the device, an unbound position reads
07 00. STATIC2 + MEASURED
3.41.0, 2026-09
Vendor fixes that touch these settings: NayaCore 6.1.4 fixed "Interrupt Flavor and Tapping Term settings were not applied to NayaCreate in some cases" (beta 1.17.0, 2026-02-07), and NayaCore 6.10.2 handles a hold-tap flavor mismatch on write6. DOC
LED settings¶
The three LED settings are real, persistent device settings that act when written:
ed/1012 scan mode (a bool; NayaFlow "LED scan mode", default on; toggling shows only as flicker on
camera), ed/1013 max brightness (1-100; NayaFlow default 100; 30 visibly dims), and ed/1014
action override (0 = an LED action pressed on a key lasts until restart, NayaFlow's default "until
keyboard restart"; 1 = until the next layer change). MEASURED
3.41.0, 2026-09-13, 2026-09-16. NayaCore 6.11.0 added protocol support for them (NayaFlow 1.25.0
release notes)7 DOC. A NayaFlow keymap flash sends none of them;
when NayaCore does send them has never been captured. Commands, params and the dark-board hazard of ed/1013 0 are on LEDs.
ed/1013 with 0, or with short or empty params, darkens the keys persistently
Short ed params are zero-filled, so an empty or one-byte ed/1013 is a write of 0. The
ceiling is stored, so the key array would then stay dark across reboots. See LEDs.
NayaCore's messages "No tap hold flavour found in the settings table. Resorting to
default." and the similar max-brightness message are about NayaFlow's settings table in its host
database (user-data.db), which NayaCore reads by fixed correlation ids: in NayaCore 6.11.0's
strings each such message sits beside a SELECT value FROM settings WHERE correlation_id = '...'
query. They say nothing about where the keyboard stores a value. The device side is known only by
behavior: the values persist across reboots, and whether a firmware flash changes the LED ceiling
was not recorded. STATIC2 +
MEASURED 3.41.0, 2026-09. See App data.
NayaFlow's setting correlation ids are vendor constants in its database: interrupt
flavor 24de8555-1a56-4e02-a1c3-3641603a5ac9, tapping term 8fe34f61-df0c-48c9-b0f7-ee9bfbaa2a05,
idle ded8e734-b10b-48c9-9ab1-536904e2c3de, sleep f198f968-2c42-4df6-8fdd-97de148cad1a, LED action
override 385426f7-e454-4174-babe-4ca4a670cbe2, LED max brightness
321fe22c-74e0-48cf-a954-326bf4391fd7, LED scan mode 66770f52-e917-4f17-b775-6308b1e4281a. The
third timeout's id was not recovered. NayaFlow 1.25.1 also has "Hold layer LED activation delay"
(0-3000 ms, default 0, id 83dab362-...), whose transport to the keyboard is unknown.
STATIC3
Host OS, release mode and keyscan¶
fe/1005 SET HOST OS takes one data byte below 2: 0 = Windows, 1 = macOS (params
00 00 / 00 01). It has never been sent by us and is not in the captured connect sequence.
NayaFlow ships separate Windows and macOS templates (see Keymap records).
STATIC2
fe/1007 SET RELEASE MODE takes one data byte: 00 and 01 were accepted, ff was
refused (ea), and nothing changed on USB. NayaCore re-asserts release mode only through the text
command keyboard_mode_release_toggle in its port-broker fallback; the captured connect sequence has
no fe/1007. MEASURED left half, 3.41.0, 2026-09-02 +
STATIC2
fe/1008 TOGGLE KEYSCAN MODE and fe/1009 KEYSCAN EVENT are described on
Command map. STATIC4 +
MEASURED 3.41.0, 2026-09-20
What a NayaFlow reset flash writes¶
NayaFlow's full-reset flash writes: tapping term 200, flavor 00, timeouts 90 s / 300 s
/ 30 s, module pointer speed / scroll speed / acceleration 10 / 10 / 50, the Tune's one-finger tap
cleared, and key 22's color back to hue 171. MEASURED NayaFlow
1.25.1 on 3.41.0, 2026-09-01
Module settings¶
NayaCore's nine motion categories (0 MOUSE_HORIZONTAL ... 8 STATIC_ZOOM) are the first u32
of the two-word (0f) record, used in module fields and on keys. See Module fields.
STATIC2 + MEASURED 3.41.0, 2026-09
Module settings (pointer speed, scroll speed, acceleration and its switch, the Tune's detent spacing, strength and on/off) are one-byte fields inside each module config; see Module fields. MEASURED 3.41.0, 2026-09
History¶
| Version | Change | Evidence |
|---|---|---|
| NayaCore 6.1.4 (beta 1.17.0, 2026-02-07) | Interrupt Flavor and Tapping Term sometimes not applied, fixed | DOC6 |
| NayaCore 6.10.2 | hold-tap flavor mismatch on write handled | DOC6 |
| NayaFlow beta 1.22.0 (keyboard 3.39.4) | Idle and Sleep timeouts first shipped (unannounced) | DOC6 |
| keyboard 3.40.4 (beta 1.24.0) | three activity-timeout bugs fixed | DOC6 |
| NayaCore 6.11.0 (NayaFlow 1.25.0) | protocol support for the three LED settings | DOC7 |
Open questions¶
- OPEN Whether flavor
03is tap-unless-interrupted, and which byte NayaFlow writes for Hold-Preferred and Tap-Unless-Interrupted; one captured NayaFlow flash per dropdown value settles the second (details). - OPEN What the second and third timeout fields do on the device; whether 0 is accepted for the third; whether USB power or USB output gates the idle timer; how "Hold layer LED activation delay" reaches the keyboard; who wrote the 90 / 600 / 15 s state seen before NayaFlow's first flash (details).
- OPEN When NayaCore sends
ed/1012,ed/1013anded/1014(details).
Sources¶
-
The naya-create-kb maintainer's published captures and dumps (USB CDC capture logs, including a settings flash); raw data decoded by us, never copied. ↩
-
NayaFlow 1.25.1, NayaCore 6.11.0 strings (static reading): settings field names, verify messages, settings-table queries, validation messages. ↩↩↩↩↩↩↩↩↩
-
NayaFlow 1.25.1 renderer and flow-bg-server strings, and its settings schema (static reading). ↩↩↩↩↩
-
nayactl, github.com/Qonfused/nayactl (
constants.py,cli/keyscan.py). ↩ -
Naya Create User Manual v1.1.x, p. 5 ("Turning Create ON/OFF": sleep and deep sleep), see Manuals. ↩↩
-
Vendor release notes of the beta channel, NayaTech/NayaFlow-beta-releases (1.17.0, 1.22.0, 1.23.0, 1.24.0). ↩↩↩↩↩↩
-
create-legacy-firmware, vendor release notes, changelogs/ (v1.25.0). ↩↩
-
ZMK documentation, hold-tap behavior, flavors. ↩
-
OpenFlow, commit 036d04c: a home-row typing test on the owner's board (3.41.0, 2026-09-25) with hold-tap records at flavor
00and01. ↩↩