Reference
Comparison
Plain onErrorCaptured | <NuxtErrorBoundary> | vue-error-boundary-kit | |
|---|---|---|---|
| Fallback UI | you build it every time | #error slot | fallback scoped slot: error, reset, retry, retryCount, canRetry |
| Retry / reset | manual | manual | resetKeys, resetOnPropsChange, maxRetries built in; retry-backoff's createBackoffRetry() for increasing delay between attempts |
| Reporting | manual | manual | adapter pattern (console/http/sentry/bugsnag/logrocket/otel), tree-shaken per adapter, exactly-once across nested boundaries |
| Mass-failure protection | — | — | adapters/rate-limit — dedup + rate-limit wrapper for any reporter |
| Breadcrumbs | — | — | adapters/breadcrumbs — rolling event trail, opt-in, attached to reports via withBreadcrumbs() |
| TanStack Query retry | manual resetQueries() wiring | manual resetQueries() wiring | tanstack-query's useQueryErrorReset() — one call, wired into beforeReset |
| Debug history | — | — | /devtools — createErrorHistory() + <ErrorHistoryPanel> |
| Programmatic use | — | — | useErrorBoundary() |
Beyond errorCaptured | — | — | useGlobalErrorCapture() (opt-in, separate entry point) |
| Nuxt module | — | is one | vue-error-boundary-kit/nuxt — auto-registers <ErrorBoundary> + auto-imports; useNuxtErrorBoundary() also catches what escapes every boundary via Nuxt's own vue:error/app:error hooks |
| vue-router errors | not seen by onErrorCaptured at all | not seen by onErrorCaptured at all | router's useRouterErrorBoundary() — catches navigation-guard and async-route-component errors via router.onError() |
| Testing helpers | you build them every time | you build them every time | vue-error-boundary-kit/testing — throw-on-demand components, a CapturedError fixture builder, a framework-agnostic recording reporter |
| Suspense + error boundary combined | you nest <Suspense> and your own boundary by hand | you nest <Suspense> and <NuxtErrorBoundary> by hand | async-boundary's <AsyncBoundary> — one component, default/loading/fallback slots |
| SSR | works, no fallback swap | works, no fallback swap | works, no fallback swap (see SSR notes — this is a Vue architecture limit, not specific to any of these) |
| Bundle cost | 0 | part of Nuxt | ~2.1 kB gzip core; adapters/devtools are separate entry points |
| Vapor-mode readiness | N/A | depends on Nuxt | only uses official onErrorCaptured/h() — no internal VDOM renderer APIs |
Not in v1: a full Vue Devtools browser-extension custom inspector (the in-app <ErrorHistoryPanel> above covers the same need without adding @vue/devtools-api as a dependency).
License
MIT