Hello, UI Rewrite
Hi! Today we're releasing a complete rewrite of the UI portion of the codebase. We vastly simplified and flattened the UI code, putting into practice our current thinking on how complex Bubble Tea applications should be architected. ✨
This means you get:
- Considerable performance improvements and a snappier UI
- A much better experience in long sessions
- The ability to contribute to the codebase easier than ever
What’s that you say? “Handsome Charm team, I need features?” Well, allow us to tell you more.
History navigation, freakin’ finally
Yeah! Now you can press up and down to cycle through past prompts, just like in Bash, VSCode, and lots of other tools. Enjoy!
Better session management
Sessions are great, but let’s face it: sometimes you want to wipe one of them off the face of the Earth. Other times you want to rename them because the LLM just didn't quite get the title right. Now you can.
In the session dialog:
- Rename sessions with ctrl+r
- Delete sessions with ctrl+x
Expand and contract
That’s what my stomach does through out the day. It's also what you can now do with items in the chat.
- You can now click on code, diffs and thinking blocks to expand/collapse.
- The sessions dialog will now show the last updated time of each session.
Other good stuff
- Better compatibility when dragging and dropping files into the chat
- Improved selecting and copying text from the chat
- You'll now see exactly what provider you're using in the sidebar, panel, and in message footers
Let us know what you think in Slack and Discord and keep an eye open for more enhancements coming soon.
Keep crushing it!
Charm 💘
Changelog
New!
- d0ed2c5: feat(ui): transparent mode (#2087) (@caarlos0)
- ea8c39f: feat: add configurable timeout for LSP initialization (#2075) (@huaiyuWangh)
- bf1c65e: feat: release new ui refactor (#2105) (@andreynering)
Fixed
- 0979bd3: fix(styles): increase text contrast in active session deletion item (@meowgorithm)
- e6a4896: fix(ui): ensure
%d Queuedtext is visible (#2096) (@andreynering) - 56769bb: fix(ui): fix permissions dialog rendering on small windows (#2093) (@andreynering)
- 0cbaacd: fix(ui): scroll to expanded item (#2088) (@aymanbagabas)
- 3c8be69: fix: fix pasting files on some terminal emulators (#2106) (@andreynering)
Other stuff
- d4b9b35: chore(style): add specific style for session rename placeholder (@meowgorithm)
- 7c5d6ca: chore(styles): make rename style definitions match UI language (@meowgorithm)
- 02ec682: chore: auto-update files (@charmcli)
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.39.0/checksums.txt'
wget 'https://github.com/charmbracelet/crush/releases/download/v0.39.0/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.

