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

  1. Do not call reset() synchronously inside onerror — return first and let the user trigger reset (e.g. via a button in the failed UI).
  2. Defer the reset with queueMicrotask or setTimeout if automatic recovery is required.
  3. 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

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


AI-assisted analysis of sveltejs/svelte@20b341f100 (2026-08-12). Data as JSON: /api/errors/ede3eec7cf988e90. Report an issue: GitHub.