Asher Cohen
Back to posts

Streaming Is About to Be the Standard

One lesson learned from using LLMs: the browser can stream and build out-of-order results for better user experience

🧠 We've been streaming video, audio, and HTML for decades—but never objects. That's about to change.

The Need for Progressive JSON

LLMs & Generative Systems

LLMs generate output token-by-token. Waiting for a full JSON object delays UX and breaks responsiveness.

Real-Time UIs

Dashboards, assistants, IDEs benefit from structured partial updates (vs. raw text).

Data-at-the-Edge

On edge/serverless APIs, latency compounds. Streaming JSON reduces perceived delay.

The Problem: You can't stream standard JSON safely—JSON doesn't allow trailing commas or partial values.

Why Hasn't JSON Been Streamed Until Now?

JSON wasn't made for streaming. It's a full object format.

In contrast:

  • HTML is naturally streamable—browsers render partial DOM
  • Media (audio, video) uses chunking (codecs, headers)
  • Images support progressive encoding (e.g. JPEG progressive)

So why not JSON?

Three Reasons

  1. Parsers: Most require a complete object
  2. Tooling: Only recently have good stream parsers emerged (clarinet, oboe.js, streaming-json-parser)
  3. Use case: REST APIs were blocking and small. Even GraphQL wasn't stream-first until Live Queries and @defer

What Changed?

Now streamable structured output is a UX necessity:

  • LLMs emit { "type": "function_call", "name": "search", "args": { ... } } piece by piece
  • React Server Components stream JSON (RSC Flight format)
  • SSR/Partial hydration: shell first, hydrate later
  • Edge/Serverless: streaming hides cold starts and TTFB

Tech Already Adopting Progressive JSON

  • OpenAI Chat API (stream: true) returns { "delta": ... } lines via NDJSON
  • React Server Components: custom JSON stream protocol
  • Next.js App Router: streaming server data
  • Bun/Deno: runtime-level streaming Fetch
  • gRPC-Web / tRPC: chunked streaming patterns
  • WebTransport, HTTP/2, HTTP/3: native stream transport

Problems Still Unsolved

  • JSON isn't stream-safe: half a number or string breaks parsing
    • Needs NDJSON, envelopes, or framing
  • HTTP/1.1 + chunked: hard to cache
  • Axios/Fetch: buffer by default
  • TypeScript + partial schemas: hard to type/validate

So Is This Web 3.5?

It's not Web3 (blockchain) or Web 2.0 (social)—but:

"Interactive, streamable, structured, AI-powered UI over modern transports"

Progressive JSON is key to that shift.

Impacts

  • API design (NDJSON, yield, generators)
  • UI architecture (suspense, partial components)
  • Middleware (stream transforms)
  • Tooling (stream parsers, schema inference)

Conclusion

We're not building websites anymore. We're building stream-based UI machines.