Build1 distinct publisher3 min readUpdated
ParaQL logs every modifying statement to a rebased multi-writer oplog, because conflicting writes corrupt the file fast. Benchmarking found 1MiB of data taking up to 200MiB on disk.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
The interesting part is what the sync layer actually carries. Not pages, not binary diffs of a file: a list of statements, appended to an Autobee writer's oplog, with the result of executing them applied to an Autobee view [8]. Ordering is Autobee's job, since it rebases writers automatically [7]. SQLite's job shrinks back to executing one stream of writes at a time, which is the only situation it was ever built for [8].
That inversion is what makes the custom VFS load-bearing rather than decorative [3]. The VFS persists the executed result into a shared view, and that view can itself be synced when conditions allow [6], which buys the fast-forward path: a peer well behind does not have to replay every statement, it can take the materialised database instead [9]. So database state does move across the wire. It just moves as a cache of the log, not as the thing peers agree on. Temporary files stay local, in RocksDB [10].
The author's reasoning for rejecting the obvious routes is worth reading literally. Syncing the results of writes is cheap, but once you allow several writers, conflicting writes corrupt the database very quickly [4]. CRDTs or binary patching get expensive fast and still leave corruption possible in edge cases, because SQLite makes no effort to support any of this [5]. The log design is described as making corruption extremely unlikely [8], which is a different guarantee than impossible, and it is the honest way to put it.
The bill arrives on disk. RocksDB does not release deleted data until compact() is called, and both Autobee and the temporary storage sit on RocksDB, so the footprint grows with every operation [11]. SQLite meanwhile writes in pages and shuffles data around to keep the file compact, which generates many writes even for small changes [12]. (The post gives the default page size as 4096KiB, which reads like a slip for bytes.) The two habits do not compose: writing 1MiB of data can require up to 200MiB of storage depending on how it was written [13], a factor of 200 [15]. Most of that is reclaimable through ParaQL's own compact(), and the number surfaced under benchmarking rather than ordinary use [14].
The gap in the design is the same one that gives it its strength. Because the replicated artefact is SQL text, correctness now depends on statements meaning the same thing on every peer that replays them. The author flags PRAGMA as something not to expect to work correctly [17], and says nothing about statements whose outcome depends on local state. Everything else in the feature list points the other way, toward ordinary use: any SQLite database can be loaded, replication runs over any stream-like transport, write access and permitted writes are controllable per peer, and the result exports back to standard SQLite [16], with encryption on disk and in transport plus deflate compression traded against performance [18]. It also came out of a concrete want, which is full-text and vector search inside P2P projects where the usual answer is a local SQLite index over synced data [1][2]. The author calls the whole thing a mad-science experiment, and says it has yet to meet a real-world scenario [19].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author's motivation was wanting full-text search, or vector similarity search, in a P2P project and being disappointed by the available options.
A somewhat popular existing approach is using SQLite to build a local index of P2P synced data and using that for searches.
Replicating a SQLite database over a P2P network and making it multi-writer required a custom VFS (virtual file system).
Syncing the results of write operations between peers is very cheap, but supporting multiple writers becomes complex because conflicting writes corrupt the database very quickly.
CRDTs or binary patching could be used, but get expensive quickly and database corruption remains a risk in edge cases; SQLite was never meant to support such cases and makes no effort to enable them.
The solution settled on is syncing raw SQL whenever a query modifies the database, with the custom VFS persisting the resulting database to a shared view that can also be synced under some conditions to speed things up.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Single self-reported build log
Every claim rests on one first-person post by the project's author. The design description is detailed and internally coherent, and the author volunteers a damaging measurement, which raises credibility. But there is no independent replication, no repository or code inspection in the cluster, no benchmark methodology behind the 200MiB figure, and at least one stated detail (a 4096KiB default SQLite page size) is uncorroborated in supplied material.
Pre-adoption experiment
The only adoption event is the public write-up itself. The author explicitly states ParaQL is yet to be tested in a real-world scenario and asks readers to tell him if they try it, and the cluster discloses no users, versions, dependents, or deployments.
Mildly ahead of its evidence
Framing is unusually restrained for a project announcement: the author self-labels it a mad-science experiment, flags the PRAGMA gap, and publishes the worst-case storage number himself. The small positive gap comes from unverified capability language - corruption becoming extremely unlikely, most SQLite features working, encryption on disk and in transport - asserted with no test evidence, plus the reassurance that compaction reclaims the overhead without any post-compaction measurement.
Author promoting own project
The single source is a self-published post by the library's creator on a developer blogging platform, ending with a call to try the project and contact him on GitHub, so there is a clear promotional interest. Mitigating it, the post discloses an unflattering worst case and its untested status, and the cluster shows no commercial relationship, funding, or vendor sponsorship for ParaQL, libSQL, Autobee, or Holepunch.
Low - one voice, no verification
Confidence is limited by the single-publisher, single-author basis. What ParaQL claims to do and how it is architected is clearly stated and self-consistent, so the description of the approach is reliable; whether it holds under concurrency, rebase reordering, or sustained write load is entirely unverified in the supplied material.
build
Fabricated SQLite CVEs cleared NVD, CISA ADP and Red Hat before anyone ran the code1 distinct publisher
build
Once the question needs a cube, you own the parser1 distinct publisher
build
The streaming edit is a software layer: proxies, stubs and an ffmpeg hook on storage you own1 distinct publisher
build
Four REST calls became one query: the sidecar pattern, minus the marketing1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 22, 2026