
TypeScript library and local-first platform. Made by @steida
Prague, Czech Republic
Joined August 2012
- Tweets5.8K
- Following3
- Followers3.5K
- Likes3.4K
Where Evolu 8 stands 🧵
Evolu has run in production in Trezor Suite for 8 months, with the Trezor device providing the AppOwner.
For everyone else, it's not ready yet. What's missing is the owner story: how any app gets its AppOwner, for unencrypted and encrypted databases.
For apps built on Evolu: a skill for coding agents that checks an app's install settings and verifies the Evolu releases it uses, including the approver, the provenance, and the digest of the relay image.
github.com/evoluhq/evolu/blo…
Evolu retweeted
i noticed that more and more people write like this. no capital letters, no period at the end of a line. it saves typing, and it removes noise when eyes parse the text, so i gave it a name: leancase
then i made the rules exact. links, mentions, hashtags, and code keep their case, because changing them can break them. an ellipsis stays...
converting leancase text again changes nothing, so leancase is a normal form. evolu now has a function that converts text to it and a type that validates it. property tests found a bug the examples missed, and a proof in lean would make it certain
is this a joke? half a joke, half serious
the rules, the edge cases, and a converter you can try:
evolu.dev/blog/leancase
"The world is awash with electronic devices equipped with microphones and capable of recording speech. Add in biometric recognition, emotional screening, and similar audio analysis technology, and you have a context in which it has become very difficult to speak anonymously. This not only threatens individual privacy – particularly in places where censorship or retaliation are a concern – it is also of obvious concern for sensitive intelligence operations where the ability to speak anonymously can mean the difference between life and death."
galois.com/project/voxlet
Evolu retweeted
the real reason maintainers are disabling PR from external contributors is that they don't need them anymore
also because they're totally overwhelmed with their own bug reports and feature requests
contributors are just the first thing devs won't need anymore
Evolu retweeted
writing code is dead, long live reading tests, er, learning formal verification then formalizing all the things
Evolu retweeted
AI is nerd-sniping the world.
Some say "AI is eating software," a nod to "software is eating the world," but that's too shallow. AI is software too, and while it's eating software, it's also producing new software in unprecedented quantity and quality. That has a nice side effect: it separates the wheat from the chaff. That's why, as someone wrote, everything is fake now, yet genuine things are growing more than ever.
For developers, this means they have to learn completely new skills or they'll lose their jobs. But it definitely doesn't mean there will be less work, because humanity now has an invention that can make the whole world vastly better, and there's a hell of a lot to improve. And it's not just about developers, it's about everyone, which brings me back to the title. So for me, it's absolutely great.
Evolu retweeted
Thanks for sharing 🔥
..and participation during the workshop part. Btw. check the mentioned @evoluhq project. It enables having all the devices in sync. 💪
. @HynekJina presents linky.fit
“Send Bitcoin like a message” powered by Cashu, Nostr, and “Evolu”
Pay a bank transfer with Bitcoin! There is an in-app marketplace to offer fiat payments for others to fulfill on your behalf.
No phone number, email, ID 🪪
Evolu retweeted
What I really don't understand is why most runtime validation libraries don't have typed errors.
Zod 4 returns a ZodError (an Error instance) whose issues are one generic union for all schemas, each with a pre-built message string. Effect Schema 4 fails with SchemaError (also an Error) wrapping issue objects that hold schema AST nodes. Valibot comes closest: its issues are plain objects typed per schema, but each one still carries a pre-built message.
In Evolu Type, an error is just data: { type: "Int", value: 37.5 }. You can switch on it, store it, send it across a worker, and format it later, in any language. A missing translation is a compile error.
Evolu isn't only local-first. Under it is the Evolu Library, a TypeScript standard library in @evolu/common, and you can use it on its own.
Its goal is maximum correctness. Local-first data lives on users' devices, where you can't inspect it or repair it, so a bug must not quietly corrupt it.
If you want something like Effect but written as plain TypeScript, this is another option.
There's more: Result, Schedule, Time with separate wall-clock and duration readings, Redacted for secrets, Resource and Store.
How we keep it correct: every documentation example is executed as a test, the code is tested in Chromium, Firefox and WebKit, and our conventions are written down.
Start here: evolu.dev/docs/library








