v0.69.1
charmbracelet/crushv0.69.1May 15, 2026by github-actions[bot]
AI Summary
Performance release focused on optimizing UI rendering for long sessions, long messages, and streaming content.
Key Highlights
- Cached assistant message parts separately
- Only render visible chat lines
- Skip re-rendering unchanged chat items
- Batch streaming message updates
- Show only tail of long reasoning blocks when expanded
New Features
- UI performance optimizations for long-running sessions
Full Release Notes
# It’s Perf Time This release is all about juicin’ UI perf. We did a ton of work around it, and it should be particularly noticeable with long sessions, long messages, long, open-toggled thinking blocks, mouse selection, scrolling and stuff like that. We always strive to make the Crush user experience top-notch, so if you notice any places where perf _is_ suffering please let us know! Have a great weekend, The Charm Team ## Changelog ### Fixed * 646a5053bd58635316bf960f3d8e5d4a0996a24b: fix(ui): keep tool spinners animating during long-running tasks (@meowgorithm) ### Other stuff * 30f9c6ed55daf68b5ee5cc6a3f0fcebbf2559252: chore(ui): make spinner deterministic for testing (@meowgorithm) * 8370edb6910e3044f0e7e375685431110a3eac9c: perf(chat): cache the parts of an assistant message separately (@meowgorithm) * 771117cafeedffc8a9b5859503fc055bcd525d3e: perf(chat): cache the prefixed render of chat messages (@meowgorithm) * 77b6c38b0fb150d97dbce466f737d1217e5a7604: perf(chat): only render the chat lines that fit on screen (@meowgorithm) * 1c7ccfd7f78853dd86598eeef103f4ac0c29e8b2: perf(chat): reuse the rendered prefix of a streaming reply (@meowgorithm) * 43b986c8c00a81b83fcf0422d5334ad61ab046c8: perf(chat): show only the tail of long reasoning blocks when expanded (@meowgorithm) * 65f30a13430a93ef3f271adb3cee4b535ade3de6: perf(chat): skip re-parsing the rendered chat when nothing has changed (@meowgorithm) * 6b101f38600cd4e4b974ee56af3c9d2382cc2c43: perf(chat): skip re-rendering chat list items that have not changed (@meowgorithm) * 6938dedd6cde0378f428b2a90d1591f69dbce6eb: perf: batch streaming message updates (@meowgorithm) --- <details> <summary>Verifying the artifacts</summary> First, download the [`checksums.txt` file](https://github.com/charmbracelet/crush/releases/download/v0.69.1/checksums.txt) and the [`checksums.txt.sigstore.json` file](https://github.com/charmbracelet/crush/releases/download/v0.69.1/checksums.txt.sigstore.json) files, for example, with `wget`: ```bash wget 'https://github.com/charmbracelet/crush/releases/download/v0.69.1/checksums.txt' wget 'https://github.com/charmbracelet/crush/releases/download/v0.69.1/checksums.txt.sigstore.json' ``` Then, verify it using [`cosign`](https://github.com/sigstore/cosign): ```bash 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.txt ``` If the output is `Verified OK`, you can safely use it to verify the checksums of other artifacts you downloaded from the release using `sha256sum`: ```bash sha256sum --ignore-missing -c checksums.txt ``` Done! You artifacts are now verified! </details> <a href="https://charm.land/"><img alt="The Charm logo" src="https://stuff.charm.sh/charm-banner-next.jpg" width="400"></a> Thoughts? Questions? We love hearing from you. Feel free to reach out on [X](https://x.com/charmcli), [Discord](https://charm.land/discord), [Slack](https://charm.land/slack), [The Fediverse](https://mastodon.social/@charmcli), [Bluesky](https://bsky.app/profile/charm.land).