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 |
| Nine parameter families, calendar dates and instants included | 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 |
| Transition outcomes, serialized transitions, pending decodes | Transitions |
| Support matrix and stability policy | Support and stability |
| Throttled writes and cancellation | Transitions |
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.
Tuples, objects, and JSON Status: planned
Section titled “Tuples, objects, and JSON planned”Calendar dates and instants have shipped as param.date and param.datetime.
There are no dedicated families yet for tuples, objects, nested structures, or JSON.
What to do today: param.custom with your own codec. See Codecs.
What is already settled: how each will be written in a URL, so a codec you write today can use
the same spelling and switch to the built-in family later.
ADR 0011
fixes them: a tuple as repeated values of its key (?range=10&range=50), an object as one key per
field joined with a dot (?price.min=10&price.max=50), and JSON with sorted keys as an escape
hatch for shapes the others cannot express.
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:
- Codec composition — tuples and JSON, then objects and nesting, as ADR 0011 lays out. Dates have shipped.
- 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, and both are summarized in Upgrading. Nothing breaks silently, and nothing breaks in a patch. The stability policy says which behaviors count as public.
Every package shares one version through a fixed version group, so the matrix of compatible versions stays trivial.