🧊 reserved → ⏳ planned → ✅ done
Roadmap & quarterly plan
Each item names the ADR that already fixed its contract, so shipping it is implementation, not design. The QuerySpec shape and JSON wire format are frozen — new capabilities unlock behavior, not shape. On any trade-off: Java portability → type safety → bundle size → ergonomics.
Now — v0.1.x · Q3 2026
Stabilize the contract
- Done:querypipe core engine — field DSL, immutable builder, parse/stringify/canonicalize/validate/apply
- Done:Conformance suite — 20 language-independent JSON vector files + fast-check invariant laws
- Done:Frozen public API + .d.ts contract, CI-typechecked against the export list
- Planned:Docs site — ADRs + specs + interactive playground (this site)
- Planned:v0.1.x patches — bug fixes only; no wire-format or API-surface changes
- Planned:Bundle shrink toward 6 kB — opt-out position tracking, message→code stripping
exit criteria — Published to npm; docs site live; ≥ 1 real integration exercising parse → validate → generate end to end.
Next — v0.2.0 · Q4 2026
Generate & interop, wave 1
- Planned:@querypipe/prisma — QuerySpec → param-safe findMany args (ADR-0004)
- Planned:@querypipe/sql — parametrized, injection-safe, LIKE-escaped (ADR-0004 §3)
- Planned:Keyset / cursor pagination — toCursor(lastRow) / applyCursor (ADR-0004 §2)
- Planned:Spec versioning + migrate(spec, migrations) (ADR-0001 §6)
exit criteria — Adapters produce total orders identical to client apply for the same spec, verified by shared adapter vectors; keyset pagination round-trips a multi-column sort + tie-breaker.
v0.2.x · Q1 2027
Generate & interop, wave 2
- Planned:Two-way TanStack Table adapter — toTanStackState / fromTanStackState
- Planned:@querypipe/mongo — with $regex metachar escaping by contract
- Planned:Syntax dialect plugins (ADR-0010): page=, JSON:API, OData, api-query-params style
exit criteria — A TanStack demo driven entirely through the adapter; the page= dialect passes semantic round-trip vectors; api-query-params URLs keep working server-side.
v0.3.0 · Q2 2027
OR groups & richer schemas
- Planned:orGroup(...) builder — the FilterGroup type & wire format already ship in v0.1, so this is a pure API unlock; zero wire bytes change
- Planned:Context-aware schema — withContext({ role }), per-field visibleWhen(ctx)
- Planned:Computed fields and nested paths ("author.name" — the dot is reserved since v0.1)
exit criteria — orGroup builds nested boolean trees that serialize, round-trip and apply correctly; the v0.1 vectors still pass byte-for-byte; group specs fail gracefully on v0.1 engines.
querypipe-java 0.1 · Q3 2027
Same contract, second language
- Planned:Java port of the engine — passes the identical JSON conformance vectors
- Planned:JPA / Criteria + JDBC adapters
- Planned:Shared vector CI — one fixture set, two implementations, same green
exit criteria — querypipe-java is green on the same JSON vectors as the TS core; both languages emit byte-identical canonical strings for the vector corpus.