zx

zx

@zxch3n.com

Founder of @Loro.dev https://github.com/zxch3n

739 followers204 following71 posts

Proud to have shipped this with the community. The biggest footgun is fixed! In many “data loss” reports, the data wasn’t gone — it was made inaccessible by map child container overwrites. This class of bugs is now preventable

Loro@loro.dev

New in Loro: Mergeable Containers! Concurrent Map child container creations no longer overwrite. This surprising overwrite issue existed in Loro, Yjs, and Automerge. Happy to finally ship a solution!

zx reposted

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.

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

This post is unavailable.

zx reposted

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.

zx reposted

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:

The slides for the talk are available here: loro-slidev.vercel.app

Yonz@yonz.bsky.social

Join us for #LoFi/21 on Tuesday, November 26th, 2024, @ 8 AM PST 👉🏽 lofi.so. We have yet another exciting lineup featuring Felicia Chang (x/@felchang) from x/@jamsockethq, Sahil Lalani (x/@SahilLalani0) and Zixuan Chen (x/@zx_loro) from x/@loro_dev #localfirst #lofi #meetup

zx reposted

Catch the deets at our upcoming LoFi/21 meetup 👉🏽 lofi.so

zx@zxch3n.com

Loro 1.0 is here! Introducing stable binary document format, blazing-fast import speed, Git-like shallow clone, enhanced version control, and more. loro.dev/blog/v1.0

zx reposted

Join us for #LoFi/21 on Tuesday, November 26th, 2024, @ 8 AM PST 👉🏽 lofi.so. We have yet another exciting lineup featuring Felicia Chang (x/@felchang) from x/@jamsockethq, Sahil Lalani (x/@SahilLalani0) and Zixuan Chen (x/@zx_loro) from x/@loro_dev #localfirst #lofi #meetup

zx reposted

We are developing a local-first map community powered by ATProto - share your favorite cafes, discover your neighborhood, and explore new places wherever you go 🗺️☕️

Peter W🤓@wang.social

I want to create an incubator that funds atproto/bluesky experimental projects to the tune of $5k-$10k dev grants. I am sorely tempted to call it “Chemtrails”, because it seeds the ATmosphere Hit me with your best ideas!

Myers diff may generate weird deltas like the following example. It will make concurrent text updates generate weird merge results. Any suggestions? My current thought is to implement an A* search on top of the edit graph that punishes noncontinuous edits

Implemented the A* by combining it with the Myers Diff’s divide and conquer process. It works fine now

Myers diff may generate weird deltas like the following example. It will make concurrent text updates generate weird merge results. Any suggestions? My current thought is to implement an A* search on top of the edit graph that punishes noncontinuous edits

An update like this is also less efficient for CRDTs, even though it is a minimal edit script. Because it is harder to compress a scattered update.

After revisiting and discussing this issue with @memoryandthought.me , I realized that I might be able to implement it on Loro while ensuring backward compatibility (but not forward compatibility). I will try to make a version to test.

zx@zxch3n.com

You may experience data loss due to the following issues caused by incorrect usage of CRDTs libraries, regardless of whether you're using Loro, Automerge, or Yjs. Here is how to avoid them:

You may experience data loss due to the following issues caused by incorrect usage of CRDTs libraries, regardless of whether you're using Loro, Automerge, or Yjs. Here is how to avoid them:

View full thread

2. When using map containers: - If possible, initialize all child containers during the map container's initialization. - Avoid concurrent creation of child containers with the same key in the map container to prevent overwrites

You may experience data loss due to the following issues caused by incorrect usage of CRDTs libraries, regardless of whether you're using Loro, Automerge, or Yjs. Here is how to avoid them:

The overwrite behavior occurs because the concurrent creation of child containers results in different container IDs, preventing the automatic merging of their contents. The solution is:

1. When containers might be initialized concurrently, prefer initializing them at the root level rather than as nested containers

AT Protocol 貌似也能合法地在大陆部署,因为审核是去中心化的,可以选择性收录账户和内容

If an app needs to support end-to-end encryption, what kind of key management would provide the best UX? Considering that users are likely to forget passwords or lose key files.

zx reposted

Zixuan has been doing impressive work turning some of our CRDT research into practice

zx@zxch3n.com

Loro 1.0 is here! Introducing stable binary document format, blazing-fast import speed, Git-like shallow clone, enhanced version control, and more. loro.dev/blog/v1.0

zx reposted

zx reposted

Big news: I'm working with @chris.blue on a second edition of Designing Data-Intensive Applications! An early release of the first 3 chapters is now available: learning.oreilly.com/library/view... (O'Reilly Learning subscribers only at this point) and we're hoping to finish it next year.

learning.oreilly.comDesigning Data-Intensive Applications, 2nd EditionData is at the center of many challenges in system design today. Difficult issues such as scalability, consistency, reliability, efficiency, and maintainability need to be resolved. In addition, there...

zx reposted

My talk from the local-first conference is up! In it I discuss the difference between local-first and offline-first, and propose a direction for the community in the coming years www.youtube.com/watch?v=NMq0...

youtube.comThe past, present, and future of local-first - Martin Kleppmann (Local-First Conf)Speaker: Martin Kleppmann, University of Cambridge, Inc & Switch We have come a long way since my colleagues and I published the local-first essay five years ago. In this talk I'll review where the local-first idea came from, where we are now, and what I hope the local-first community can work towards in the future. --- Learn from engineers, designers, academics, startups, and indie developers who are putting local-first into practice and reaping the benefits of a cloud-optional architecture. Join our discord! https://discord.com/invite/unjj72J6gH --- Subscribe for more talks: @localfirstconf Follow: https://twitter.com/localfirstconf Visit: https://www.localfirstconf.com --- Thanks to our wonderful sponsors: - DXOS - https://dxos.org/ (foundation layer for cloudless, collaborative software) - Heavybit - https://www.heavybit.com/ (accelerator program for developer-first startups) - PowerSync - https://www.powersync.com/ (Postgres and SQLite sync layer) - Rocicorp - https://rocicorp.dev/ (creator of multiplayer and sync infrastructure) - Axil - https://axil.llc/ (agency focused on local-first software dev) - Affine - https://affine.pro/ (workspace merging docs, whiteboards, and databases) - CrabNebula - https://crabnebula.dev/ (creator of Tauri, for deploying web technologies as desktop apps) --- Thanks to https://sceal-studio.com/ for the videos!

You are up to date.