Official Sentry SDK for SvelteKit

SDK Status
This SDK is currently in Alpha state and we're still experimenting with APIs and functionality.
We therefore make no guarantees in terms of semver or breaking changes.
If you want to try this SDK and come across a problem, please open a GitHub Issue.
Compatibility
Currently, the minimum supported version of SvelteKit is 1.0.0
.
General
This package is a wrapper around @sentry/node
for the server and @sentry/svelte
for the client side, with added functionality related to SvelteKit.
Usage
Although the SDK is not yet stable, you're more than welcome to give it a try and provide us with early feedback.
Here's how to get started:
1. Prerequesits & Installation
-
Ensure you've set up the @sveltejs/adapter-node
adapter
-
Install the Sentry SvelteKit SDK:
npm install @sentry/sveltekit
yarn add @sentry/sveltekit
2. Client-side Setup
The Sentry SvelteKit SDK mostly relies on SvelteKit Hooks to capture error and performance data.
-
If you don't already have a client hooks file, create a new one in src/hooks.client.(js|ts)
.
-
On the top of your hooks.client.(js|ts)
file, initialize the Sentry SDK:
import * as Sentry from '@sentry/sveltekit';
Sentry.init({
dsn: '__DSN__',
tracesSampleRate: 1.0,
replaysSessionSampleRate: 0.1,
replaysOnErrorSampleRate: 1.0,
integrations: [new Sentry.Replay()],
});
-
Add our handleErrorWithSentry
function to the handleError
hook:
import { handleErrorWithSentry } from '@sentry/sveltekit';
const myErrorHandler = (({ error, event }) => {
console.error('An error occurred on the client side:', error, event);
});
export const handleError = handleErrorWithSentry(myErrorHandler);
3. Server-side Setup
-
If you don't already have a server hooks file, create a new one in src/hooks.server.(js|ts)
.
-
On the top of your hooks.server.(js|ts)
file, initialize the Sentry SDK:
import * as Sentry from '@sentry/sveltekit';
Sentry.init({
dsn: '__DSN__',
tracesSampleRate: 1.0,
});
-
Add our handleErrorWithSentry
function to the handleError
hook:
import { handleErrorWithSentry } from '@sentry/sveltekit';
const myErrorHandler = (({ error, event }) => {
console.error('An error occurred on the server side:', error, event);
});
export const handleError = handleErrorWithSentry(myErrorHandler);
-
Add our request handler to the handle
hook in hooks.server.ts
:
import { sentryHandle } from '@sentry/sveltekit';
export const handle = sentryHandle;
4. Configuring load
Functions
-
To catch errors and performance data in your universal load
functions (e.g. in +page.(js|ts)
), wrap our wrapLoadWithSentry
function around your load code:
import { wrapLoadWithSentry } from '@sentry/sveltekit';
export const load = wrapLoadWithSentry((event) => {
});
-
To catch errors and performance data in your server load
functions (e.g. in +page.server.(js|ts)
), wrap our wrapServerLoadWithSentry
function around your load code:
import { wrapServerLoadWithSentry } from '@sentry/sveltekit';
export const load = wrapServerLoadWithSentry((event) => {
});
5. Vite Setup
-
Add our sentrySvelteKit
plugins to your vite.config.(js|ts)
file so that the Sentry SDK can apply build-time features.
Make sure that it is added before the sveltekit
plugin:
import { sveltekit } from '@sveltejs/kit/vite';
import { sentrySvelteKit } from '@sentry/sveltekit';
export default {
plugins: [sentrySvelteKit(), sveltekit()],
};
This adds the Sentry Vite Plugin to your Vite config to automatically upload source maps to Sentry.
Uploading Source Maps
After completing the Vite Setup, the SDK will automatically upload source maps to Sentry, when you
build your project. However, you still need to specify your Sentry auth token as well as your org and project slugs. You
can either set them as env variables (for example in a .env
file):
SENTRY_ORG
your Sentry org slugSENTRY_PROJECT
your Sentry project slugSENTRY_AUTH_TOKEN
your Sentry auth token
Or you can pass them in whatever form you prefer to sentrySvelteKit
:
import { sveltekit } from '@sveltejs/kit/vite';
import { sentrySvelteKit } from '@sentry/sveltekit';
export default {
plugins: [
sentrySvelteKit({
sourceMapsUploadOptions: {
org: 'my-org-slug',
project: 'my-project-slug',
authToken: process.env.SENTRY_AUTH_TOKEN,
},
}),
sveltekit(),
],
};
Configuring Source maps upload
Under sourceMapsUploadOptions
, you can also specify all additional options supported by the
Sentry Vite Plugin.
This might be useful if you're using adapters other than the Node adapter or have a more customized build setup.
import { sveltekit } from '@sveltejs/kit/vite';
import { sentrySvelteKit } from '@sentry/sveltekit';
export default {
plugins: [
sentrySvelteKit({
sourceMapsUploadOptions: {
org: 'my-org-slug',
project: 'my-project-slug',
authToken: 'process.env.SENTRY_AUTH_TOKEN',
include: ['dist'],
cleanArtifacts: true,
setCommits: {
auto: true,
},
},
}),
sveltekit(),
],
};
Disabeling automatic source map upload
If you don't want to upload source maps automatically, you can disable it as follows:
import { sveltekit } from '@sveltejs/kit/vite';
import { sentrySvelteKit } from '@sentry/sveltekit';
export default {
plugins: [
sentrySvelteKit({
autoUploadSourceMaps: false,
}),
sveltekit(),
],
};
Known Limitations
This SDK is still under active development and several features are missing.
Take a look at our SvelteKit SDK Development Roadmap to follow the progress:
-
Adapters other than @sveltejs/adapter-node
are currently not supported.
We haven't yet tested other platforms like Vercel.
This is on our roadmap but it will come at a later time.
-
We're aiming to simplify SDK setup in the future so that you don't have to go in and manually add our wrappers to all your load
functions.
This will be addressed once the SDK supports all Sentry features.