ADR-0017: UI Integrations Live in bind-* Packages
Cache invalidation wiring is UI-specific; ship it as optional bind-* packages (e.g. bind-tanstack-query).
Status
Accepted
Context
Invalidation wiring is cache/UI-specific and not part of the replication core. However, we want to provide a blessed integration for common stacks.
Decision
UI/caching integration is shipped as separate packages, for example:
@rippledb/bind-tanstack-query
Responsibilities include:
- DbEvent →
invalidateQuerieswiring - list registry helper
- coalescing of invalidation bursts
Core packages must not import these. For a higher-level experience that combines these bindings with CRUD controllers, see the @rippledb/client-query package.
Alternatives Considered
- Core bundles a UI cache
- UI integration lives inside persistence packages
Consequences
- No framework lock-in
- Integrations can evolve independently
- Additional package to install for UI users
ADR-0016: store-* and db-* Packages Own Backend/Runtime Dependencies
Runtime-specific deps (SQLite, Postgres, etc.) must live outside core/client/server in store-* and db-* packages.
ADR-0018: Package Names and Intended Responsibilities
Canonical package set and naming: store-* (client truth), db-* (server persistence), bind-* (UI bindings).