Roadmap
Implemented
Section titled “Implemented”Everything documented on this site, and nothing else:
| Capability | Where |
|---|---|
| Query input and duplicate keys | Codecs |
| Codecs, both directions | Codecs |
| Seven parameter families | Parameters |
| Query models and composition | Query models |
| Decode results and issues | Issues |
| Canonical encoding and omission | Defaults and absence |
| Runtime transitions | Transitions |
| Memory adapter | Testing |
| Browser adapter | Browser |
| Server and Node helpers | Server, Node.js |
| Standard Schema validation | Validation |
| Vue, Vue Router, Nuxt | Frameworks |
| Package stabilization | Architecture |
Deliberately absent
Section titled “Deliberately absent”These are not oversights. Each is an open decision recorded in an ADR, and shipping a guess would be worse than shipping nothing.
Transition scheduling Status: planned
Section titled “Transition scheduling planned”There is no throttling, coalescing, cancellation, or concurrency control. Every transition applies immediately, and two overlapping transitions are not reconciled — the second reads whatever state the first produced.
What to do today: debounce at the call site, and use navigation: "replace" for fast-changing
inputs. See Search.
Why it waits: a scheduling model that cannot express “supersede” and “cancel” honestly would
have to be replaced later. When it lands, QueryTransitionResult gains an outcome describing what
actually happened, which is why it does not carry a constant committed: true today
(ADR 0007).
Codec composition Status: planned
Section titled “Codec composition planned”There are no dedicated families for dates, JSON, objects, tuples, or nested structures.
What to do today: param.custom with your own codec. See Codecs.
Why it waits: each of these has an encoding question with no obviously right answer — how a date carries a time zone, whether an object is JSON or bracketed keys, how a tuple escapes its separator. Choosing wrong is a breaking change to every URL already in the wild.
Per-parameter omission and recovery policy Status: planned
Section titled “Per-parameter omission and recovery policy planned”Default omission is global: a value equal to its default is always omitted. Recovery is decided by presence and cannot be overridden per parameter.
Model refinements that change the output type Status: planned
Section titled “Model refinements that change the output type planned”Per-parameter .refine() can transform a value’s type today. Model-level refine is typed to
return the same values it received.
Server response contribution Status: planned
Section titled “Server response contribution planned”QueryWeave decodes a request but contributes nothing to the response — no canonical-URL redirect, no headers.
What to do today: compare encodeQuery(model, values) with the incoming query and redirect
yourself. See Server parsing.
In order:
- Transition scheduling — throttling, coalescing, cancellation, and concurrency control.
- Codec composition — date, JSON, object, tuple, and nested representations.
- Publish 0.1.0-alpha.1 — the first npm alpha under the
alphadist-tag, fromboussadjra/queryweave. See Releasing. - API stabilization — freezing the public contracts for 1.0.
- Additional framework adapters — designed against the established core contracts.
How breaking changes ship
Section titled “How breaking changes ship”Before 1.0, breaking changes ship in minor versions. Each one requires an architecture decision record explaining the reasoning and a changeset describing the migration. Nothing breaks silently, and nothing breaks in a patch.
Every package shares one version through a fixed version group, so the matrix of compatible versions stays trivial.