Who loves perf?
Perhaps the more apt question, is, “Who doesn’t love perf?” Presumably no one. Anyway, this release juices performance and fixes some regressions. Read on for more.
Semaphores galores
A few releases ago, we added a mutex so Crush can wait for LSP servers to complete their diagnoses. That was cool, except it ate CPU like @caarlos0 in a steak house. In this release that doesn't happen anymore.
Cache money scrolling
The valiant @aymanbagabas worked in some caching to noticeably improve scrolling performance, specially on large sessions. Enjoy!
Infinite loops now finite
The great thing about open source is that you can take matters into your own hands. That's exactly what contributor @huaiyuWangh did when he noticed LLMs going crazy and getting stuck in agent loops. Thanks to him, Crush will gently halt models spinning out of control. This was particularly common with local models and models with small context windows.
RISC-V Bonus
We know you all secretly love RISC-V. Contributor @wallacegibbon has enabled image pasting on RISC-V, which honestly rocks. If you haven't used image pasting in Crush yet, pick a model with image support (like Kimi K2.5), copy an image to the clipboard and ctrl+v.
See you in the next release,
Charm 🍔
Changelog
Fixed
- 7ac4061: fix(lsp): properly remove clients from map on stop/kill (@andreynering)
- 2656a18: fix(ui): cache blurred and focused renderings separately for assistant messages (#2252) (@aymanbagabas)
- e471e75: fix(ui): early exit AtBottom() when totalHeight exceeds viewport height (@aymanbagabas)
- 540deef: fix(ui): toggle pills to follow scroll (#2218) (@aymanbagabas)
- af86738: fix: detect and stop tool call infinite loops (#2130) (#2214) (@huaiyuWangh)
- 7fe592d: fix: make reasoning effort dialog smaller (#2247) (@andreynering)
Deps
- 44c7535: fix(deps): update
go-nativeclipboardversion to compile to RISC-V. (#2216) (@wallacegibbon)
Other stuff
- ddf2fad: chore: update fantasy with fix for json schema in openai (#2221) (@andreynering)
- df0dfbe: ci(labeler): add minimax label (@andreynering)
- eecb1bf: perf: remove mutex from lsp manager (@caarlos0)
- 699c8d7: refactor: simplify some code by using
cmp.Or(#2253) (@andreynering)
Verifying the artifacts
First, download the checksums.txt file and the checksums.txt.sigstore.json file files, for example, with wget:
wget 'https://github.com/charmbracelet/crush/releases/download/v0.43.1/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.43.1/checksums.txt.sigstore.json'Then, verify it using cosign:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--bundle 'checksums.txt.sigstore.json' \
./checksums.txtIf the output is Verified OK, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum:
sha256sum --ignore-missing -c checksums.txtDone! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on X, Discord, Slack, The Fediverse, Bluesky.