Advertisement · 728 × 90

Posts by zx

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.

4 months ago 1 0 0 0
Post image

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 `#|`.

4 months ago 1 0 1 0

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.

5 months ago 9 2 1 0
Preview
Loro – Reimagine state management with CRDTs – Loro Loro - Reimagine state management with CRDTs | Built for local-first software.

loro.dev

10 months ago 0 0 0 0
Video

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.

11 months ago 21 4 1 0
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);

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.

1 year ago 42 7 3 1
Post image

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...

1 year ago 21 4 2 0
Preview
Loro Is Local-First State With CRDT This lib has some big promises. Let's dive in! Wait, is it written in Rust? https://github.com/loro-dev/lorogoing inhttps://github.com/jbolda/local-first#liv...

Diving into Loro on stream today. Local-first, CRDT library written in Rust. Excited to explore it deeper! Starting in one hour.

1 year ago 7 1 1 0
Advertisement

It's so hard to feel this warmth from interactions on social platforms these days 🥹

1 year ago 4 0 0 0
Post image

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!

1 year ago 11 1 0 0
Post image Post image

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.

1 year ago 14 3 1 0

Joseph Gentle

1 year ago 4 0 0 0
Preview
GitHub - tidalcycles/Tidal: Pattern language Pattern language. Contribute to tidalcycles/Tidal development by creating an account on GitHub.

They were using github.com/tidalcycles/...

1 year ago 5 0 0 0
Post image Post image Post image Post image

just watched DJs coding Haskell live?!

1 year ago 19 1 2 1
Post image

83 GB

1 year ago 2 0 0 0
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

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:

1 year ago 128 31 8 11

No, they are expected to be deleted

1 year ago 1 0 0 0
Advertisement

Sounds like a binding error

1 year ago 1 0 0 0

@loro.dev is also worth a try!

1 year ago 1 0 1 0

They can stick with the old version

1 year ago 0 0 1 0

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.

1 year ago 0 0 0 0

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.

1 year ago 0 0 1 0

Thanks for the elaboration!

1 year ago 1 0 1 0

bisecting issues is much easier in a linear history

1 year ago 2 0 0 1
Post image

Was listening to *City of Stars* and saw this 😭

1 year ago 1 0 0 0

Yeah, I'd like to build upon that

1 year ago 0 0 0 0
Advertisement

Once ATProtocol has formed network effects and is sustainable, future companies can explore more ethical business models in this decentralized ecosystem.

1 year ago 1 0 1 0

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.

1 year ago 1 0 2 0

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.

1 year ago 0 0 1 0

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.

1 year ago 1 0 1 0