sveltejs/svelte · error · Error
svelte_boundary_reset_onerror
svelte_boundary_reset_onerror
Error message
svelte_boundary_reset_onerror A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled https://svelte.dev/e/svelte_boundary_reset_onerror
What it means
Thrown at dom/blocks/boundary.js:237 when a <svelte:boundary> reset() function is invoked while the boundary's onerror handler is still executing (calling_on_error is true). Resetting synchronously during error handling would re-enter rendering before the error is fully processed, so Svelte requires reset to be deferred (e.g. called from a user action or after onerror returns).
Source
Thrown at packages/svelte/src/internal/client/errors.js:508
throw error;
} else {
throw new Error(`https://svelte.dev/e/state_unsafe_mutation`);
}
}
/**
* A `<svelte:boundary>` `reset` function cannot be called while an error is still being handled
* @returns {never}
*/
export function svelte_boundary_reset_onerror() {
if (DEV) {
const error = new Error(`svelte_boundary_reset_onerror\nA \`<svelte:boundary>\` \`reset\` function cannot be called while an error is still being handled\nhttps://svelte.dev/e/svelte_boundary_reset_onerror`);
error.name = 'Svelte error';
throw error;
} else {
throw new Error(`https://svelte.dev/e/svelte_boundary_reset_onerror`);
}
}View on GitHub (pinned to 20b341f100)
Solutions
- Do not call reset() synchronously inside onerror — return first and let the user trigger reset (e.g. via a button in the failed UI).
- Defer the reset with queueMicrotask or setTimeout if automatic recovery is required.
- If you need automatic retry, set a flag in onerror and trigger reset from a $effect or event.
Example fix
// before
<svelte:boundary>
{#snippet failed(error, reset)}
<button onclick={() => reset()}>Retry</button>
{/snippet}
</svelte:boundary>
<script>
// somewhere: onerror(error, reset) { reset(); } // throws
</script>
// after — let the user trigger reset
{#snippet failed(error, reset)}
<button onclick={reset}>Retry</button>
{/snippet} Defensive patterns
Strategy: validation
Validate before calling
// Do not call reset() synchronously inside onerror.
// Surface a retry control in the failed UI instead:
// {#snippet failed(error, reset)}
// <button onclick={reset}>Retry</button>
// {/snippet}
// For automatic retry, defer: queueMicrotask(() => reset()); Prevention
- Treat reset() as a user-triggered action, not an automatic recovery inside onerror.
- Render a retry button in the failed snippet that calls reset on click.
- If automatic retry is required, defer the reset with queueMicrotask or setTimeout.
When it happens
Trigger: Calling the reset callback passed to onerror synchronously inside the onerror function body. The guard at boundary.js:236-238 checks calling_on_error.
Common situations: Attempting immediate recovery by calling reset() at the end of onerror; retry-on-error logic that calls reset without user interaction; resetting from within the same error-handling tick.
Related errors
- invalid_snippet
- effect_in_unowned_derived
- effect_orphan
- effect_pending_outside_reaction
- effect_update_depth_exceeded
AI-assisted analysis of sveltejs/svelte@20b341f100 (2026-08-12).
Data as JSON: /api/errors/ede3eec7cf988e90.
Report an issue: GitHub.