# What Blazingly needs from blazingly-json
Written after migrating the Blazingly framework off `serde_json`, and after
profiling the framework's hot paths against Axum, Actix Web, bare hyper and
FastAPI. Everything below is either a measured number or a concrete API need,
not a wish list.
## 1. Own the oracle
The framework used to carry `serde_json` as a dev-dependency so its integration
tests could re-parse the bytes it put on the wire with a second, unrelated
implementation. That exists to catch one specific class of bug: an encoder that
emits something malformed and a decoder that accepts it because it shares the
same misunderstanding. A symmetric bug is invisible to a round-trip through one
implementation.
That check cannot move to blazingly-json's own API — an implementation cannot
be its own oracle. It has to move to blazingly-json's *repository*, which is
where the encoder now lives, and where `tests/differential.rs` already keeps
`serde_json` as a dev-dependency.
The framework will drop its `serde_json` dev-dependency once this repository
owns the property properly. Today `tests/differential.rs` is a fixed set of
hand-written cases, which is a smoke test rather than an oracle. To carry the
weight it needs:
- **Property-based round-tripping.** `proptest` is already a dev-dependency.
Generate arbitrary `Value` trees — deep nesting, all number forms, strings
with control characters, lone surrogates, `