🧊 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 criteriaPublished 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 criteriaAdapters 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 criteriaA 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 criteriaorGroup 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 criteriaquerypipe-java is green on the same JSON vectors as the TS core; both languages emit byte-identical canonical strings for the vector corpus.