summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2025-05-26 12:04:52 +0100
committerGitHub <noreply@github.com>2025-05-26 21:04:52 +1000
commit3703699757b6ce938ff412aca0a8b064927c0cdb (patch)
tree2b264de0e7a724c30cca511a9bac7ad29705d1a2 /docs
parentc97a798af76f6717d56d7279d418f49a96730e4f (diff)
2025 Q2 changelog (#25297)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'docs')
-rw-r--r--docs/ChangeLog/20250525.md299
-rw-r--r--docs/ChangeLog/20250525/pr25237.md3
-rw-r--r--docs/_sidebar.json2
-rw-r--r--docs/breaking_changes.md20
-rw-r--r--docs/breaking_changes_history.md1
5 files changed, 311 insertions, 14 deletions
diff --git a/docs/ChangeLog/20250525.md b/docs/ChangeLog/20250525.md
new file mode 100644
index 0000000000..c8859e0ea1
--- /dev/null
+++ b/docs/ChangeLog/20250525.md
@@ -0,0 +1,299 @@
1# QMK Breaking Changes - 2025 May 25 Changelog
2
3## Notable Features
4
5### Flow Tap ([#25125](https://github.com/qmk/qmk_firmware/pull/25125))
6
7Adds Flow Tap as a core tap-hold option to disable HRMs during fast typing, aka Global Quick Tap, Require Prior Idle.
8
9Flow 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.
10
11See the [Flow Tap documentation](../tap_hold#flow-tap) for more information.
12
13### Community Modules `1.1.1` ([#25050](https://github.com/qmk/qmk_firmware/pull/25050), [#25187](https://github.com/qmk/qmk_firmware/pull/25187))
14
15Version `1.1.1` introduces support for module defined RGB matrix effects and indicator callbacks, as well as pointing and layer state callbacks.
16
17See the [Community Modules documentation](../features/community_modules) for more information, including the full list of available hooks.
18
19## Changes Requiring User Action
20
21### Updated Keyboard Codebases
22
23| Old Keyboard Name | New Keyboard Name |
24|------------------------|----------------------|
25| chew | chew/split |
26| deemen17/de60fs | deemen17/de60/r1 |
27| keyten/kt60hs_t | keyten/kt60hs_t/v1 |
28| plywrks/ply8x | plywrks/ply8x/solder |
29| rookiebwoy/late9/rev1 | ivndbt/late9/rev1 |
30| rookiebwoy/neopad/rev1 | ivndbt/neopad/rev1 |
31
32## Deprecation Notices
33
34In line with the [notice period](../support_deprecation_policy#how-much-advance-notice-will-be-given), deprecation notices for larger items are listed here.
35
36### Deprecation of `qmk generate-compilation-database` ([#25237](https://github.com/qmk/qmk_firmware/pull/25237))
37
38This command has been deprecated as it cannot take into account configurables such as [converters](/feature_converters) or environment variables normally specified on the command line; please use the `--compiledb` flag with `qmk compile` instead.
39
40### Deprecation of `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))
41
42Unpicking 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.
43
44The new defaults can be configured in the following ways:
45
46:::::tabs
47
48==== keyboard.json
49
50```json [keyboard.json]
51{
52 "host": { // [!code focus]
53 "default": { // [!code focus]
54 "nkro": true // [!code focus]
55 } // [!code focus]
56 } // [!code focus]
57}
58
59```
60
61==== keymap.json
62
63```json [keymap.json]
64{
65 "config": {
66 "host": { // [!code focus]
67 "default": { // [!code focus]
68 "nkro": true // [!code focus]
69 } // [!code focus]
70 } // [!code focus]
71 }
72}
73
74```
75
76==== config.h
77
78```c [config.h]
79#pragma once
80
81#define NKRO_DEFAULT_ON true // [!code focus]
82```
83
84:::::
85
86The deprecated options will be removed in a future breaking changes cycle.
87
88### `CTPC`/`CONVERT_TO_PROTON_C` removal ([#25111](https://github.com/qmk/qmk_firmware/pull/25111))
89
90Deprecated build options `CTPC` and `CONVERT_TO_PROTON_C` have been removed. Users should of these should migrate to `CONVERT_TO=proton_c`.
91
92see the [Converters Feature](../feature_converters) documentation for more information.
93
94### `DEFAULT_FOLDER` removal ([#23281](https://github.com/qmk/qmk_firmware/pull/23281))
95
96`DEFAULT_FOLDER` was originally introduced to work around limitations within the build system.
97Parent folders containing common configuration would create invalid build targets.
98
99With the introduction of [`keyboard.json`](./20240526#keyboard-json) as a configuration file, the build system now has a consistent method to detect build targets.
100The `DEFAULT_FOLDER` functionality is now redundant and the intent is for `rules.mk` to become pure configuration.
101
102Backwards compatibility of build targets has been maintained where possible.
103
104### Converter `Pin Compatible` updates ([#20330](https://github.com/qmk/qmk_firmware/pull/20330))
105
106Converter support will be further limited to only function if a keyboard declares that is is compatible.
107
108This can be configured in the following ways:
109
110:::::tabs
111
112==== keyboard.json
113
114```json [keyboard.json]
115{
116 "development_board": "promicro", // [!code focus]
117}
118```
119
120==== rules.mk
121
122```make [rules.mk]
123PIN_COMPATIBLE = promicro
124```
125
126:::::
127
128see the [Converters Feature](../feature_converters) documentation for more information.
129
130### Deprecation of `encoder_update_{kb|user}`
131
132These 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](/features/encoders#encoder-map).
133
134`ENCODER_MAP_ENABLE` will subsequently be changed to "default-on" when encoders are enabled, and future breaking changes cycles will remove this flag entirely.
135
136To migrate usage of `encoder_update_user` to encoder map you'll need to handle all of the following changes in your `keymap.c`:
137
138:::::tabs
139
140=== 1. Add keycode definitions
141
142Define new keycodes:
143
144```c
145enum {
146 MY_ENCODER_LEFT = QK_USER, // [!code focus]
147 MY_ENCODER_RIGHT, // [!code focus]
148};
149```
150
151=== 2. Add encoder mapping
152
153Add the keycodes to a new encoder map (optionally with transparent layers above, if you want identical functionality of layer-independence):
154
155```c
156#if defined(ENCODER_MAP_ENABLE)
157const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
158 [0] = { ENCODER_CCW_CW(MY_ENCODER_LEFT, MY_ENCODER_RIGHT) }, // [!code focus]
159 [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
160 [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
161 [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, // [!code focus]
162};
163#endif
164```
165
166=== 3. Add keycode processing
167
168Handle the new keycodes within `process_record_user`, much like any other keycode in your keymap:
169
170```c
171bool process_record_user(uint16_t keycode, keyrecord_t *record) {
172 switch (keycode) {
173 case MY_ENCODER_LEFT: // [!code focus]
174 if (record->event.pressed) { // [!code focus]
175 // Add the same code you had in your `encoder_update_user` for the left-rotation code // [!code focus]
176 } // [!code focus]
177 return false; // Skip all further processing of this keycode // [!code focus]
178 case MY_ENCODER_RIGHT: // [!code focus]
179 if (record->event.pressed) { // [!code focus]
180 // Add the same code you had in your `encoder_update_user` for the right-rotation code // [!code focus]
181 } // [!code focus]
182 return false; // Skip all further processing of this keycode // [!code focus]
183 }
184}
185```
186
187=== 4. Remove old code
188
189Remove your implementation of `encoder_update_user` from your `keymap.c`.
190
191::::::
192
193If your board has multiple encoders, each encoder will need its own pair of keycodes defined as per above.
194
195## Full changelist
196
197Core:
198* Non-volatile memory data repository pattern ([#24356](https://github.com/qmk/qmk_firmware/pull/24356))
199* High resolution scrolling (without feature report parsing) ([#24423](https://github.com/qmk/qmk_firmware/pull/24423))
200* Implement battery level interface ([#24666](https://github.com/qmk/qmk_firmware/pull/24666))
201* get_keycode_string(): function to format keycodes as strings, for more readable debug logging. ([#24787](https://github.com/qmk/qmk_firmware/pull/24787))
202* [Cleanup] Handling of optional `*.mk` files ([#24952](https://github.com/qmk/qmk_firmware/pull/24952))
203* Add EOL to non-keyboard files ([#24990](https://github.com/qmk/qmk_firmware/pull/24990))
204* use `keycode_string` in unit tests ([#25042](https://github.com/qmk/qmk_firmware/pull/25042))
205* Add additional hooks for Community modules ([#25050](https://github.com/qmk/qmk_firmware/pull/25050))
206* Remove `CTPC`/`CONVERT_TO_PROTON_C` options ([#25111](https://github.com/qmk/qmk_firmware/pull/25111))
207* Flow Tap tap-hold option to disable HRMs during fast typing (aka Global Quick Tap, Require Prior Idle). ([#25125](https://github.com/qmk/qmk_firmware/pull/25125))
208* Remove `bluefruit_le_read_battery_voltage` function ([#25129](https://github.com/qmk/qmk_firmware/pull/25129))
209* Avoid duplication in generated community modules `rules.mk` ([#25135](https://github.com/qmk/qmk_firmware/pull/25135))
210* [chore]: move and rename mouse/scroll min/max defines ([#25141](https://github.com/qmk/qmk_firmware/pull/25141))
211* Ignore the Layer Lock key in Repeat Key and Caps Word. ([#25171](https://github.com/qmk/qmk_firmware/pull/25171))
212* Allow for disabling EEPROM subsystem entirely. ([#25173](https://github.com/qmk/qmk_firmware/pull/25173))
213* Implement connection keycode logic ([#25176](https://github.com/qmk/qmk_firmware/pull/25176))
214* Align ChibiOS `USB_WAIT_FOR_ENUMERATION` implementation ([#25184](https://github.com/qmk/qmk_firmware/pull/25184))
215* Enable community modules to define LED matrix and RGB matrix effects. ([#25187](https://github.com/qmk/qmk_firmware/pull/25187))
216* Bind Bluetooth driver to `host_driver_t` ([#25199](https://github.com/qmk/qmk_firmware/pull/25199))
217* Enhance Flow Tap to work better for rolls over multiple tap-hold keys. ([#25200](https://github.com/qmk/qmk_firmware/pull/25200))
218* Remove force disable of NKRO when Bluetooth enabled ([#25201](https://github.com/qmk/qmk_firmware/pull/25201))
219* [New Feature/Core] New RGB Matrix Animation "Starlight Smooth" ([#25203](https://github.com/qmk/qmk_firmware/pull/25203))
220* Add battery changed callbacks ([#25207](https://github.com/qmk/qmk_firmware/pull/25207))
221* Generate versions to keycode headers ([#25219](https://github.com/qmk/qmk_firmware/pull/25219))
222* Add raw_hid support to host driver ([#25255](https://github.com/qmk/qmk_firmware/pull/25255))
223* Deprecate `usb.force_nkro`/`FORCE_NKRO` ([#25262](https://github.com/qmk/qmk_firmware/pull/25262))
224* [Chore] use {rgblight,rgb_matrix}_hsv_to_rgb overrides ([#25271](https://github.com/qmk/qmk_firmware/pull/25271))
225* Remove outdated `nix` support due to bit-rot. ([#25280](https://github.com/qmk/qmk_firmware/pull/25280))
226
227CLI:
228* Align to latest CLI dependencies ([#24553](https://github.com/qmk/qmk_firmware/pull/24553))
229* Exclude external userspace from lint checking ([#24680](https://github.com/qmk/qmk_firmware/pull/24680))
230* [Modules] Provide access to current path in `rules.mk`. ([#25061](https://github.com/qmk/qmk_firmware/pull/25061))
231* Add "license" field to Community Module JSON schema. ([#25085](https://github.com/qmk/qmk_firmware/pull/25085))
232* Prompt for converter when creating new keymap ([#25116](https://github.com/qmk/qmk_firmware/pull/25116))
233* Extend lint checks to reject duplication of defaults ([#25149](https://github.com/qmk/qmk_firmware/pull/25149))
234* Add lint warning for empty url ([#25182](https://github.com/qmk/qmk_firmware/pull/25182))
235* Deprecate `qmk generate-compilation-database`. ([#25237](https://github.com/qmk/qmk_firmware/pull/25237))
236* Use relative paths for schemas, instead of $id. Enables VScode validation. ([#25251](https://github.com/qmk/qmk_firmware/pull/25251))
237
238Submodule updates:
239* STM32G0x1 support ([#24301](https://github.com/qmk/qmk_firmware/pull/24301))
240* Update develop branch to Pico SDK 1.5.1 ([#25178](https://github.com/qmk/qmk_firmware/pull/25178))
241* Add `compiler_support.h` ([#25274](https://github.com/qmk/qmk_firmware/pull/25274))
242
243Keyboards:
244* add 75_(ansi|iso) Community Layouts to mechlovin/olly/octagon ([#22459](https://github.com/qmk/qmk_firmware/pull/22459))
245* Add the plywrks ply8x hotswap variant. ([#23558](https://github.com/qmk/qmk_firmware/pull/23558))
246* Add Community Layout support to daskeyboard4 ([#23884](https://github.com/qmk/qmk_firmware/pull/23884))
247* New standard layout for Savage65 (65_ansi_blocker_tsangan_split_bs) ([#24690](https://github.com/qmk/qmk_firmware/pull/24690))
248* Add Icebreaker keyboard ([#24723](https://github.com/qmk/qmk_firmware/pull/24723))
249* Update Tractyl Manuform and add F405 (weact) variant ([#24764](https://github.com/qmk/qmk_firmware/pull/24764))
250* Chew folders ([#24785](https://github.com/qmk/qmk_firmware/pull/24785))
251* modelh: add prerequisites for via support ([#24932](https://github.com/qmk/qmk_firmware/pull/24932))
252* Only configure `STM32_HSECLK` within `board.h` ([#25001](https://github.com/qmk/qmk_firmware/pull/25001))
253* Allow LVGL onekey keymap to be able compile for other board ([#25005](https://github.com/qmk/qmk_firmware/pull/25005))
254* Remove Sofle `rgb_default` keymap & tidy readme's ([#25010](https://github.com/qmk/qmk_firmware/pull/25010))
255* Migrate remaining `split.soft_serial_pin` to `split.serial.pin` ([#25046](https://github.com/qmk/qmk_firmware/pull/25046))
256* Update keymap for keycult 1800 ([#25070](https://github.com/qmk/qmk_firmware/pull/25070))
257* Add kt60HS-T v2 PCB ([#25080](https://github.com/qmk/qmk_firmware/pull/25080))
258* Refactor Deemen17 Works DE60 ([#25088](https://github.com/qmk/qmk_firmware/pull/25088))
259* Rookiebwoy to ivndbt ([#25142](https://github.com/qmk/qmk_firmware/pull/25142))
260* Remove duplication of RGB Matrix defaults ([#25146](https://github.com/qmk/qmk_firmware/pull/25146))
261* ymdk/id75/rp2040 ([#25157](https://github.com/qmk/qmk_firmware/pull/25157))
262* Remove duplication of RGBLight defaults ([#25169](https://github.com/qmk/qmk_firmware/pull/25169))
263* Remove empty `url` fields ([#25181](https://github.com/qmk/qmk_firmware/pull/25181))
264* Remove more duplication of defaults ([#25189](https://github.com/qmk/qmk_firmware/pull/25189))
265* Remove `"console":false` from keyboards ([#25190](https://github.com/qmk/qmk_firmware/pull/25190))
266* Remove `"command":false` from keyboards ([#25193](https://github.com/qmk/qmk_firmware/pull/25193))
267* Remove redundant keyboard headers ([#25208](https://github.com/qmk/qmk_firmware/pull/25208))
268* Add debounce to duplicated defaults check ([#25246](https://github.com/qmk/qmk_firmware/pull/25246))
269* Remove duplicate of SPI default config from keyboards ([#25266](https://github.com/qmk/qmk_firmware/pull/25266))
270* Resolve miscellaneous keyboard lint warnings ([#25268](https://github.com/qmk/qmk_firmware/pull/25268))
271* Configure boards to use development_board - 0-9 ([#25287](https://github.com/qmk/qmk_firmware/pull/25287))
272* Configure boards to use development_board - UVWXYZ ([#25288](https://github.com/qmk/qmk_firmware/pull/25288))
273* Configure boards to use development_board - S ([#25293](https://github.com/qmk/qmk_firmware/pull/25293))
274* Configure boards to use development_board - T ([#25294](https://github.com/qmk/qmk_firmware/pull/25294))
275
276Keyboard fixes:
277* Fix `boardsource/beiwagon` RGB Matrix coordinates ([#25018](https://github.com/qmk/qmk_firmware/pull/25018))
278* amptrics/0422 - Prevent OOB in `update_leds_for_layer` ([#25209](https://github.com/qmk/qmk_firmware/pull/25209))
279* salicylic_acid3/getta25 - Fix oled keymap ([#25295](https://github.com/qmk/qmk_firmware/pull/25295))
280
281Others:
282* Require 'x'/'y' properties for LED/RGB Matrix layout ([#24997](https://github.com/qmk/qmk_firmware/pull/24997))
283* Align `new-keyboard` template to current standards ([#25191](https://github.com/qmk/qmk_firmware/pull/25191))
284
285Bugs:
286* Fix OS_DETECTION_KEYBOARD_RESET ([#25015](https://github.com/qmk/qmk_firmware/pull/25015))
287* Fix outdated GPIO control function usage ([#25060](https://github.com/qmk/qmk_firmware/pull/25060))
288* Cater for use of `__errno_r()` in ChibiOS syscalls.c with newer picolibc revisions ([#25121](https://github.com/qmk/qmk_firmware/pull/25121))
289* Fixup eeconfig lighting reset. ([#25166](https://github.com/qmk/qmk_firmware/pull/25166))
290* Fix for Flow Tap: fix handling of distinct taps and timer updates. ([#25175](https://github.com/qmk/qmk_firmware/pull/25175))
291* Minimise force-included files ([#25194](https://github.com/qmk/qmk_firmware/pull/25194))
292* Ensure `qmk_userspace_paths` maintains detected order ([#25204](https://github.com/qmk/qmk_firmware/pull/25204))
293* Resolve alias for `qmk new-keymap` keyboard prompts ([#25210](https://github.com/qmk/qmk_firmware/pull/25210))
294* gcc15 AVR compilation fixes ([#25238](https://github.com/qmk/qmk_firmware/pull/25238))
295* Fix typos introduced by PR #25050 ([#25250](https://github.com/qmk/qmk_firmware/pull/25250))
296* Fix Wear Leveling compilation ([#25254](https://github.com/qmk/qmk_firmware/pull/25254))
297* Remove more USB only branches from NKRO handling ([#25263](https://github.com/qmk/qmk_firmware/pull/25263))
298* [Fix] lib8tion: enable fixed scale8 and blend functions ([#25272](https://github.com/qmk/qmk_firmware/pull/25272))
299* Fix tap_hold code blocks ([#25298](https://github.com/qmk/qmk_firmware/pull/25298))
diff --git a/docs/ChangeLog/20250525/pr25237.md b/docs/ChangeLog/20250525/pr25237.md
deleted file mode 100644
index ca09e93ebc..0000000000
--- a/docs/ChangeLog/20250525/pr25237.md
+++ /dev/null
@@ -1,3 +0,0 @@
1# Deprecation of `qmk generate-compilation-database`
2
3This command has been deprecated as it cannot take into account configurables such as [converters](/feature_converters) or environment variables normally specified on the command line; please use the `--compiledb` flag with `qmk compile` instead.
diff --git a/docs/_sidebar.json b/docs/_sidebar.json
index f504f6f900..37f2dc580c 100644
--- a/docs/_sidebar.json
+++ b/docs/_sidebar.json
@@ -207,7 +207,7 @@
207 { "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" }, 207 { "text": "My Pull Request Was Flagged", "link": "/breaking_changes_instructions" },
208 { 208 {
209 "text": "Most Recent ChangeLog", 209 "text": "Most Recent ChangeLog",
210 "link": "/ChangeLog/20250223" 210 "link": "/ChangeLog/20250525"
211 }, 211 },
212 { "text": "Past Breaking Changes", "link": "/breaking_changes_history" }, 212 { "text": "Past Breaking Changes", "link": "/breaking_changes_history" },
213 { "text": "Deprecation Policy", "link": "/support_deprecation_policy" } 213 { "text": "Deprecation Policy", "link": "/support_deprecation_policy" }
diff --git a/docs/breaking_changes.md b/docs/breaking_changes.md
index a5a57ccd12..9063fc18db 100644
--- a/docs/breaking_changes.md
+++ b/docs/breaking_changes.md
@@ -10,25 +10,25 @@ Practically, this means QMK merges the `develop` branch into the `master` branch
10 10
11## What has been included in past Breaking Changes? 11## What has been included in past Breaking Changes?
12 12
13* [2025 May 25](ChangeLog/20250525)
13* [2025 Feb 23](ChangeLog/20250223) 14* [2025 Feb 23](ChangeLog/20250223)
14* [2024 Nov 24](ChangeLog/20241124) 15* [2024 Nov 24](ChangeLog/20241124)
15* [2024 Aug 25](ChangeLog/20240825)
16* [Older Breaking Changes](breaking_changes_history) 16* [Older Breaking Changes](breaking_changes_history)
17 17
18## When is the next Breaking Change? 18## When is the next Breaking Change?
19 19
20The next Breaking Change is scheduled for May 25, 2025. 20The next Breaking Change is scheduled for Aug 31, 2025.
21 21
22### Important Dates 22### Important Dates
23 23
24* 2025 Feb 23 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions. 24* 2025 May 25 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
25* 2025 Apr 27 - `develop` closed to new PRs. 25* 2025 Aug 3 - `develop` closed to new PRs.
26* 2025 Apr 27 - Call for testers. 26* 2025 Aug 3 - Call for testers.
27* 2025 May 11 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes 27* 2025 Aug 17 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
28* 2025 May 18 - `develop` is locked, only critical bugfix PRs merged. 28* 2025 Aug 24 - `develop` is locked, only critical bugfix PRs merged.
29* 2025 May 23 - `master` is locked, no PRs merged. 29* 2025 Aug 29 - `master` is locked, no PRs merged.
30* 2025 May 25 - Merge `develop` to `master`. 30* 2025 Aug 31 - Merge `develop` to `master`.
31* 2025 May 25 - `master` is unlocked. PRs can be merged again. 31* 2025 Aug 31 - `master` is unlocked. PRs can be merged again.
32 32
33## What changes will be included? 33## What changes will be included?
34 34
diff --git a/docs/breaking_changes_history.md b/docs/breaking_changes_history.md
index af8c1c04d5..274aa340df 100644
--- a/docs/breaking_changes_history.md
+++ b/docs/breaking_changes_history.md
@@ -2,6 +2,7 @@
2 2
3This page links to all previous changelogs from the QMK Breaking Changes process. 3This page links to all previous changelogs from the QMK Breaking Changes process.
4 4
5* [2025 May 25](ChangeLog/20250525) - version 0.29.0
5* [2025 Feb 23](ChangeLog/20250223) - version 0.28.0 6* [2025 Feb 23](ChangeLog/20250223) - version 0.28.0
6* [2024 Nov 24](ChangeLog/20241124) - version 0.27.0 7* [2024 Nov 24](ChangeLog/20241124) - version 0.27.0
7* [2024 Aug 25](ChangeLog/20240825) - version 0.26.0 8* [2024 Aug 25](ChangeLog/20240825) - version 0.26.0