Sentry React Router Framework Sdk logo

Sentry React Router Framework Sdk

Organization
getsentry
sentry-react-router-framework-sdk

Full Sentry SDK setup for React Router Framework mode. Use when asked to "add Sentry to React Router Framework", "install @sentry/react-router", or configure error monitoring, tracing, profiling, session replay, logs, or user feedback for a React Router v7 framework app.

Overview

Publishergetsentry
Repositorysentry-for-ai
Skill namesentry-react-router-framework-sdk
Stars
269
Forks
34
Bundled files
7
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 7 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by getsentry on GitHub. Read the source before you install it.

Installation

Install the Sentry React Router Framework Sdk AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/getsentry/sentry-for-ai/tree/main/skills-legacy/sentry-react-router-framework-sdk
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/getsentry/sentry-for-ai.git /tmp/sentry-for-ai
mkdir -p .claude/skills
cp -r /tmp/sentry-for-ai/skills-legacy/sentry-react-router-framework-sdk .claude/skills/sentry-react-router-framework-sdk
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Sentry React Router Framework Sdk in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Sentry React Router Framework Sdk on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Sentry React Router Framework Sdk is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

All Skills > SDK Setup > React Router Framework SDK

Sentry React Router Framework SDK

Opinionated wizard that scans your React Router Framework project and guides you through complete Sentry setup across client and server entry points.

Invoke This Skill When

  • User asks to "add Sentry to React Router Framework" or "set up Sentry in React Router v7 framework mode"
  • User wants to install or configure @sentry/react-router
  • User uses React Router framework entry files (entry.client.tsx, entry.server.tsx) and wants tracing/error capture
  • User asks about reactRouterTracingIntegration, sentryOnError, createSentryHandleRequest, or React Router wizard setup

Important: This SDK is currently beta. For React Router non-framework/data/declarative mode (v5/v6/v7), use sentry-react-sdk with @sentry/react integrations instead.


Phase 1: Detect

Run these commands to understand the project before making any recommendations:

bash
# Detect React Router Framework indicators and versions
cat package.json | grep -E '"react-router"|"@react-router/"|"react-router-dev"|"react-router-serve"'

# Detect Sentry package choice
cat package.json | grep -E '"@sentry/react-router"|"@sentry/react"|"@sentry/profiling-node"'

# Check entry point visibility and server instrumentation files
ls entry.client.tsx entry.server.tsx instrument.server.mjs react-router.config.ts vite.config.ts 2>/dev/null

# Check if React Router files are still hidden (framework mode helper command available)
cat package.json | grep -E '"reveal"|react-router'

# Detect runtime startup scripts and import strategy
cat package.json | grep -E '"dev"|"start"|NODE_OPTIONS|--import'

# Detect optional logging/profile-related dependencies
cat package.json | grep -E '"pino"|"winston"|"@sentry/profiling-node"'

# Detect companion backend directories
ls ../backend ../server ../api 2>/dev/null
cat ../go.mod ../requirements.txt ../Gemfile ../pom.xml 2>/dev/null | head -3

What to determine:

QuestionImpact
@sentry/react-router already installed?Skip install and move to feature setup
Framework entry files exposed?Need npx react-router reveal before manual config
Using @sentry/react instead?This is likely non-framework routing; redirect to sentry-react-sdk
react-router.config.ts + Vite config present?Source map upload and build-end hook setup path
NODE_OPTIONS --import available?Preferred server instrumentation startup path
@sentry/profiling-node desired/available?Enable server profiling integration
Backend directory found?Trigger Phase 4 cross-link suggestion

Phase 2: Recommend

Present a concrete recommendation based on what you found. Do not ask open-ended questions — lead with a proposal:

Recommended (core coverage):

  • ✅ Error Monitoring — always; captures client and server errors with framework hooks
  • ✅ Tracing — recommended baseline in framework apps with client/server request flow
  • ✅ Session Replay — recommended for user-facing applications

Optional (enhanced observability):

  • ⚡ Profiling — server-side profiling with @sentry/profiling-node
  • ⚡ Logs — structured Sentry.logger.* ingestion and correlation
  • ⚡ User Feedback — in-app feedback widget/reporting flows

Recommendation logic:

FeatureRecommend when...
Error MonitoringAlways — non-negotiable baseline
TracingUsually yes in framework apps; route and request timing is high-value
Session ReplayUser-facing product or difficult UX debugging
ProfilingServer performance investigations needed; Node runtime compatibility verified
LogsTeam wants log-search and trace correlation in Sentry
User FeedbackProduct/support teams need direct in-app issue reports

Propose: "I recommend Error Monitoring + Tracing + Session Replay first. Want me to also enable Profiling, Logs, and User Feedback?"


Phase 3: Guide

Option 1: Wizard (Recommended)

You need to run this yourself — the wizard is interactive and may require browser login:

bash
npx @sentry/wizard@latest -i reactRouter

It installs @sentry/react-router, exposes React Router entry files, creates instrumentation files, updates root error handling, configures source map upload, and adds verification examples.

Once it finishes, continue at Verification.

If the user skips wizard setup, continue with manual setup below.


Option 2: Manual Setup

Install packages
bash
npm install @sentry/react-router --save

If profiling is needed:

bash
npm install @sentry/profiling-node --save
Expose framework entry files
bash
npx react-router reveal
Configure client in entry.client.tsx
tsx
import * as Sentry from "@sentry/react-router";
import { startTransition, StrictMode } from "react";
import { hydrateRoot } from "react-dom/client";
import { HydratedRouter } from "react-router/dom";

Sentry.init({
  dsn: "___PUBLIC_DSN___",
  dataCollection: {
    // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
    // https://docs.sentry.io/platforms/javascript/guides/react-router/configuration/options/#dataCollection
    // userInfo: false,
    // httpBodies: [],
  },
  integrations: [
    Sentry.reactRouterTracingIntegration(),
    Sentry.replayIntegration(),
    Sentry.feedbackIntegration({ colorScheme: "system" }),
  ],
  enableLogs: true,
  tracesSampleRate: 1.0,
  tracePropagationTargets: [/^\//, /^https:\/\/yourserver\.io\/api/],
  replaysSessionSampleRate: 0.1,
  replaysOnErrorSampleRate: 1.0,
});

startTransition(() => {
  hydrateRoot(
    document,
    <StrictMode>
      <HydratedRouter onError={Sentry.sentryOnError} />
    </StrictMode>,
  );
});
Configure server in instrument.server.mjs
javascript
import * as Sentry from "@sentry/react-router";
import { nodeProfilingIntegration } from "@sentry/profiling-node";

Sentry.init({
  dsn: "___PUBLIC_DSN___",
  dataCollection: {
    // To disable sending user data and HTTP bodies, uncomment the lines below. For more info visit:
    // https://docs.sentry.io/platforms/javascript/guides/react-router/configuration/options/#dataCollection
    // userInfo: false,
    // httpBodies: [],
  },
  enableLogs: true,
  integrations: [nodeProfilingIntegration()],
  tracesSampleRate: 1.0,
  profileSessionSampleRate: 1.0,
});
Wrap server handlers in entry.server.tsx
tsx
import * as Sentry from "@sentry/react-router";
import { createReadableStreamFromReadable } from "@react-router/node";
import { renderToPipeableStream } from "react-dom/server";
import { ServerRouter } from "react-router";

const handleRequest = Sentry.createSentryHandleRequest({
  ServerRouter,
  renderToPipeableStream,
  createReadableStreamFromReadable,
});

export default handleRequest;

export const handleError = Sentry.createSentryHandleError({
  logErrors: false,
});

For custom server logic, use wrapSentryHandleRequest, getMetaTagTransformer, and manual Sentry.captureException in your custom handleError.

Load server instrumentation on startup

Prefer NODE_OPTIONS --import:

json
{
  "scripts": {
    "dev": "NODE_OPTIONS='--import ./instrument.server.mjs' react-router dev",
    "start": "NODE_OPTIONS='--import ./instrument.server.mjs' react-router-serve ./build/server/index.js"
  }
}

Fallback for platforms where runtime flags are restricted:

tsx
import "./instrument.server.mjs";

This direct-import method can result in incomplete auto-instrumentation compared to --import.

Configure source maps

vite.config.ts:

typescript
import { reactRouter } from "@react-router/dev/vite";
import {
  sentryReactRouter,
  type SentryReactRouterBuildOptions,
} from "@sentry/react-router";
import { defineConfig } from "vite";

const sentryConfig: SentryReactRouterBuildOptions = {
  org: "___ORG_SLUG___",
  project: "___PROJECT_SLUG___",
  authToken: process.env.SENTRY_AUTH_TOKEN,
};

export default defineConfig((config) => {
  return {
    plugins: [reactRouter(), sentryReactRouter(sentryConfig, config)],
  };
});

react-router.config.ts:

typescript
import type { Config } from "@react-router/dev/config";
import { sentryOnBuildEnd } from "@sentry/react-router";

export default {
  ssr: true,
  buildEnd: async ({ viteConfig, reactRouterConfig, buildManifest }) => {
    await sentryOnBuildEnd({ viteConfig, reactRouterConfig, buildManifest });
  },
} satisfies Config;

For Each Agreed Feature

Walk through features one at a time. Load the reference file, follow steps exactly, and verify before moving on:

FeatureReferenceLoad when...
Error Monitoring${SKILL_ROOT}/references/error-monitoring.mdAlways
Tracing${SKILL_ROOT}/references/tracing.mdRoute/request performance visibility needed
Profiling${SKILL_ROOT}/references/profiling.mdServer performance analysis needed
Session Replay${SKILL_ROOT}/references/session-replay.mdUser-facing app
Logs${SKILL_ROOT}/references/logging.mdStructured logs/correlation needed
User Feedback${SKILL_ROOT}/references/user-feedback.mdIn-app feedback flows needed
Framework Features${SKILL_ROOT}/references/react-router-framework-features.mdEntry files, wrappers, source maps, startup import strategy

For each feature: Read ${SKILL_ROOT}/references/<feature>.md, follow steps exactly, verify it works.


Configuration Reference

Key Sentry.init() options

OptionTypeDefaultNotes
dsnstring—Required; SDK disabled when empty
dataCollectionobject—Controls what data is collected (userInfo, cookies, httpHeaders, etc.)
dataCollection.userInfobooleantrueIncludes IP-derived user context
dataCollection.cookiesCollectBehaviortrueControls cookie collection and filtering
dataCollection.httpHeadersobject{ request: true, response: true }Controls HTTP header collection
sendDefaultPiibooleanfalseDeprecated: Use dataCollection instead; removed in v11
integrationsIntegration[]SDK defaultsAdd tracing/replay/feedback/profiling integrations
enableLogsbooleanfalseEnables Sentry.logger.* ingestion
tracesSampleRatenumber—Usually 1.0 in testing, lower in production
tracePropagationTargets`(stringRegExp)[]`SDK defaults
replaysSessionSampleRatenumber—Fraction of all sessions recorded
replaysOnErrorSampleRatenumber—Fraction of error sessions recorded
profileSessionSampleRatenumber—Fraction of transactions profiled (server profiling)
tunnelstring—Optional ad-blocker bypass endpoint
debugbooleanfalseVerbose SDK diagnostics

Framework-specific APIs

APIPurpose
reactRouterTracingIntegration()Client-side tracing integration for framework mode
sentryOnErrorHooks into React Router HydratedRouter error reporting
createSentryHandleRequest(...)Server request wrapper for framework entry server
createSentryHandleError(...)Server error handler wrapper
wrapServerLoader(...) / wrapServerAction(...)Manual wrapping for server loaders/actions
sentryReactRouter(...)Vite plugin for source maps/build integration
sentryOnBuildEnd(...)React Router build-end hook for source map processing

Verification

Wizard-generated path

If wizard examples were generated, open /sentry-example-page and trigger test actions.

Manual error test

tsx
export async function loader() {
  throw new Error("My first Sentry error!");
}

Manual tracing test

tsx
import * as Sentry from "@sentry/react-router";

export async function loader() {
  return Sentry.startSpan(
    { op: "test", name: "My First Test Transaction" },
    () => {
      throw new Error("My first Sentry error!");
    },
  );
}

Logs test

javascript
Sentry.logger.info("User example action completed");
Sentry.logger.warn("Slow operation detected", { operation: "data_fetch", duration: 3500 });
Sentry.logger.error("Validation failed", { field: "email", reason: "Invalid email" });

Confirm in Sentry:

  • Issues: errors appear
  • Traces: transaction/span data appears
  • Profiles: profiles appear when profiling enabled
  • Replays: replay entries appear when enabled
  • Logs: log events appear when enableLogs: true
  • User Feedback: submissions appear when feedback enabled

Phase 4: Cross-Link

After completing React Router Framework setup:

  1. Check whether the app is actually non-framework routing (v5/v6/v7 data/declarative with @sentry/react).
  2. If yes, redirect to sentry-react-sdk for non-framework routing integrations.

Then check companion backend coverage:

bash
ls ../backend ../server ../api ../go ../python 2>/dev/null
cat ../go.mod ../requirements.txt ../pyproject.toml ../Gemfile ../pom.xml 2>/dev/null | head -5
Backend detectedSuggest skill
Gosentry-go-sdk
Pythonsentry-python-sdk
Rubysentry-ruby-sdk
Node backend servicessentry-node-sdk
Java servicesUse @sentry/java docs

Troubleshooting

IssueSolution
entry.client.tsx / entry.server.tsx missingRun npx react-router reveal first
Client errors missingEnsure HydratedRouter includes onError={Sentry.sentryOnError}
Server errors missingUse createSentryHandleRequest and createSentryHandleError wrappers
Custom server handlers bypass SentryUse wrapSentryHandleRequest and manual captureException in custom handleError
Source maps not uploadedVerify sentryReactRouter plugin config and sentryOnBuildEnd hook
SENTRY_AUTH_TOKEN undefined in Vite configLoad env vars in config or use .env.sentry-build-plugin
Incomplete server auto-instrumentationPrefer NODE_OPTIONS='--import ./instrument.server.mjs' startup
Profiling data missingConfirm @sentry/profiling-node installed and nodeProfilingIntegration enabled
Running unsupported Node auto-instrumentation versionUse instrumentation API/manual wrappers as documented
Non-framework app configured with @sentry/react-routerSwitch to sentry-react-sdk + @sentry/react for v5/v6/v7 non-framework routes

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Sentry React Router Framework Sdk AI skill do?

Full Sentry SDK setup for React Router Framework mode. Use when asked to "add Sentry to React Router Framework", "install @sentry/react-router", or configure error monitoring, tracing, profiling, session replay, logs, or user feedback for a React Router v7 framework app.

Why use Sentry React Router Framework Sdk on TypingMind?

Because you install it once and use it with any model. Sentry React Router Framework Sdk is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Sentry React Router Framework Sdk in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/getsentry/sentry-for-ai/tree/main/skills-legacy/sentry-react-router-framework-sdk. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Sentry React Router Framework Sdk?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Sentry React Router Framework Sdk?

As many as you like. As long as a model supports skills, you can use Sentry React Router Framework Sdk with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Sentry React Router Framework Sdk AI skill free?

Yes. It is published on GitHub by getsentry under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇