Every release so far has added something: lessons, feeds, publishing, a phone app. This one doesn't. This one is about the thing underneath all of that β how Chervil feels while you're actually using it.
It started with a sentence from my own notes: "I'll go to do something and it seems locked up, but then it will do the thing I want it to do, like go to a new tab."
That turned out to be real, measurable, and much worse than I thought.
The app was locking up for half a second at a time
Chervil saves your session β tabs, settings, bookmarks, history β constantly, so that a crash never costs you anything. The saving worked fine. The problem was how it saved.
It blocked everything. The window, the tabs, the tray, every bit of the app, all frozen while the file was written. And because saving is triggered by basically anything you do β switching tabs, sending a message, ticking a checkbox inside a composed page β it ran on a half-second timer the entire time you were working.
I measured it by pinging the app while a save was in flight. One save froze it for about 450 milliseconds. On a half-second cycle. So during active use, Chervil was unresponsive more often than it was responsive. That's the "it seems locked up, then it catches up" feeling exactly β your click did land, it just sat in a queue.
Saving now happens out of the way. Same measurement: about 11 milliseconds.
And the file it was saving kept growing
While I was in there I found the reason it was so slow. A while back, Chervil moved your composed pages out of the session file and into a proper local index β a real database, searchable, much faster. That migration worked.
But the merge that keeps your session in sync between computers was quietly writing those pages back into the session file on every single save. So the file could never shrink. It just carried the same megabytes around forever, and rewrote them every half second.
On my own profile it went from 3.17 MB to 1.51 MB on the first save after the fix, with nothing lost. If you sync Chervil between machines, that still works exactly as before β pages coming from a computer on an older build are still picked up and filed away properly.
One more, related: every time you alt-tabbed back into Chervil, it scanned your sync folder for conflict copies. Useful, but not every single time you look at the window. Once a minute is plenty.
Chat now answers in under half a second
Here's the one you'll feel most.
Chat mode used to show you "Sprig is typingβ¦" for the entire length of the answer, then drop the whole thing on screen at once. Composed pages have streamed as they're written for ages β you watch the page build. Chat justβ¦ didn't.
The infuriating part, when I went looking: the words were already arriving. Every one of them, token by token. The code was receiving them and throwing them away, then waiting for the finished text. The pipe that composed pages use had been sitting right there the whole time. Chat was never plugged into it.
It is now. Replies stream into the conversation as Sprig writes them, with a Stop button that does something β and stopping keeps what he already wrote. Half an answer is still an answer. (That's different from a composing page, where half a page is just a broken page, so Stop still throws that away.)
Time to the first word went from 4.5 seconds to 0.4.
Which model answers you in chat is now your call
That 0.4 number comes with an asterisk worth explaining, because it taught me something.
Streaming alone didn't get me there. It helped β but I was still waiting about three seconds before a single word appeared. The reason: I was chatting with a reasoning model, and a reasoning model thinks before it writes anything. Streaming can't fix a wait that happens before there's anything to stream.
So Settings β Chat now has a Chat model dropdown. A faster model by default, your main model if you'd rather, or any specific model your provider offers β pulled live from your own account, so it only ever lists models you actually have.
It changes chat and nothing else. Composed pages, Deep Dive, skills, agents β all still your main model. Chat is a conversation you're sitting there waiting on; a page is something you want done properly. Different jobs, and now you can point different models at them.
On the same three questions, same provider: the reasoning model took 6.1 seconds to the first word. The non-reasoning one took 0.4.
Your Trash was keeping everything, forever
Pages you delete from the Library go to the Trash so you can get them back. Reasonable. What wasn't reasonable: nothing ever took them out again.
There was no expiry. No cleanup. The only way anything left the Trash was you clicking Empty. And composed pages aren't small β one with an illustration runs about 150 KB β so a Trash you'd never emptied was quietly the biggest thing Chervil had on disk.
Worse, it under-reported. The Trash list only ever showed 100 items. Anything past that was invisible and still taking up space. I had 113. Thirteen of them I couldn't see.
Now:
- Deleted pages are removed after 30 days. Change it or turn it off under Settings β Your Web β Trash, which also shows you what's actually in there β real count, real size, and how old the oldest one is.
- The Trash tab warns you when it's heavy β past 50 MB or 200 pages you get a bar with the true numbers and an Empty now button.
- Emptying it actually reclaims the space. It used to delete the rows and leave the file the same size. Now it compacts, the way the other privacy controls always have.
When your AI provider is busy, Chervil waits instead of giving up
If your provider hits a rate limit β too many requests in too short a window β it replies "not right now." That's normal and it clears in seconds.
Chervil used to hand that straight to you as an error. Which meant the fix was: read a confusing message, and try again yourself. And trying again worked, which made the whole thing feel arbitrary.
It now waits and retries β up to three times, honouring the delay the provider asks for, with a short "retrying" note so you can see what's happening. Claude has always done this internally; Grok, Gemini, OpenAI and Azure now do too.
The same fix landed in Chervil Chat on your phone, where this was showing up as "Sprig couldn't reply." Chat turns there also get enough time to finish now, instead of being cut short by the server while the model was still thinking.
And your chat prompts got cheaper
A small one with a real bill attached. AI providers will cache the repeated part of your prompt and charge much less for it β but only if that part is byte-for-byte identical every time.
Chervil was writing the current time near the front of every chat prompt. Which meant the prompt changed every minute, and nothing after it could ever be cached. Everything β your profile, the whole page you were asking about β got charged at full price on every single message.
The clock now goes at the end, where it belongs, and the reusable part is explicitly marked for caching.
Why this release, and not another feature
I'll be honest about the reasoning. Chervil has a lot in it now β Your Web, feeds, lessons, publishing, agents, a phone app. And somewhere in there I noticed I was adding faster than I was maintaining.
A browser competes on feel before it competes on anything else. Someone trying Chervil for the first time forms their whole opinion in about ten minutes, and in those ten minutes they type into a box and wait. It doesn't matter how much the app can do if it stutters while they do it.
So: no new vertical this time. Sprig put the coveralls on and went round with a wrench.
Back to building next week.
Download Chervil 0.24.0 β free and open source. Or try Chervil Chat on your phone if you're Pro.
