yjs-sqlite-test
electric
yjs-sqlite-test | electric | |
---|---|---|
2 | 28 | |
20 | 5,022 | |
- | 11.0% | |
2.1 | 9.8 | |
about 1 year ago | 1 day ago | |
JavaScript | Elixir | |
- | Apache License 2.0 |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
yjs-sqlite-test
-
CRDT-richtext: Rust implementation of Peritext and Fugue
I agree that full stack support is the missing pice that's need to make use explode. But I do think the current implementations will get there.
CRDTs are fairly unique in that you need them to be exposed very close to the front of your stack in order to capture user intent, but you also need support further back in your stack for merging, replication, and querying.
We have good front end support and there are multiple exciting projects building collaboration servers for them. What I think is missing is support in database, that's what I've been experimenting with (below). If you are building an offline enabled app, having the ability to generate diffs and merge in database enables easy multi document sync.
Also most general purpose CRDTs are a combination of JSON and XML like data structures, it's useful to be able to query the structures in your database. For example if you build a notes app that supports inline tags, if useful to be able to query and index those from within the XML like structure without having to dump the whole thing out at another layer of your stack.
Yjs Postgres: https://github.com/samwillis/yjs-pg-test
Yjs SQLite: https://github.com/samwillis/yjs-sqlite-test
(These are just early experiments, I'm working on a cleaner shared implementation with support for various SQLite bindings, and better querying)
-
Ask HN: What Are You Working On? (May 2023)
Day job (contract): Massive overhaul of an antibody workbench for drug discovery.
Evenings: Building out a concept for a "YSQL" bringing CRDTs (Yjs) to SQLite and Postgres. CRDTs are great for real-time, but also awesome for offline for async collaboration. Using the same CRDT for both front end data structures and backend database merging seems to me to be a good combination. The plan is to build out some simple primitives first, then layer a SQLite (WASM in browser) <-> Postgres sync system on top for local copying and modification of datasets.
Proof of concepts:
https://github.com/samwillis/yjs-sqlite-test
https://github.com/samwillis/yjs-pg-test
electric
-
Ask HN: How Can I Make My Front End React to Database Changes in Real-Time?
I'm interested in this problem also!
I think there is a large overlap with projects that market/focus on offline-first experiences.
AFAIK this problem can be solved by:
1) Considering a client-side copy of the database that gets synced with the remote DB. This is an approach [PowerSync](https://www.powersync.com/) and [ElectricSql](https://electric-sql.com/) and [rxdb](https://rxdb.info/) take!
-
Cloudflare acquires PartyKit to allow developers to build real-time multi-user
Yeah I agree with it being an exaggeration. They are certainly riding the admittedly dated perception that realtime is so hard it's only available to the Googles and Figmas. But there's now some amazing open source solutions available like Y.js and ElectricSQL[1]. The barrier has certainly come down.
[1] https://github.com/electric-sql/electric
- Ask HN: Who is hiring? (April 2024)
- FLaNK Stack 26 February 2024
- FLaNK Stack Weekly 12 February 2024
- Show HN: RemoteStorage – sync localStorage across devices and browsers
- I pwned half of America's fast food chains, simultaneously
-
PostgreSQL 16 Bi-Directional Logical Replication
https://github.com/electric-sql/electric :
> ElectricSQL is a local-first software platform that makes it easy to develop high-quality, modern apps with instant reactivity, realtime multi-user collaboration and conflict-free offline support.
> Local-first is a new development paradigm where your app code talks directly to an embedded local database and data syncs in the background via active-active database replication. Because the app code talks directly to a local database, apps feel instant. Because data syncs in the background via active-active replication it naturally supports multi-user collaboration and conflict-free offline
"SQLedge: Replicate Postgres to SQLite on the Edge" (2023)
-
Show HN: PowerSync – Bi-directional Postgres<>SQLite sync for offline-first apps
Yup, this is correct.
We have had some requests / discussions around adding hooks to the sync service that will support custom logic on the write path (as per https://github.com/electric-sql/electric/discussions/565). This seems like a good idea but they don't exist yet.
- Electric SQL – Local-first sync layer for web and mobile apps
What are some alternatives?
jnigen - Experimental bindings generator for Java bindings through dart:ffi and JNI.
fulcro - A library for development of single-page full-stack web applications in clj/cljs
rdom - Server side reactive DOM updates in Ruby
cr-sqlite - Convergent, Replicated SQLite. Multi-writer and CRDT support for SQLite
framework - Mayu is a live updating server-side component-based VDOM rendering framework written in Ruby
crdt-benchmarks - A collection of CRDT benchmarks
fugue-bench - Fugue list CRDT implementations and benchmarks
wundergraph - WunderGraph is a Backend for Frontend Framework to optimize frontend, fullstack and backend developer workflows through API Composition.
pg_crdt - POC CRDT support in Postgres
multiversion-concurrency-control - Implementation of multiversion concurrency control, Raft, Left Right concurrency Hashmaps and a multi consumer multi producer Ringbuffer, concurrent and parallel load-balanced loops, parallel actors implementation in Main.java, Actor2.java and a parallel interpreter
kons-9 - Common Lisp 3D Graphics Project
mycelite - Mycelite is a SQLite extension that allows you to synchronize changes from one instance of SQLite to another.