sveltejs/kit · error · Error
Invalid data for Set reviver
Error message
Invalid data for Set reviver
What it means
SvelteKit remote functions serialize arguments with devalue and revive them on the receiving side. The Set reviver expects the encoded payload for a Set to be a plain array of devalue-encoded strings. When the payload is not an array, Kit throws this error rather than producing a corrupt Set.
Source
Thrown at packages/kit/src/runtime/shared.js:205
for (const item of value) {
if (
!Array.isArray(item) ||
item.length !== 2 ||
typeof item[0] !== 'string' ||
typeof item[1] !== 'string'
) {
throw new Error('Invalid data for Map reviver');
}
const [key, val] = item;
map.set(parse(key), parse(val));
}
return map;
},
/** @type {(value: unknown) => Set<unknown>} */
[remote_set]: (value) => {
if (!Array.isArray(value)) {
throw new Error('Invalid data for Set reviver');
}
const set = new Set();
for (const item of value) {
if (typeof item !== 'string') {
throw new Error('Invalid data for Set reviver');
}
set.add(parse(item));
}
return set;
},
/** @type {(value: any) => File} */
[remote_file]: (value) => {
if (
!value ||
typeof value !== 'object' ||View on GitHub (pinned to 03f1687fe6)
Solutions
- Reinstall/upgrade @sveltejs/kit so client and server run the same version (pnpm install, clear node_modules/.vite cache)
- Clear cached prerendered files and dev caches that may hold stale encoded payloads (.svelte-kit, build output)
- Check that middleware/proxies do not alter remote-function request bodies or query strings
- Reproduce with a minimal Set argument; if a specific element triggers it, file a bug with the payload
Example fix
// before (stale versions) "@sveltejs/kit": "2.0.0", "@sveltejs/vite-plugin-svelte": "^5" // after (aligned) "@sveltejs/kit": "^2.22.0", "@sveltejs/vite-plugin-svelte": "^5.0.0"
Defensive patterns
Strategy: validation
Validate before calling
const isEncodedSet = (v) => Array.isArray(v) && v.length === 0 || (Array.isArray(v) && v.every((i) => typeof i === 'string'));
if (!isEncodedSet(payload)) throw new Error('Refusing to revive malformed Set payload'); Type guard
function isValidRemoteSetPayload(v) {
return Array.isArray(v) && v.every((i) => typeof i === 'string');
} Try / catch
try {
const result = await myRemoteFn(mySet);
} catch (e) {
if (e.message.includes('Invalid data for Set reviver')) {
console.error('Remote Set payload corrupted — check Kit versions and request integrity');
} else throw e;
} Prevention
- Keep @sveltejs/kit versions identical across packages in the repo
- Don't hand-craft or mutate remote-function request payloads
- Purge CDN/caches after upgrading Kit
- Test remote functions with Set/Map/File arguments after every upgrade
When it happens
Trigger: Calling a remote function whose argument (or nested value) is a Set, but the serialized payload reaching create_remote_arg_revivers' [remote_set] reviver is not an array — typically because the encoded string was produced by a mismatched Kit version, hand-crafted/tampered, or corrupted in transit (e.g. truncated query param or POST body).
Common situations: Version skew between @sveltejs/kit packages during upgrades (old client code against new server code or vice versa); manually editing or caching an encoded remote-arg URL; proxies or middleware rewriting request payloads.
Related errors
- called uneval before init_transport
- called stringify before init_transport
- called parse before init_transport
- Data returned from action inside ${route_id} is not serializ
- Data returned from action inside ${route_id} is not serializ
AI-assisted analysis of sveltejs/kit@03f1687fe6 (2026-09-02).
Data as JSON: /api/errors/1aebd5d765dbac32.
Report an issue: GitHub.