It is still young, but I found it is already quite suitable for building js lib that needs advanced data structure and algorithm. It is such a pain to write those things in JS directly without proper std lib.
It is still young, but I found it is already quite suitable for building js lib that needs advanced data structure and algorithm. It is such a pain to write those things in JS directly without proper std lib.
Iβve built several things with it. Itβs evolving fast and the DX is quite good. For example, its inspect snapshot test is unique and super useful, combining with its unique way to represent string with `#|`.
The Loro Protocol repo is now open source!
It contains documentation for the wire protocol, along with TypeScript and Rust implementations of WebSocket clients and servers.
The protocol allows reusing a single connection to join multiple CRDT rooms, such as Loro documents or the Ephemeral Store.
Loro Inspector is here! Now you can directly browse the current state and complete edit history of your Loro documents in the browser. You can also use this tool to time travel to any version in the history of your Loro document.
Code screenshot: // First we define our components const Name = defComponent( // Components should all have globally unique identifiers. "01JNVY76XPH6Q5AVA385HP04G7", // Components are defined in terms of a Loro type LoroMap<{ first: string; last?: string }>, // We pass a function to initialize the component state to match it's type. (map) => map.set("first", "unnamed") ); // Let's make age a counter const Age = defComponent("01JNVYC0T0V6SDKDWQP51MYKS1", LoroCounter, (age) => age.increment(1) ); // Now we can create our entity, which is internally a Loro document. const ent = new Entity(); // We can check which components an entity has ent.has(Name); // false // We can get a component, initializing it if it doesn't exist. const name = ent.getOrInit(Name); // We get then get fields on the component name.get("first"); // unnamed // And set them too! name.set("last", "person"); // Happy birthday π₯³ π ent.getOrInit(Age).increment(1);
Just implemented the first working attempt at an Entity-Component API on top of the @loro.dev CRDT.
It's a super work-in-progress start to the new Leaf SDK that will be powering @roomy.chat and a.weird.one.
Personal software has been trending recently.
I enjoyed reading @leerob.com's "personal software" and @edmarferreira.bsky.social 's "selfish software". Hope you enjoy them too!
xuanwo.io/links/2025/0...
Diving into Loro on stream today. Local-first, CRDT library written in Rust. Excited to explore it deeper! Starting in one hour.
It's so hard to feel this warmth from interactions on social platforms these days π₯Ή
The animated gifs and illustrations in @loro.dev's docs are delightful. Finding these docs to be an enjoyable and readily comprehensible introduction to CRDTs. Thanks @zxch3n.com!
New version control primitives have been added to Loro:
- diff(from, to): calculate the differences between any two versions
- revertTo(version): Generate ops to revert to the target version
- applyDiff(diff): Apply differences
You can use them to implement functions like git squash and revert.
Joseph Gentle
just watched DJs coding Haskell live?!
83 GB
diagram showing how two phones will use a new app called "skyroh" to talk to each other over p2p communications channels, and the regular bluesky API
Ok, a rundown of how we get p2p ATProtocol going:
1. Run *standard* ATProto services, locally
2. Use p2p to holepunch TCP connections
3. Add a thin layer for peering management
Bundle all that up in an app, and we have a recipe for adding resilience & scaling to Bluesky. π§΅ teim:
No, they are expected to be deleted
Sounds like a binding error
@loro.dev is also worth a try!
They can stick with the old version
They have to provide the best timeline with an acceptable privacy policy (though it sounds hard). Otherwise, consumers may leave, putting them in a very different position than previous products. If this becomes a trend, I wouldn't be surprised if people call it the next generation of the Web.
From another perspective, we can also think that their design forces them to compete more fairly for advertising business with other app views or recommendation streams without the network effect advantage.
Thanks for the elaboration!
bisecting issues is much easier in a linear history
Was listening to *City of Stars* and saw this π
Yeah, I'd like to build upon that
Once ATProtocol has formed network effects and is sustainable, future companies can explore more ethical business models in this decentralized ecosystem.
Although I am excited about the next generation of the web, such things have never been accomplished by a single company alone. I hope that Bluesky can take a pragmatic approach (rather than pursuing innovation in everything) and prioritize the sustainability of the ATProtocol ecosystem.
I also look forward to seeing different business models or using user devices to provide computing power to reduce marginal costs. But if Bluesky has to make another bet on a different business model for reasons like "ethical" considerations, the chances of failure would be too great.
Bluesky has already made a significant bet on ATProtocol and may have exhausted its innovation budget. It's unrealistic and unfair to require a company to build everything in an innovative and "ethical" way.