The ZMK-based Keychron keyboards, for example, V6 Ultra 8K, work with Via!
The short version: By changing the USB product ID in a JSON file for a similar keyboard, to that, for example, of a Keychron V6 Ultra 8K ‘ISO‘, it is possible to change keymappings, record macros, and execute macros from Via for a ZMK-based Keychron keyboard, inclusive using the so-called standalone version of Via!
The underlying reason is that Keychron has implemented the Via protocol for their ZMK-based keyboards.
Base change: USB identity
Example: Start JSON file: For V6 Max ISO (from this page). It has the exact same physical key layout as the V6 Ultra 8K ‘ISO’.
The first three lines:
"name": "Keychron V6 Max ISO Knob",
"vendorId": "0x3434",
"productId": "0x0961",
The USB product ID for V6 Ultra 8K ‘ISO’ is 0x0C61 (it can, for example, be found in the operating system somewhere). Thus, change it and the name, to:
"name": "Keychron V6 Ultra 8K ISO",
"vendorId": "0x3434",
"productId": "0x0C61",
JSON files blues
But it isn’t sufficient. Even for a keyboard with the exact same physical key layout, there are differences, which must be expressed in the JSON file.
ZMK blues
Compared to a QMK-based keyboard, there is a shift in some key positions, e.g., for the four extra keys above the numeric keypad.
Example 1: If a key is mapped (in Via) to the first in that group of four (according to the V6 JSON file/QMK keymap), activation requires to use the key two to the right, the third key in that group of four…
Example 2: If a key is mapped to the fourth (last) in that group of four (according to the V6 JSON file/QMK keymap), activation requires to use key 6 on the numpad(!) It is far away from anything that could be explained by a simple shift in the key order (the two keys are swapped).
Perhaps it is due to a keyboard firmware bug? That was tested with version 1.0.1/2025-11-28 (notations are “1.01” and “1.1”) of the V6 Ultra 8K ‘ISO’ keyboard firmware. There is currently a version 1.0.2, but it hasn’t been tested yet.
JSON files blues
Order of keys: Vertical keys:
- Enter key (‘ISO‘ only)
- + key (numeric keypad)
- Enter key (numeric keypad)
There isn’t any consistency between Keychron keyboards if a vertical key belongs to the upper or lower row when it comes to the key order. Thus, the original JSON file may not reflect the actual key order for the ‘Ultra’ keyboard. Or in other words, it is easiest to choose a JSON file to clone and change that has the same key order.
| Keyboard | Key Enter(main) | Key +(numerickeypad) | Key Enter(numerickeypad) |
|---|---|---|---|
| V6 ISO | Lower | Upper | Upper |
| V6 Max ISO | Lower | Lower | Lower |
| V6 Ultra 8K ‘ANSI’ | – | Lower | Lower |
| V6 Ultra 8K ‘ISO | TBD | TBD | TBD |
‘TBD’: The source code has not been released for the ‘ISO’ variant, but it should be possible to infer the information.
Rotary knob blues
The rotary knob does not seem to be supported, at least with the tested version 1.0.1 of the V6 Ultra 8K ‘ISO’.
References
- V6 JSON files for Via. Near “V6 knob version ISO keymap”. E.g., v6_max_iso_encoder_v1.0.0_2404091021.json and v6_us_knob_v1.3.json.zip. Note: The JSON section should not be confused with the firmware section. As of 2026-07-13, it does not include the JSON files for V6 V2 (which is based on another microcontroller).
- V6 Ultra 8K default keymap (‘ANSI’)
- V6 Max default keymap
Leave a Reply