Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

timfish/sentry-tauri

Repository files navigation

tauri-plugin-sentry

A Sentry plugin for Tauri v2.

It's perfectly reasonable to use Sentry's Rust and browser SDKs separately in a Tauri app. However, this plugin passes browser breadcrumbs and events through the Rust backend which has a number of advantages:

  • Browser events are enriched with Rust, OS and device context
    • Events from both Rust and browser will have the same app and device context
  • Breadcrumbs are merged from both the Rust and browser SDKs
    • See what was happening in the Rust backend and the browser frontend at the time of the event

Installation

sentry-rust-minidump is re-exported by sentry-tauri so you don't need to add it as dependencies.

Add sentry and tauri-plugin-sentry to dependencies in Cargo.toml:

[dependencies]
sentry = "0.42"
tauri-plugin-sentry = "0.5"

Run one of these commands to add the capabilities:

  • npm: npm run tauri add sentry
  • yarn: yarn run tauri add sentry
  • pnpm: pnpm tauri add sentry
  • cargo: cargo tauri add sentry

however, make sure that you have sentry:default in your capabilities:

src-tauri/capabilities/*.json
{
"$schema": "./../gen/schemas/windows-schema.json",
"identifier": "main",
"local": true,
"windows": [
"main"
],
"permissions": [
"sentry:default" // <- important
]
}

Usage

This example also shows usage of sentry_rust_minidump which allows you to capture minidumps for native crashes from a separate crash reporting process.

use sentry;
use tauri_plugin_sentry;

pub fn run() {
let client = sentry::init((
"__YOUR_DSN__",
sentry::ClientOptions {
release: sentry::release_name!(),
auto_session_tracking: true,
..Default::default()
},
));

// Caution! Everything before here runs in both app and crash reporter processes
#[cfg(not(target_os = "ios"))]
let _guard = tauri_plugin_sentry::minidump::init(&client);
// Everything after here runs in only the app process

tauri::Builder::default()
.plugin(tauri_plugin_sentry::init(&client))
.run(tauri::generate_context!())
.expect("error while running tauri app");
}

The Plugin:

  • By default injects and initialises @sentry/browser in every web-view
  • Includes custom transport and beforeBreadcrumb hook that passes events and breadcrumbs to the Rust SDK via the Tauri invoke API
  • Tauri + serde + existing Sentry Rust types = Deserialisation mostly Just Works(tm)

Custom Sentry Browser Configuration

By default the plugin injects a pre-minified version of @sentry/browser. If you want to configure Sentry in the browser yourself, you can disable the injection and pass the default config to Sentry.init.

Disable automatic injection:

tauri::Builder::default()
.plugin(tauri_plugin_sentry::init_with_no_injection(&client))
.run(tauri::generate_context!())
.expect("error while running tauri app");
import { defaultOptions } from "tauri-plugin-sentry-api";
import * as Sentry from "@sentry/browser";

Sentry.init({
...defaultOptions,
/**
* Your custom configuration here
*/
});

Example App

Clone this repository and install dependencies:

> yarn install

In examples/basic-app/src-tauri/src/main.rs replace the DSN with your DSN

Run in development mode:

> yarn example

About

A Tauri plugin for Sentry

Resources

Readme

Stars

Watchers

Forks

Packages