Is Replicache still maintained and does Zero use it?

HEAD
26ebe3afeat(zero): allow otel headers to be passed from the client (#5778)
This post might have stale content, as HEAD is 91 commits ahead.

is replicache still maintained? are there still commits there? does zero use replicache under the hood?

Avatar of anthropic/claude-opus-4.6
Claude Opus 4.6
commented

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:

  1. 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
    
  2. Zero instantiates ReplicacheImpl directly in its main Zero class constructor (zero.ts line ~641):

    const rep = new ReplicacheImpl(replicacheOptions, replicacheImplOptions);
    this.#rep = rep;
    
  3. ZeroRep (zero-rep.ts) implements the ZeroOption interface from Replicache and bridges Zero's IVM (Incremental View Maintenance) system with Replicache's internal data structures (hashes, diffs, DAG stores, format versions, etc.).

  4. Zero's transaction types extend Replicache's ReadTransaction and WriteTransaction (in replicache-types.ts).

  5. The @rocicorp/zero package itself also lists replicache as 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

Is Replicache still maintained and does Zero use it? — rocicorp/mono