1.0 Roadmap

Schema

Syncer

  • If present, app startup has to have/request baseSyncId before triggering any requests
  • Support following protocol messages, updating lastSyncId for each:
    • {type: "data", data: RowsByTable<S>} should store rows
    • {type: "reset", reason: string} should throw “resetNeeded” error (and store it)
    • {type: "refetch"} should => mark all coverages/bootstraps as incomplete

Mutators

Queries

  • Finalise design for query DSL
  • Design system for subscriptions
  • Make sure updates to queries are batched before revealing to the UI
  • Add lazy accessor to queries to track just insert/update/delete (like experimental watch() API)
  • Connect query layer with the coverage tracker

Batcher

Bootstrap

Store

Persistence (IDB)

Integrations

  • Solid.js wrapper with Stores on the reactive layers
  • React wrapper with stable identity
  • Figure out how to play well with SSR:
    • Build a await client.prefetch("users", { id: "id-me" }) that can run in a loader
    • Add client.dehydrate() that can serialise the client’s state to JSON
    • Add client.hydrate(state); that can use the JSON to setup the browser client
    • Build hydrate and rehydration paths for LastSyncId, Store, Coverage, and Bootstrap
    • Make IDB storage purely pluggable
    • Guard BroadcastChannel messages to only run on client

Performance

QoL


Future

  • Go through https://github.com/rocicorp/replicache/releases and implement all useful features.
  • Give materializers access to the database
  • Add IVM for where queries (store.issues.where(q => q.eq("status", "open"))) to the query language, with sorted-btree for indexing.
    • gte
    • lte
    • eq
    • in

Dead ends

Events & Projectors