I haven't empirically tested, but considering how much heavier pyodide is than a v8 runtime, this likely eats in 10's of MBs more into the worker memory allocation.
Weird. That's definitely not my experience. On the $100 plan and I can burn my entire week's budget in a few hours easily with Astra. It's borderline unusable.
People often use a bunch of subagents, poor context management (though Codex's tight context limits and constant compaction tend to mitigate this), a bunch of projects at once, etc., as well as not using workflows that do heavy planning once up front and then consult it rather than thinking endlessly about what to do during the implementation part.
It's also the case that working on massive codebases is just a different beast. If they've been slopmining a monorepo for months with 200x, then their codebase is probably Lovecraftian at that point and requiring extensive effort to iterate on.
i am on just the $20 plan and I am using it literally almost all day, 2-3 different projects at the same time, and I am failing to run out! I am naturally always trying to be efficient, its a weird personality trait I have, where I don't try to but I willingly choose to use GPT-6-Luna most of the time now (well 5.6 before that) More Sol lately and for most tasks.. they seem to have the same output, its only super hard things where I kick it up to Astra.
I am so used to doing planning with the best models and switching to Luna, Deepseek 4.1 Flash (really, the cheapest model, and often much better results for lots of things) really people are limiting themselves when they only use one company's models. You really gain a TON by treating each one more like different people with diverse range of personalities, passions, skills, and knowledge.
Today, ChatGPT desktop app was tasked with making 7 variations of new versions of some existing websites of mine - and they all kinda looked the same. I did get lazy with it though.... I can solve that probably, with skills/changing the default frontend skills but also just sending the same task to Reasonix Code w/ deepseek, and some other models, gets some good wide range of outputs.
> Reasoning models sometimes put everything in the reasoning field and hand back content: null, finish_reason: "stop". 345 completion tokens, HTTP 200, nothing to show the user.
This is actually expected behavior. No content and no tool call is the same as content-only: the agent decided it's done. Anthropic has done this for a while.
So… it’s not durable? Durable doesn’t mean “survives a process restart”, it means “durably saved to persistent storage”. For example, this “durable” mode wouldn’t survive power loss.
Pretty much... paranoid() seems to be the real durable() which isn't a great look for a database project.
Being able to recover a db without corruption beyound losing the last few writes is a pretty useful feature, and buys a lot of performance, but it would be better to label that clearly, as a reasonable expectation on the durable() preset would be for it to be Durable.
As of a couple years ago, mmap actually has a MAP_SYNC flag that makes it durable in the DB sense. The caveat is that it requires DAX on the file and so comes with a whole bunch of restrictions w.r.t. filesystem, storage media and even CPU architecture.
You're right, that mode provides process crash recovery, not power-loss durability. The benchmark compares it against fjall’s equivalent buffered-WAL mode.
Word choice matters. Defaults matter. People will go "well it says durable right here" and while arguably, yes, they should RTFM, it would still be great if tool-builders did not set the shotgun's default state to State::AT_FOOT. It would be nice if every paragraph of technical writing that I have to do need not be burdened by a thousand asterisks of "durable in this context means something other than durable".
Agreed. Good design is when the things do what you expect them to do without reading the manual, don't reuse wording with other meaning in the wrong way. That way if you do encounter nee wording, you know you should read the manual.
Indeed, a common enough pattern for etcd is to run it backed by a RAMdisk and have multi-az availability + periodic backups + tolerance at a business level to be OK losing some recent data.
I give a little leeway to distributed systems that replicate and don't flush since there's a bit of middle ground assuming they're in different fault domains. Garage object storage defaults to that
However, this doesn't appear to be the case here...
Unsurprisingly, performance goes to crap when sync is enabled.
Absolutely. If they just dirty some pages in memory and return back to the client the benchmarks will look "insanely fast".
I have nothing against this being a non-default option in a db/kv engine but anything advertising to be durable and not fsyncing by default is something I would stay away from. To me it's like a litmus test of how well the author knows/cares data durability and not destroying users data.
durable() syncs periodically on flush, WAL rotation, and clean close; paranoid() is the sync-before-ack mode. This is clarified in the README, and the benchmarks report all three modes separately. Other KV-stores that you see on the market, do this too. It's a performance tradeoff most applications make. Sync on every write kills every optimization. See the benchmark table for example.
Is fsync needed for every write in all projects?
I am willing to trade database speed for the loss of the last written data within a 1-10ms window once or twice a year for non-financial and other non-critical data. So, power loss shouldn't be such a frequent event when there are active transactions at that moment, right?
I hate these "The best X thing Y has ever released".
Unlike when Apple says "it's the best iphone we've ever made", LLMs are more or less interchangeable. So "OpenAI's best model" means nothing if "Anthropic wipes the floor with them" or "[open weights model] is 10x cheaper for 1% less quality".
As a reader, it feels like these titles are click bait.
reply