* Scintilla updated to 5.6.6, see https://www.scintilla.org/ScintillaHistory.html for the changes.
* Localization for Portuguese (Brazil), contributed by @DAVIDVS-PR1MVS in PR #1289 and #1292.
* Remove find/replace text length limitation, issue #1277.
* Fill find replace edit box with last used string after restarting when "Settings -> Other Settings -> Remember Search Option" is enabled, issue #1282.
* Allow NUL (var transform backslash for `\x00` or `\u0000`) in find/replace text.
* Escape/unescape C characters now handle standard `\a`, `\b`, `\f`, `\n`, `\r`, `\t`, `\v` escape sequence, issue #1221.
* Fix word wrap not show whole pasted long line, issue #1277, #1283.
* Fix random crash caused by date race in multi-threaded word wrap.
* Other bug fixes and improvements.
Behavior Changes
* Escape/unescape HTML/XML characters no longer map space (U+0020) to ` ` (U+00A0), tab (U+0009) to ` ` (U+2003) and vice versa, as they are not equivalent.
* Hex to character now strict on hexadecimal digits, only following forms (all treated as UTF-16/UTF-32 code point) with exact number of digits as `H` are supported: `\xHH`, `\xHHHH`, `\uHHHH`, `\UHHHHHHHH`, `U+HHHH` and `U+HHHHHH`.
* Transform backslash now strict on hexadecimal digits, see table below.
| Form | Description |
|--|--|
|`\xHH` | exact two digits, treated as raw byte in current code page (which different from Hex to Character but is same as built-in regex engine) |
|`\uHHHH` | exact four digits, UTF-16 code point, could be surrogate pair |
- Improved selection capture compatibility and stability across macOS and Windows, including PDF, Office, browsers, and custom-drawn text areas
- Faster and more reliable selection toolbar with staged presentation, hover feedback, and long-running recovery
- More stable streaming Markdown rendering with consistent spacing for paragraphs, lists, code blocks, tables, and math
- Improved global shortcut registration, rollback, modifier-key capture, and multi-turn follow-up support
What's Changed
- libs(steam-utility): add disk cache and transient retry to game white… by @zevnda in #2094
- refactor(automation): log failure details for scraping errors by @zevnda in #2095
- fix(achievement-unlocker): respect queue order when running multiple … by @zevnda in #2099
- fix(automation): detect and surface family view blocking requests by @zevnda in #2100
Full Changelog: 6.2.4...6.2.5
Zen Stable Release
New Features
- Update Firefox version to 154.0.1
Fixes
- Improved on session store performance, lowering CPU usage spikes and disk usage when storing the session (#14990)
- Fixed duplicate separator on tab context menu (#15031)
- Fixed minimizing PiP window failing to collapse into the sidebar (#14710)
- Fixed slower access to saved passwords and unexpected Primary Password prompts caused by recent changes to password storage.
- Fixed an issue where addresses were failing to autofill on some sites.
- Other bug fixes and improvements.
This is a small patch release (mostly) set to address some issues discovered in the latest 0.45.0.
Notable changes
1. The nested session detection now works over SSH without having to forward environment variables
2. It's now possible to opt-out of the newly introduced behavior, where scrolling with the mouse inside a pane enters scroll mode. To do so, add scroll_mode_sync false to the configuration.
3. It's now possible to set an explicit theme hue in the config (i.e. dark or light) that will be used if the system doesn't know which theme we're in. To do so, add explicit_theme_hue light # or dark to the config.
4. New feature: it's now possible to start a new session in the foreground or background with a specific running command instead of the default terminal. zellij attach -c foo -- htop for foreground zellij attach -b foo --htop for background.
5. Some issues fixed with notification parsing specifically regarding OSC9 which overloaded the existing OSC99 notification spec (this manifested for some users as excess notifications when saving a file in nvim for example)
6. Fixed some issues with the kitty image protocol clearing on stacked panes and not working until first resize
Full Changelog: v0.45.0...v0.45.1
Please Support the Zellij Developer ❤️
Zellij is a labor of love and is provided free and open-source to anyone who wishes to use it.
Zellij will never display ads or collect your data.
To help sustain the project, please consider a recurring donation so that the developer can pay their bills: https://github.com/sponsors/imsnif
- Fixed AltGr / diacritic input being swallowed by the integrated terminal on Windows. (#63762)
- Fixed goToDefinition opening out-of-worktree entries (#63756)
- Fixed dev container environment variables being logged in full (#63734)
- Fixed OpenCode Go requests that could fail when Zed omitted the session header. (#63714)
- Fixed containers becoming scrollable by a sub-pixel amount, with a phantom full-height scrollbar thumb, at fractional UI font sizes. (#63659)
- Fixed AltGr / diacritic input being swallowed by the integrated terminal on Windows. (#63763)
- Fixed goToDefinition opening out-of-worktree entries (#63757)
- Fixed dev container environment variables being logged in full (#63735)
- Fixed OpenCode Go requests that could fail when Zed omitted the session header. (#63715)
- Antigravity ajanı yeniden çalışıyor: model listesinin biçimi değişmişti, öneri istendiğinde hata dönüyordu.
- Ayarlar'daki model listesi aynı adı iki kez yazmıyor.
- Komut satırı ajanı bir hata döndürdüğünde kart artık boş kalmıyor, hatanın kendisini gösteriyor.
MSI kurulumunu aşağıdaki Assets bölümünden indirin. winget: winget install ZaferKilic.MDPlus
Browse and preview the full catalog at [keyecho.app/packs](https://keyecho.app/packs).
### Features
Sound catalog: browse every released pack (free and paid) in-app; free packs download directly, paid packs unlock with a license key
Purchase flow: buy in the browser and the app activates your packs automatically via the keyecho:// deep link
License management: activate a key, restore purchases by email, and re-download entitled packs
One-click import of v1 sound packs from a previous install (press-only, marked in the pack list)
Audio engine v2: sample-exact lossless slicing, per-key sound variants, and separate press and release sounds
Device-following audio output: sound moves with your default output device
In-app pack preview: audition random keys through the real audio pipeline before switching
Clearer macOS Input Monitoring permission onboarding
### Fixes
macOS: attribute the autostart Login Item to KeyEcho in System Settings
The daily update check now raises a silent balloon once per version. Clicking it asks whether to update. The detail popup footer shows the waiting version while an update is outstanding and that line is clickable. A remembered offer that is not newer than the running build is treated as up to date. A failed automatic check does not clear the last successful offer.
What's new
Seek-bar thumbnails
- Hovering the seek bar on a local file now shows a still-frame preview of that moment, with the timestamp underneath — the same idea as MPC-HC.
- The preview is a fixed 320px wide and takes the source's aspect ratio (scope films go short, 4:3 goes tall). It follows the pointer, hides when you leave or drag, and does not appear for IPTV, live streams or URL sources.
- Clicking the bar lands on the frame you just saw.
- Floating and docked controls place the preview independently so it doesn't cover the bar.
- Turn it off under Settings → Interface → Controls if you don't want it. Default is on.
Full changelog: https://yaak.app/changelog/2026.7.1
🛠️ Fixed
- Fix param edits from one request appearing on its duplicate when switching between them (#617, feedback)
• Fix password manager identities not properly disabling external agents when not wanted
• Fix SSH connections in terminal failing when Windows username contained spaces
• Fix connection entries being put at the bottom after editing instead of the top
## Downloads
You can find all downloadable artifacts below attached to this release. For installation instructions, see the [installation guide](https://docs.xpipe.io/guide/installation).
All artifacts are signed by [Christopher Schnick (BBDA 885A DD3E 0AD0)](https://xpipe.io/signatures/0xDD3E0AD0.asc)
Tip
Join the Ghost Downloader community on Discord: discord.gg/fKfhkPumEM
Improvements 🔧
- CJK font selection now follows the app's language setting and supports Hong Kong/Macau character variants By @i0ntempest @XiaoYouChR
- Reduced macOS app size by removing unused system framework dependencies By @XiaoYouChR
Bug Fixes 🐛
- Fixed Cantonese (粤语) language option not loading its translation (#837) By @i0ntempest
Tip
欢迎加入 Ghost Downloader Discord 社区: discord.gg/fKfhkPumEM
功能优化 🔧
- 中日韩字体选择现在跟随应用语言设置, 并支持香港/澳门字形 By @i0ntempest @XiaoYouChR
- 移除未使用的 macOS 系统框架依赖, 减小应用体积 By @XiaoYouChR
问题修复 🐛
- 修复粤语语言选项无法加载翻译的问题 (#837) By @i0ntempest
Downloads
────────────────────────┬───────────────┬─────────────
Platform │Format │Link
────────────────────────┼───────────────┼─────────────
🪟 Windows │Setup.exe │Download
────────────────────────┼───────────────┼─────────────
🪟 Windows │Portable (.zip)│Download
────────────────────────┼───────────────┼─────────────
🍎 macOS (Apple Silicon)│.dmg │Download
────────────────────────┼───────────────┼─────────────
🍎 macOS (Intel) │.dmg │Download
────────────────────────┼───────────────┼─────────────
🐧 Linux │AppImage │Download
────────────────────────┼───────────────┼─────────────
🐧 Linux │.deb │Download
────────────────────────┼───────────────┼─────────────
🐧 Linux │.tar.xz │Download
────────────────────────┼───────────────┼─────────────
🤖 Android │.apk │Download
────────────────────────┴───────────────┴─────────────
Full Changelog: v4.3.6...v4.3.7
Summary
Interrupted or errored turns stay recoverable: the incomplete assistant message is kept as a candidate, and /recover continues the turn append-only without rewriting history.
Conversation titles can be generated through a dedicated API (POST /experimental/title, plus a genTitle helper) that falls back to a lite model when the preferred one is unavailable or returns invalid output.
TUI voice input is upgraded to a tool-based voice_input protocol: ASR applies caret/selection-aware insert or set, submit stays explicit through the send field, and the call shape is validated so models can drive it reliably.
Also in this release: compaction keeps a summary plus only the API rounds that arrive while that summary is generated, triggers at a flat 90% of the context window, and collapses the post-rebuild tail into an activity log; unused actor spawn/run resume arguments removed so models are pointed at send (already the supported path for waking and continuing a subagent); subagent actor use via exec limited to send; nested exec tool calls persisted and replayable in the TUI; same-session subagents inherit parent permission grants; per-session system prefix frozen in a snapshot for stable prompt-cache prefixes; optional auto_worktree notice (default off); skills updates for mate, pdf-official CJK fonts, and pptx-official image sourcing; plus provider/retry, MCP, compose-next, and build fixes.
中断或出错的回合仍可恢复:未完成的 assistant 消息会保留为候选,/recover 以 append-only 方式续跑,不改写历史。
会话标题可通过专用 API 生成(POST /experimental/title 与 genTitle helper);首选模型不可用或返回无效结果时,会回退到 lite model。
TUI 语音输入升级为基于工具的 voice_input 协议:ASR 按光标/选区做 insert 或 set,发送始终由 send 字段显式触发;调用 schema 经过校验,模型可以稳定驱动。
本版本还包括:compaction 保留 summary 以及生成期间到达的 API 轮次,触发条件改为上下文窗口的固定 90%,重建后的 tail 收成活动日志;删除 actor spawn/run 中未实现的 resume 参数,把模型导向本来就能用的 send;子代理经 exec 使用 actor 时仅允许 send;嵌套 exec 调用会持久化且可在 TUI 回放;同会话子代理继承父级权限;会话 system prefix 冻结进快照以保持 prompt-cache 前缀稳定;可选的 auto_worktree 提示(默认关闭);mate、pdf-official 中日文字体与 pptx-official 配图规则等 skill 更新;以及 provider/重试、MCP、compose-next 与构建相关修复。
Features
- tui: upgrade voice input to the tool-based voice_input protocol (caret/selection insert/set, explicit send, validated schema) by @yanyihan-xiaomi in #2308, #2309
- session: project compaction as a summary plus compression-time tail; fire at a flat 90% of the context window; add MIMOCODE_COMPACTION_MAX_CONTEXT env default by @MiMoHardFather in #2294, #2263, #2260
- session: support append-only interrupted turn recovery (/recover, TUI recover action); keep errored assistants as recovery candidates by @wqymi in #2205, #2279
- session: collapse rebuild tail into a compact activity log instead of replaying verbatim tool results by @wqymi in #2275
- session: freeze the per-session system prefix in a persistent snapshot; move skill catalogs from user messages to the system tail; preserve prompt cache prefixes by @MiMoHardFather in #2289, #2287, #2258
- sdk: expose reliable POST /experimental/title / genTitle with lite-model fallback and write guards by @wqymi in #2228
- actor: drop unimplemented spawn/run actor_id resume arguments; keep send as the path for waking and continuing a subagent by @yanyihan-xiaomi in #2262
- actor: limit subagent actor calls through exec to send only by @wqymi in #2217, #2223
- exec: persist replayable nested tool parts (versioned snapshots, TUI renderers, debounce) by @yanyihan-xiaomi in #2222
- permission: same-session subagents inherit parent grants (fall back to current session id for inherit parent) by @wqymi in #2273
- config: add auto_worktree toggle (default off); path-based once-per-session main-worktree mutation notice by @wqymi in #2227, #2270, #2292
- skill: add mate builtin skill for desktop pet creation by @oscar-cao7 in #2225
- skill: pdf-official CJK font protocol (per-OS TTF ladder, CID STSong-Light fallback, never Helvetica) by @oscar-cao7 in #2189
- skill: pptx-official image sourcing decision rules (draw / cite / search / generate; limited image_gen budget) by @oscar-cao7 in #2265
- provider: route Xiaomi PTC through Responses custom exec; keep exec gateway available under GPT tool filtering by @MiMoHardFather in #2203, #2183
- tool-script: typed exec_command parameters (cmd, yield_time_ms, workdir); resolve MCP-prefixed tool aliases by @MiMoHardFather in #2180, #2202
Bug Fixes
- provider: use 128K output defaults for large model families; align large-model output and compaction reserves by @MiMoHardFather in #2181, #2182
- provider: stabilize defaultModel fallback (cfg → recent → id-asc first allowed; no menu-priority sort) by @wqymi in #2306
- session: centralize provider retry coordination (terminal vs transient, Retry-After, no live-step replay after side effects) by @wqymi in #2216
- session: scope replace-agent base override to main/peer actors so subagents keep their own agent prompt by @MiMoHardFather in #2264
- session: allow relative paths within the workspace for file/search tools by @yanyihan-xiaomi in #2251
- session: defer text part creation until first delta (no empty text shells in DB) by @wqymi in #2193
- skill: replace broken skill-tools filtering with glob prefix matching; remove skill-search reminder infrastructure by @MiMoHardFather in #2166, #2168
- llm-server: advertise Server.listen so mimo llm-server issue resolves a real base_url; publish/unpublish on serve stop by @wqymi in #2293
- mcp: record local startup exit code and stderr tail on stdio failure by @wqymi in #2269
- mcp: show MiMoCode branding in OAuth callback pages and DCR client registration by @MiMoHardFather in #2301
- compose-next: require spec to land in the worktree (pipeline grill → workspace → spec → implement) by @yanyihan-xiaomi in #2307
- actor: scope fork contexts by session so repeated actor ids cannot collide across sessions by @wqymi in #2259
- build: prevent ancestor node_modules bun from hijacking compiled binaries (pin check + process.execPath) by @MiMoHardFather in #2291
- build-node: define MIMOCODE_VERSION for the node target so embedded builds stop extracting under builtin_skills/local/ by @yanyihan-xiaomi in #2297
Refactor
- skill: move drive-mimo to repository scope (.mimocode/skills/) instead of the product-wide builtin bundle by @yanyihan-xiaomi in #2210
- session: simplify harness selection — explicit harness flag is the single source of truth; PTC transport no longer auto-selects the GPT toolset; MIMOCODE_CODEX_MODE=false forces the default harness for every model by @MiMoHardFather in #2243, #2252, #2303
- tool: remove standalone change_directory; require absolute working directories for shell/code-mode commands by @yanyihan-xiaomi in #2239
- prompt: rewrite Tools section as “Using your tools” guidance; instruction files default-on and decoupled from the dynamic system prompt flag by @MiMoHardFather in #2302, #2285
Internal / CI
- session: retune the auto-overflow fixture for the flat 90% trigger by @yanyihan-xiaomi in #2266
- sdk: regenerate openapi and js sdk types (projection schema, harness description, compaction field docs) by @yanyihan-xiaomi in #2310
- chore: bump version to 0.1.14 by @yanyihan-xiaomi in #2311
Full Changelog: https://github.com/XiaomiMiMo/MiMo-Code/compare/v0.1.13...v0.1.14
Summary
Interrupted or errored turns stay recoverable: the incomplete assistant message is kept as a candidate, and /recover continues the turn append-only without rewriting history.
Conversation titles can be generated through a dedicated API (POST /experimental/title, plus a genTitle helper) that falls back to a lite model when the preferred one is unavailable or returns invalid output.
TUI voice input is upgraded to a tool-based voice_input protocol: ASR applies caret/selection-aware insert or set, submit stays explicit through the send field, and the call shape is validated so models can drive it reliably.
Also in this release: compaction keeps a summary plus only the API rounds that arrive while that summary is generated, triggers at a flat 90% of the context window, and collapses the post-rebuild tail into an activity log; unused actor spawn/run resume arguments removed so models are pointed at send (already the supported path for waking and continuing a subagent); subagent actor use via exec limited to send; nested exec tool calls persisted and replayable in the TUI; same-session subagents inherit parent permission grants; per-session system prefix frozen in a snapshot for stable prompt-cache prefixes; optional auto_worktree notice (default off); skills updates for mate, pdf-official CJK fonts, and pptx-official image sourcing; plus provider/retry, MCP, compose-next, and build fixes.
中断或出错的回合仍可恢复:未完成的 assistant 消息会保留为候选,/recover 以 append-only 方式续跑,不改写历史。
会话标题可通过专用 API 生成(POST /experimental/title 与 genTitle helper);首选模型不可用或返回无效结果时,会回退到 lite model。
TUI 语音输入升级为基于工具的 voice_input 协议:ASR 按光标/选区做 insert 或 set,发送始终由 send 字段显式触发;调用 schema 经过校验,模型可以稳定驱动。
本版本还包括:compaction 保留 summary 以及生成期间到达的 API 轮次,触发条件改为上下文窗口的固定 90%,重建后的 tail 收成活动日志;删除 actor spawn/run 中未实现的 resume 参数,把模型导向本来就能用的 send;子代理经 exec 使用 actor 时仅允许 send;嵌套 exec 调用会持久化且可在 TUI 回放;同会话子代理继承父级权限;会话 system prefix 冻结进快照以保持 prompt-cache 前缀稳定;可选的 auto_worktree 提示(默认关闭);mate、pdf-official 中日文字体与 pptx-official 配图规则等 skill 更新;以及 provider/重试、MCP、compose-next 与构建相关修复。
Features
- tui: upgrade voice input to the tool-based voice_input protocol (caret/selection insert/set, explicit send, validated schema) by @yanyihan-xiaomi in #2308, #2309
- session: project compaction as a summary plus compression-time tail; fire at a flat 90% of the context window; add MIMOCODE_COMPACTION_MAX_CONTEXT env default by @MiMoHardFather in #2294, #2263, #2260
- session: support append-only interrupted turn recovery (/recover, TUI recover action); keep errored assistants as recovery candidates by @wqymi in #2205, #2279
- session: collapse rebuild tail into a compact activity log instead of replaying verbatim tool results by @wqymi in #2275
- session: freeze the per-session system prefix in a persistent snapshot; move skill catalogs from user messages to the system tail; preserve prompt cache prefixes by @MiMoHardFather in #2289, #2287, #2258
- sdk: expose reliable POST /experimental/title / genTitle with lite-model fallback and write guards by @wqymi in #2228
- actor: drop unimplemented spawn/run actor_id resume arguments; keep send as the path for waking and continuing a subagent by @yanyihan-xiaomi in #2262
- actor: limit subagent actor calls through exec to send only by @wqymi in #2217, #2223
- exec: persist replayable nested tool parts (versioned snapshots, TUI renderers, debounce) by @yanyihan-xiaomi in #2222
- permission: same-session subagents inherit parent grants (fall back to current session id for inherit parent) by @wqymi in #2273
- config: add auto_worktree toggle (default off); path-based once-per-session main-worktree mutation notice by @wqymi in #2227, #2270, #2292
- skill: add mate builtin skill for desktop pet creation by @oscar-cao7 in #2225
- skill: pdf-official CJK font protocol (per-OS TTF ladder, CID STSong-Light fallback, never Helvetica) by @oscar-cao7 in #2189
- skill: pptx-official image sourcing decision rules (draw / cite / search / generate; limited image_gen budget) by @oscar-cao7 in #2265
- provider: route Xiaomi PTC through Responses custom exec; keep exec gateway available under GPT tool filtering by @MiMoHardFather in #2203, #2183
- tool-script: typed exec_command parameters (cmd, yield_time_ms, workdir); resolve MCP-prefixed tool aliases by @MiMoHardFather in #2180, #2202
Bug Fixes
- provider: use 128K output defaults for large model families; align large-model output and compaction reserves by @MiMoHardFather in #2181, #2182
- provider: stabilize defaultModel fallback (cfg → recent → id-asc first allowed; no menu-priority sort) by @wqymi in #2306
- session: centralize provider retry coordination (terminal vs transient, Retry-After, no live-step replay after side effects) by @wqymi in #2216
- session: scope replace-agent base override to main/peer actors so subagents keep their own agent prompt by @MiMoHardFather in #2264
- session: allow relative paths within the workspace for file/search tools by @yanyihan-xiaomi in #2251
- session: defer text part creation until first delta (no empty text shells in DB) by @wqymi in #2193
- skill: replace broken skill-tools filtering with glob prefix matching; remove skill-search reminder infrastructure by @MiMoHardFather in #2166, #2168
- llm-server: advertise Server.listen so mimo llm-server issue resolves a real base_url; publish/unpublish on serve stop by @wqymi in #2293
- mcp: record local startup exit code and stderr tail on stdio failure by @wqymi in #2269
- mcp: show MiMoCode branding in OAuth callback pages and DCR client registration by @MiMoHardFather in #2301
- compose-next: require spec to land in the worktree (pipeline grill → workspace → spec → implement) by @yanyihan-xiaomi in #2307
- actor: scope fork contexts by session so repeated actor ids cannot collide across sessions by @wqymi in #2259
- build: prevent ancestor node_modules bun from hijacking compiled binaries (pin check + process.execPath) by @MiMoHardFather in #2291
- build-node: define MIMOCODE_VERSION for the node target so embedded builds stop extracting under builtin_skills/local/ by @yanyihan-xiaomi in #2297
Refactor
- skill: move drive-mimo to repository scope (.mimocode/skills/) instead of the product-wide builtin bundle by @yanyihan-xiaomi in #2210
- session: simplify harness selection — explicit harness flag is the single source of truth; PTC transport no longer auto-selects the GPT toolset; MIMOCODE_CODEX_MODE=false forces the default harness for every model by @MiMoHardFather in #2243, #2252, #2303
- tool: remove standalone change_directory; require absolute working directories for shell/code-mode commands by @yanyihan-xiaomi in #2239
- prompt: rewrite Tools section as “Using your tools” guidance; instruction files default-on and decoupled from the dynamic system prompt flag by @MiMoHardFather in #2302, #2285
Internal / CI
- session: retune the auto-overflow fixture for the flat 90% trigger by @yanyihan-xiaomi in #2266
- sdk: regenerate openapi and js sdk types (projection schema, harness description, compaction field docs) by @yanyihan-xiaomi in #2310
- chore: bump version to 0.1.14 by @yanyihan-xiaomi in #2311
Full Changelog: https://github.com/XiaomiMiMo/MiMo-Code/compare/v0.1.13...v0.1.14
What's Changed
- Replace BuiltInAI service with OpenRouter and OrcaRouter by @xiaocang in #199
- Identify Easydict in OrcaRouter usage by @xiaocang in #201
Full Changelog: v0.9.0...v0.9.1
Release Notes
Fixes
- Claude Code 2.1.258 compatibility. Requests now identify as the current
client instead of the legacy 2.1.76 release. Billing attribution also joins
JavaScript UTF-16 code units 4, 7, and 20 before UTF-8 hashing, keeping the
cc_version suffix correct for emoji and surrogate-pair boundaries.
- Portable GNU/Linux archives. Nix-built GNU binaries have their loader
path repaired before packaging, so the release ZIPs run outside the Nix
store on supported distributions instead of failing with “No such file or
directory”.
- Container publication. Multi-architecture image publishing now preserves
the existing sha-<7> tags, produces real amd64/arm64 manifest lists, and
avoids publishing images from manual workflow dispatches.
Changes
- Reproducible release builds. Linux GNU, musl, Android, frontend and
distroless container outputs now use pinned Nix definitions. nix develop
provides the matching stable/wasm/nightly/trunk toolchain, while Windows and
macOS retain their native build paths. The HTTP stack and other dependencies
were refreshed, including the stable wreq 0.16 release.
- Faster, verifiable CI. Linux targets and both container architectures now
build in parallel; exact feature sets, shared frontend store paths and
minimal per-target toolchains avoid redundant compilation. Workflow YAML and
the image-push/tag scheme are also checked locally through xtask before
publication.
## Faster rendering, identical output
This release is internal work again. Nothing about jwtd's output changes, and on an ordinary token nothing about the speed is perceptible:a `jwtd <token>` run takes about 0.88 ms, and roughly three quarters of that is process startup and Go runtime initialization that happens before jwtd's own code runs at all.
What changed is the printer. jwtd rendered its colored JSON with `go-prettyjson`, which marshalled the value back to JSON and re-decoded it before formatting, then assembled the result one string per token — each through `fmt.Sprintf`, each re-deriving its ANSI escape sequences. jwtd already holds the decoded token, so the round trip was pure overhead. The replacement walks the value straight into a single buffer, resolves each color's escapes once per section, and quotes strings through `encoding/json` only when quoting would actually change them.
Where it is measurable — a 725 KB token, far larger than anything you would paste by hand:
| | 5.5.0 | 5.6.0 |
|---|---|---|
| rendering the payload | 7.32 ms | 0.33 ms |
| allocations while rendering | 19.6 MB, 136k | 579 B, ~0 |
| decode and print, end to end | 11.4 ms | 4.3 ms |
| decode and print, ordinary token | 14.6 µs | 4.0 µs |
The last row is the work jwtd does for a normal token, and it is 1 % of the run. Startup dominates, as it did before.
## The output is byte-for-byte identical, and that is tested rather than asserted
`go-prettyjson` is still in `go.mod`, now as a **test-only dependency**, so the formatter that replaced it can be held to its output byte for byte:over enumerated value shapes and 200 seeded-random JSON values, with color on and off. A second differential test pins the cached ANSI escapes against `fatih/color` itself — and earned its keep immediately, catching that the library's `Sprint` family closes with a reset per attribute while its `Fprintf` family closes with a plain reset. Conflating the two would have quietly changed the dimmed reason line under a failed verdict and the JWE encrypted-part listing.
Beyond the test suite, 129 invocations of the 5.5.0 and 5.6.0 binaries across 15 tokens and 9 flag combinations produce identical bytes, exit codes and stderr included.
## Also in this release
The escaping pass that sanitizes formatted JSON for the terminal had a fast path that never ran when color was on:it required printable ASCII, and colored output always carries the ESC bytes of its own color codes. It now admits them — everything that pass rewrites is DEL or above — which takes it from 612 MB/s to 4,214 MB/s on colored output, the interactive default.
The repository also gains a benchmark suite covering the parse, render, escape, and signature paths, so performance claims about jwtd can be checked instead of argued. One of them exists to record a limit rather than to invite tuning:decoding the payload is now the largest remaining cost, and it is already at the standard library's floor for a decoder that must preserve exact numeric claim values.
**Full Changelog**:https://github.com/webcodr/jwtd/compare/v5.5.0...v5.6.0
## Changelog
### Bug Fixes
* 87afc069c5ce6a37b13db58989ec0f30d9b87217 fix: make the release archives reproducible across builders (#511)
Completed with unavailable packages
Versions recorded
Apps represented
First tracked apps
Record type
Apply filters
Counts reflect your filters. Dates show when IntuneGet first recorded a version.
Clear filters
Publisher release:
Not scanned for this installer
Release notes
Page of
Next
About this history
VirusTotal results apply to the exact installer hash shown and reflect the recorded scan date. Zero detections do not guarantee safety. This is an observation history, not a complete archive of publisher releases. First tracked means the earliest version we have recorded for an app, including apps imported when tracking began. It does not necessarily mean a newly released product. Versions missed between syncs may be absent. A version change may also reflect an upstream rollback.
Available records begin:
Publisher dates appear only when provided by the manifest.