TypeScript library and local-first platform. Made by @steida

Prague, Czech Republic
Joined August 2012
Pinned Tweet
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.
1
1
1
5
568
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…
187
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
2
1
3
1,582
"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
1
1
200
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
1
8
795
writing code is dead, long live reading tests, er, learning formal verification then formalizing all the things
1
1
2
7
3,454
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.
2
1
2
3
2,777
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 🪪
4
7
575
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.
3
1
7
1,075
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.
2
10
572
Because dependencies are explicit, tests are deterministic. testCreateRun provides test time that starts at 0, seeded randomness, a captured console, collected defects and leak detection. Swap in any dependency you need, with no mocking framework.
1
96
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
1
1
94