Hydration & Serialization
24. Hydration Engines & Data Serialization
Examine the client hydration lifecycle, partial/island hydration models, streaming SSR, and safe complex data serialization with devalue.
hydration-serialization.ts
// Complex Data Serialization across the Network Boundary
import { stringify, parse } from 'devalue';
// Objects containing Dates, Sets, Maps, BigInts, and Circular References
const complexPayload = {
sessionId: 9007199254740993n, // BigInt
timestamp: new Date('2026-09-10T10:00:00Z'),
activeTags: new Set(['svelte5', 'nitro', 'bun']),
metricCache: new Map([['us-east', 14.2], ['eu-central', 8.6]])
};
// devalue encodes complex JS types safely without data loss
const serialized = stringify(complexPayload);
const reconstructed = parse(serialized);
console.log(reconstructed.sessionId === 9007199254740993n); // true
console.log(reconstructed.activeTags instanceof Set); // trueHydration Engines & Data Serialization
Passing state across the server-to-client boundary requires specialized serializers like devalue or SuperJSON that preserve complex JavaScript data structures.
- Standard JSON Limitations:
JSON.stringifyconvertsDateobjects to strings, losesSet/Mapprototypes, and throws onBigInt. devalueEngine: Powers SvelteKit and Nuxt payload transfers by serializing circular references, custom prototypes, and native ECMAScript data structures safely.- Hydration Mismatch Prevention: Guarantees identical client state recreation on the initial load without re-triggering network fetches.
SSR Serialization Protocol Comparison devalue vs JSON
Serialized Wire Format:
[{"timestamp":1,"bigInt":2,"tags":3},new Date(1789034400000),9007199254740993n,new Set([4,5]),"svelte5","nitro"]Type Retention Fidelity:
Zero loss: Exact JavaScript type fidelity preserved, handles circular references and undefined
Assessment:
High fidelity (Standard SvelteKit & Nuxt SSR serialization)