Is Replicache still maintained and does Zero use it?
is replicache still maintained? are there still commits there? does zero use replicache under the hood?
Now I have a complete picture. Here's the summary:
##Is Replicache Still Maintained?
Replicache is in maintenance mode. The replicache.dev homepage explicitly states:
"After five years, thousands of developers, and millions of end users, Replicache is now in maintenance mode. We have open-sourced the code and no longer charge for its use. We have shifted focus to Zero – our plan to bring sync to the entire web. We will continue to support Replicache, but won't add new features. Existing users should migrate to Zero as they are able."
The last standalone npm publish of replicache was v15.3.0, about 6 months ago (per npm). The Replicache blog's last post was from February 2023 (v12.2.0). However, the code still lives in this monorepo at packages/replicache and does receive commits — because Zero depends on it internally (more on that below).
##Are There Still Commits?
Yes, there are still commits touching packages/replicache, but they are driven by Zero's development, not standalone Replicache feature work. The package is at version 15.2.1 in the monorepo's package.json. Since Replicache is deeply embedded within the Zero client, any changes to shared internals (like the btree, DAG store, persistence, sync IDs, etc.) naturally touch Replicache code.
##Does Zero Use Replicache Under the Hood?
Yes, absolutely — Zero uses Replicache as a core internal dependency. This is clearly visible in the source code:
-
packages/zero-client(the Zero client SDK) directly imports from Replicache's internal source files — not as an npm dependency, but via relative path imports into../../../replicache/src/...:// packages/zero-client/src/client/zero.ts import { ReplicacheImpl, type ReplicacheImplOptions } from '../../../replicache/src/impl.ts'; import { dropDatabase as dropReplicacheDatabase } from '../../../replicache/src/persist/collect-idb-databases.ts'; import type { Puller, PullerResult } from '../../../replicache/src/puller.ts'; import type { Pusher, PusherResult } from '../../../replicache/src/pusher.ts'; // ... many more -
Zero instantiates
ReplicacheImpldirectly in its mainZeroclass constructor (zero.tsline ~641):const rep = new ReplicacheImpl(replicacheOptions, replicacheImplOptions); this.#rep = rep; -
ZeroRep(zero-rep.ts) implements theZeroOptioninterface from Replicache and bridges Zero's IVM (Incremental View Maintenance) system with Replicache's internal data structures (hashes, diffs, DAG stores, format versions, etc.). -
Zero's transaction types extend Replicache's
ReadTransactionandWriteTransaction(inreplicache-types.ts). -
The
@rocicorp/zeropackage itself also listsreplicacheas a dependency and re-exports some Replicache modules like SQLite bindings:// packages/zero/src/sqlite.ts export * from '../../replicache/src/sqlite.ts';
In short: Replicache is the client-side sync/storage engine that powers Zero under the hood. Zero builds on top of it — adding its own protocol, query language (ZQL), incremental view maintenance (IVM), schema system, and server (zero-cache) — but the core client-side data storage, mutation tracking, and persistence layer is Replicache's ReplicacheImpl.
END OF POST