import { _ as _export_sfc, c as createElementBlock, I as createVNode, w as withCtx, a8 as createStaticVNode, D as resolveComponent, o as openBlock, l as createBaseVNode, a as createTextVNode } from "./chunks/framework.Cauyuiy8.js"; const __pageData = JSON.parse('{"title":"QMK Breaking Changes - 2025 May 25 Changelog","description":"","frontmatter":{},"headers":[],"relativePath":"ChangeLog/20250525.md","filePath":"ChangeLog/20250525.md","lastUpdated":null}'); const _sfc_main = { name: "ChangeLog/20250525.md" }; const _hoisted_1 = /* @__PURE__ */ createStaticVNode('

QMK Breaking Changes - 2025 May 25 Changelog

Notable Features

Flow Tap (#25125)

Adds Flow Tap as a core tap-hold option to disable HRMs during fast typing, aka Global Quick Tap, Require Prior Idle.

Flow Tap modifies mod-tap MT and layer-tap LT keys such that when pressed within a short timeout of the preceding key, the tapping behavior is triggered. It basically disables the hold behavior during fast typing, creating a "flow of taps." It also helps to reduce the input lag of tap-hold keys during fast typing, since the tapped behavior is sent immediately.

See the Flow Tap documentation for more information.

Community Modules 1.1.1 (#25050, #25187)

Version 1.1.1 introduces support for module defined RGB matrix effects and indicator callbacks, as well as pointing and layer state callbacks.

See the Community Modules documentation for more information, including the full list of available hooks.

Changes Requiring User Action

Updated Keyboard Codebases

Old Keyboard NameNew Keyboard Name
chewchew/split
deemen17/de60fsdeemen17/de60/r1
keyten/kt60hs_tkeyten/kt60hs_t/v1
plywrks/ply8xplywrks/ply8x/solder
rookiebwoy/late9/rev1ivndbt/late9/rev1
rookiebwoy/neopad/rev1ivndbt/neopad/rev1

Deprecation Notices

In line with the notice period, deprecation notices for larger items are listed here.

Deprecation of qmk generate-compilation-database (#25237)

This command has been deprecated as it cannot take into account configurables such as converters or environment variables normally specified on the command line; please use the --compiledb flag with qmk compile instead.

Deprecation of usb.force_nkro/FORCE_NKRO (#25262)

Unpicking the assumption that only USB can do NKRO, forcing of NKRO on every boot has been deprecated. As this setting persists, it produces unnecessary user confusion when the various NKRO keycodes (for example NK_TOGG) do not behave as expected.

The new defaults can be configured in the following ways:

', 19); const _hoisted_20 = /* @__PURE__ */ createBaseVNode("div", { class: "language-json vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "json"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "{") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "host"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": { ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "default"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": { ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "nkro"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "true") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " } ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " } ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "}") ]) ]) ]) ], -1); const _hoisted_21 = /* @__PURE__ */ createBaseVNode("div", { class: "language-json vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "json"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "{") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "config"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "host"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": { ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "default"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": { ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "nkro"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "true") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " } ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " } ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " }") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "}") ]) ]) ]) ], -1); const _hoisted_22 = /* @__PURE__ */ createBaseVNode("div", { class: "language-c vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "c"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "#pragma"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, " once") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "#define"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, " NKRO_DEFAULT_ON"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, " true") ]) ]) ]) ], -1); const _hoisted_23 = /* @__PURE__ */ createStaticVNode('

The deprecated options will be removed in a future breaking changes cycle.

CTPC/CONVERT_TO_PROTON_C removal (#25111)

Deprecated build options CTPC and CONVERT_TO_PROTON_C have been removed. Users should of these should migrate to CONVERT_TO=proton_c.

see the Converters Feature documentation for more information.

DEFAULT_FOLDER removal (#23281)

DEFAULT_FOLDER was originally introduced to work around limitations within the build system. Parent folders containing common configuration would create invalid build targets.

With the introduction of keyboard.json as a configuration file, the build system now has a consistent method to detect build targets. The DEFAULT_FOLDER functionality is now redundant and the intent is for rules.mk to become pure configuration.

Backwards compatibility of build targets has been maintained where possible.

Converter Pin Compatible updates (#20330)

Converter support will be further limited to only function if a keyboard declares that is is compatible.

This can be configured in the following ways:

', 11); const _hoisted_34 = /* @__PURE__ */ createBaseVNode("div", { class: "language-json vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "json"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "{") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, ' "development_board"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ": "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#032F62", "--shiki-dark": "#9ECBFF" } }, '"promicro"'), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ", ") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "}") ]) ]) ]) ], -1); const _hoisted_35 = /* @__PURE__ */ createBaseVNode("div", { class: "language-make vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "make"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "PIN_COMPATIBLE = promicro") ]) ]) ]) ], -1); const _hoisted_36 = /* @__PURE__ */ createStaticVNode('

see the Converters Feature documentation for more information.

Deprecation of encoder_update_{kb|user}

These callbacks are now considered end-of-life and will be removed over the next breaking changes cycle, ending August 2025. PRs containing these callbacks will be asked to change to use encoder mapping.

ENCODER_MAP_ENABLE will subsequently be changed to "default-on" when encoders are enabled, and future breaking changes cycles will remove this flag entirely.

To migrate usage of encoder_update_user to encoder map you'll need to handle all of the following changes in your keymap.c:

', 5); const _hoisted_41 = /* @__PURE__ */ createBaseVNode("p", null, "Define new keycodes:", -1); const _hoisted_42 = /* @__PURE__ */ createBaseVNode("div", { class: "language-c vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "c"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "enum"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " MY_ENCODER_LEFT "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " QK_USER,") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " MY_ENCODER_RIGHT,") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "};") ]) ]) ]) ], -1); const _hoisted_43 = /* @__PURE__ */ createBaseVNode("p", null, "Add the keycodes to a new encoder map (optionally with transparent layers above, if you want identical functionality of layer-independence):", -1); const _hoisted_44 = /* @__PURE__ */ createBaseVNode("div", { class: "language-c vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "c"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "#if"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " defined"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "("), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, "ENCODER_MAP_ENABLE"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ")") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "const"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " uint16_t"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " PROGMEM encoder_map"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "[]"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "[NUM_ENCODERS][NUM_DIRECTIONS] "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " ["), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "0"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "] "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " { "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, "ENCODER_CCW_CW"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "(MY_ENCODER_LEFT, MY_ENCODER_RIGHT) },") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " ["), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "1"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "] "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " { "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, "ENCODER_CCW_CW"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "(KC_TRNS, KC_TRNS) },") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " ["), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "2"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "] "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " { "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, "ENCODER_CCW_CW"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "(KC_TRNS, KC_TRNS) },") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " ["), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "3"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "] "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "="), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " { "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, "ENCODER_CCW_CW"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "(KC_TRNS, KC_TRNS) },") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "};") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "#endif") ]) ]) ]) ], -1); const _hoisted_45 = /* @__PURE__ */ createBaseVNode("p", null, [ /* @__PURE__ */ createTextVNode("Handle the new keycodes within "), /* @__PURE__ */ createBaseVNode("code", null, "process_record_user"), /* @__PURE__ */ createTextVNode(", much like any other keycode in your keymap:") ], -1); const _hoisted_46 = /* @__PURE__ */ createBaseVNode("div", { class: "language-c vp-adaptive-theme" }, [ /* @__PURE__ */ createBaseVNode("button", { title: "Copy Code", class: "copy" }), /* @__PURE__ */ createBaseVNode("span", { class: "lang" }, "c"), /* @__PURE__ */ createBaseVNode("pre", { class: "shiki shiki-themes github-light github-dark has-focused-lines vp-code" }, [ /* @__PURE__ */ createBaseVNode("code", null, [ /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "bool"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6F42C1", "--shiki-dark": "#B392F0" } }, " process_record_user"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "("), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "uint16_t"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#E36209", "--shiki-dark": "#FFAB70" } }, " keycode"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ", "), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, "keyrecord_t"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " *"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#E36209", "--shiki-dark": "#FFAB70" } }, "record"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ") {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " switch"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " (keycode) {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " case"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " MY_ENCODER_LEFT:") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " if"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " (record"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "->"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "event.pressed) {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6A737D", "--shiki-dark": "#6A737D" } }, " // Add the same code you had in your `encoder_update_user` for the left-rotation code") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " }") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " return"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, " false"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ";"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6A737D", "--shiki-dark": "#6A737D" } }, " // Skip all further processing of this keycode") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " case"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " MY_ENCODER_RIGHT:") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " if"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " (record"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, "->"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "event.pressed) {") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6A737D", "--shiki-dark": "#6A737D" } }, " // Add the same code you had in your `encoder_update_user` for the right-rotation code") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " }") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line has-focus" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#D73A49", "--shiki-dark": "#F97583" } }, " return"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#005CC5", "--shiki-dark": "#79B8FF" } }, " false"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, ";"), /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#6A737D", "--shiki-dark": "#6A737D" } }, " // Skip all further processing of this keycode") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, " }") ]), /* @__PURE__ */ createTextVNode("\n"), /* @__PURE__ */ createBaseVNode("span", { class: "line" }, [ /* @__PURE__ */ createBaseVNode("span", { style: { "--shiki-light": "#24292E", "--shiki-dark": "#E1E4E8" } }, "}") ]) ]) ]) ], -1); const _hoisted_47 = /* @__PURE__ */ createBaseVNode("p", null, [ /* @__PURE__ */ createTextVNode("Remove your implementation of "), /* @__PURE__ */ createBaseVNode("code", null, "encoder_update_user"), /* @__PURE__ */ createTextVNode(" from your "), /* @__PURE__ */ createBaseVNode("code", null, "keymap.c"), /* @__PURE__ */ createTextVNode(".") ], -1); const _hoisted_48 = /* @__PURE__ */ createStaticVNode('

If your board has multiple encoders, each encoder will need its own pair of keycodes defined as per above.

Full changelist

Core:

CLI:

Submodule updates:

Keyboards:

Keyboard fixes:

Others:

Bugs:

', 16); function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_PluginTabsTab = resolveComponent("PluginTabsTab"); const _component_PluginTabs = resolveComponent("PluginTabs"); return openBlock(), createElementBlock("div", null, [ _hoisted_1, createVNode(_component_PluginTabs, null, { default: withCtx(() => [ createVNode(_component_PluginTabsTab, { label: "keyboard.json" }, { default: withCtx(() => [ _hoisted_20 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "keymap.json" }, { default: withCtx(() => [ _hoisted_21 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "config.h" }, { default: withCtx(() => [ _hoisted_22 ]), _: 1 }) ]), _: 1 }), _hoisted_23, createVNode(_component_PluginTabs, null, { default: withCtx(() => [ createVNode(_component_PluginTabsTab, { label: "keyboard.json" }, { default: withCtx(() => [ _hoisted_34 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "rules.mk" }, { default: withCtx(() => [ _hoisted_35 ]), _: 1 }) ]), _: 1 }), _hoisted_36, createVNode(_component_PluginTabs, null, { default: withCtx(() => [ createVNode(_component_PluginTabsTab, { label: "1. Add keycode definitions" }, { default: withCtx(() => [ _hoisted_41, _hoisted_42 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "2. Add encoder mapping" }, { default: withCtx(() => [ _hoisted_43, _hoisted_44 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "3. Add keycode processing" }, { default: withCtx(() => [ _hoisted_45, _hoisted_46 ]), _: 1 }), createVNode(_component_PluginTabsTab, { label: "4. Remove old code" }, { default: withCtx(() => [ _hoisted_47 ]), _: 1 }) ]), _: 1 }), _hoisted_48 ]); } const _20250525 = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { __pageData, _20250525 as default };