selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

Rustrak logo

Self-host Rustrak

v0.21.1

Sentry-compatible error tracking you host yourself

BetaOpen SourceGPL-3.0
Updated10 hours ago
LanguageRust
Setup difficultyEasy
MobileResponsive
Stars
801
Port
8080 (HTTP API and dashboard)
Docker
rustrak/rustrak-server
Install with Docker

What is Rustrak?

Rustrak is a self-hosted error tracking server that speaks the Sentry protocol, letting you point existing Sentry SDKs at your own infrastructure by changing only the DSN. It ingests errors, transactions, logs, AI agent traces, and release health sessions through one endpoint. The server runs as a single Rust binary with SQLite by default (no external database required) or PostgreSQL for higher concurrency. The dashboard is served as static files alongside the API. Features include deterministic issue grouping, source map support, alerting via Slack, email, or webhook, team and project RBAC, OpenID Connect SSO with providers like Pocket ID, Authentik, Keycloak, and Google, a built-in MCP server for AI assistants, and a typed REST client. Licensed under GPL-3.0 with no paid tiers or hosted offering.

Should you self-host Rustrak?

Rustrak scores 55/100 on selfhost.directory (how scoring works) and ranks #4 of 5 in Error Tracking. It has 801 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v0.21.1, came out on 25 October 2026. New versions land roughly every 1 days.

Setup is easy: most people get it running in one sitting. An official Docker image is available. It is GPL-3.0-licensed and written mostly in Rust.

Its closest alternative on selfhost.directory is Healthchecks (73/100, 10 464 stars). It scores higher overall, so compare the two before you pick. See Rustrak vs Healthchecks side by side.

Features

  • AI agent traces
  • Alerting
  • Anonymous telemetryOpt-out
  • Data retention and cleanup
  • Error Tracking
  • MCP Server
  • OpenID Connect SSO
  • Performance monitoring
  • Prometheus Metrics
  • Release health
  • REST API with typed client
  • Source Map Support
  • Structured Logging
  • Team and project RBAC
  • Two-phase ingestion

Rustrak README

How to install Rustrak

Install Rustrak with Docker

Docker
Environment variables
SESSION_SECRET_KEY, CREATE_SUPERUSER, PUBLIC_URL, SSL_PROXY, DATABASE_URL, OIDC_*, SMTP_*, RUSTRAK_*

docker run -d
--name rustrak
-p 8080:8080
-v rustrak_data:/data
-e SESSION_SECRET_KEY=$(openssl rand -hex 32)
-e CREATE_SUPERUSER=admin@example.com:changeme123
rustrak/rustrak-server:latest

SQLite backend, single container with dashboard and API on port 8080

How to configure Rustrak

  • CREATE_SUPERUSERCreate admin user on startup (email:password). Only creates the user if the database has no users yet.

    Create admin user on startup (email:password). Only creates the user if the database has no users yet.

    values: email:password

  • DASHBOARD_URLPUBLIC_URLBase URL for the issue links in notifications when dashboard is on a different host.

    Base URL for the issue links in notifications when dashboard is on a different host.

    values: URL

  • DATABASE_MAX_CONNECTIONS10Maximum pool connections.

    Maximum pool connections.

    values: integer

  • DATABASE_MIN_CONNECTIONS1Minimum pool connections.

    Minimum pool connections.

    values: integer

  • DATABASE_URLsqlite:///data/rustrak.dbDatabase connection string. Defaults to sqlite:///data/rustrak.db for SQLite image; required for PostgreSQL image.

    Database connection string. Defaults to sqlite:///data/rustrak.db for SQLite image; required for PostgreSQL image.

    values: sqlite:///path or postgres://user:pass@host:port/db

  • DO_NOT_TRACKunsetCross-tool convention; 1 sends nothing either.

    Cross-tool convention; 1 sends nothing either.

    values: 1

  • HOST0.0.0.0TCP bind address.

    TCP bind address.

    values: IP address

  • INGEST_DIR/tmp/rustrak/ingestTemporary event storage directory.

    Temporary event storage directory.

    values: path

  • MAX_EVENTS_PER_HOUR1000000Max events/hour (global rate limit).

    Max events/hour (global rate limit).

    values: integer

  • MAX_EVENTS_PER_MINUTE60000Max events/minute (global rate limit).

    Max events/minute (global rate limit).

    values: integer

  • MAX_EVENTS_PER_PROJECT_PER_HOUR300000Max events/hour per project.

    Max events/hour per project.

    values: integer

  • MAX_EVENTS_PER_PROJECT_PER_MINUTE20000Max events/minute per project.

    Max events/minute per project.

    values: integer

  • OIDC_ADMIN_GROUPSnoneComma-separated groups that grant the global admin role.

    Comma-separated groups that grant the global admin role.

    values: comma-separated group names

  • OIDC_ALLOWED_DOMAINSallComma-separated email domains allowed to use SSO.

    Comma-separated email domains allowed to use SSO.

    values: comma-separated domains

  • OIDC_AUTO_PROVISIONfalseCreate an account for someone whose email has none.

    Create an account for someone whose email has none.

    values: true, false

  • OIDC_CLIENT_IDrequiredClient ID issued to Rustrak by the OIDC provider.

    Client ID issued to Rustrak by the OIDC provider.

    values: string

  • OIDC_CLIENT_SECRETrequiredClient secret issued to Rustrak by the OIDC provider.

    Client secret issued to Rustrak by the OIDC provider.

    values: string

  • OIDC_DISABLE_PASSWORD_LOGINfalseRefuse password sign-in, leaving SSO as the only way in (first account stays as break-glass).

    Refuse password sign-in, leaving SSO as the only way in (first account stays as break-glass).

    values: true, false

  • OIDC_GROUPS_CLAIMgroupsClaim that carries the identity's groups.

    Claim that carries the identity's groups.

    values: claim name

  • OIDC_ISSUER_URLdisabledProvider issuer URL used for discovery. Setting it turns SSO on.

    Provider issuer URL used for discovery. Setting it turns SSO on.

    values: OIDC issuer URL

  • OIDC_LINK_EXISTING_ACCOUNTSfalseLink to an existing account without asking for its password.

    Link to an existing account without asking for its password.

    values: true, false

  • OIDC_PROVIDER_NAMESSOLabel on the login button.

    Label on the login button.

    values: string

  • OIDC_REDIRECT_URLrequiredExact callback URL, ending in /auth/sso/callback.

    Exact callback URL, ending in /auth/sso/callback.

    values: URL

  • OIDC_REQUIRE_EMAIL_VERIFIEDtrueRefuse identities whose email the provider has not verified.

    Refuse identities whose email the provider has not verified.

    values: true, false

  • OIDC_SCOPESopenid email profileSpace-separated scopes for OIDC.

    Space-separated scopes for OIDC.

    values: space-separated scopes

  • PORT8080Server port for the API and the dashboard.

    Server port for the API and the dashboard.

    values: port number

  • PUBLIC_URLPublic-facing URL used in DSN strings and alert links. Must include the scheme (http:// or https://).

    Public-facing URL used in DSN strings and alert links. Must include the scheme (http:// or https://).

    values: URL with scheme

  • RUST_LOGinfoLog level (trace, debug, info, warn, error).

    Log level (trace, debug, info, warn, error).

    values: trace, debug, info, warn, error

  • RUSTRAK_DASHBOARDonWhether to serve the dashboard at all. 'off' keeps the server API-only.

    Whether to serve the dashboard at all. 'off' keeps the server API-only.

    values: on, off, true, false, 1, 0

  • RUSTRAK_DASHBOARD_DIR./staticWhere the compiled dashboard lives, relative to the working directory or absolute.

    Where the compiled dashboard lives, relative to the working directory or absolute.

    values: path

  • RUSTRAK_LOG_TIMEZONEUTCIANA timezone name for log timestamp display.

    IANA timezone name for log timestamp display.

    values: IANA zone name (e.g. Asia/Shanghai)

  • RUSTRAK_METRICSoffEnables GET /metrics on the server's existing port for Prometheus scraping.

    Enables GET /metrics on the server's existing port for Prometheus scraping.

    values: on, off

  • RUSTRAK_TELEMETRYonAnonymous usage report every 6 hours. 'off' sends nothing.

    Anonymous usage report every 6 hours. 'off' sends nothing.

    values: on, off

  • SESSION_SECRET_KEYrandom64-character key for session encryption, generated with openssl rand -hex 32. Required in production with SSL_PROXY=true.

    64-character key for session encryption, generated with openssl rand -hex 32. Required in production with SSL_PROXY=true.

    values: 64-character hex string

  • SMTP_FROMalerts@rustrak.localDefault sender address for email alerts.

    Default sender address for email alerts.

    values: email address

  • SMTP_HOSTSMTP server hostname for email alerts.

    SMTP server hostname for email alerts.

    values: hostname

  • SMTP_PASSWORDSMTP password.

    SMTP password.

    values: string

  • SMTP_PORT587SMTP port (587 for STARTTLS, 465 for SSL).

    SMTP port (587 for STARTTLS, 465 for SSL).

    values: port number

  • SMTP_USERNAMESMTP username.

    SMTP username.

    values: string

  • SOURCEMAP_CACHE_MB64Memory kept for parsed source maps across events.

    Memory kept for parsed source maps across events.

    values: integer (MB)

  • SOURCEMAP_STORAGE_PATH/data/sourcemapsDirectory for source map chunk storage.

    Directory for source map chunk storage.

    values: path

  • SSL_PROXYfalseSet to true when running behind a reverse proxy that terminates SSL (nginx, Cloudflare, etc.). Enables secure cookies.

    Set to true when running behind a reverse proxy that terminates SSL (nginx, Cloudflare, etc.). Enables secure cookies.

    values: true, false

Rustrak releases & version history

FAQ

Is there multi-user support?

Yes. Admins invite users and assign roles, and access can be limited per project.

Does Rustrak support alerts?

Yes. New issues and regressions can notify Slack, email, a webhook, or a custom webhook whose JSON body you write.

Can I ignore certain errors?

Use your SDK's beforeSend hook to filter events, or mute issues in the dashboard.

Why don't I see stack traces?

Check that your SDK is configured to send them. For minified JavaScript, upload source maps.

Why are my errors grouped incorrectly?

Rustrak groups by exception type, message, and transaction. Use custom fingerprints in your SDK for better control.

Is my data encrypted?

In transit: use HTTPS via reverse proxy. At rest: depends on your disk or PostgreSQL setup. Rustrak doesn't add additional encryption.

Can I export my data?

Yes, via the API using endpoints like /api/projects/1/issues and /api/projects/1/issues/ISSUE_ID/events with a Bearer token.

How long are events stored?

Indefinitely, until you delete them. An admin can remove old data by age and type under Settings → Storage. There is no automatic retention yet.

Can I run Rustrak without Docker?

Yes. Build from source with pnpm install and pnpm build --filter=@rustrak/server, then run the binary with DATABASE_URL and SOURCEMAP_STORAGE_PATH set to local paths.

Do I need to run the dashboard separately?

No. The server serves the dashboard at / on the same port as the API. Two variations exist for special cases: API-only mode (RUSTRAK_DASHBOARD=off) or dashboard on another host (rustrak/rustrak-ui).

Can I migrate from Sentry?

Yes, just change your DSN. Your SDK code stays the same. Historical data doesn't migrate; you start fresh.

How much resources does Rustrak need?

One container of about 20 MB that idles under 100 MB of memory. A 512 MB VPS is enough for a small team.

What does Rustrak cover?

Rustrak covers errors with grouping and stack traces, performance monitoring with transactions and spans, release health from SDK sessions, logs, and AI agent traces. It does not support session replays.

What SDKs work with Rustrak?

Any Sentry SDK works with Rustrak, including official SDKs for JavaScript, Python, Go, Rust, Java, .NET, PHP, Ruby, and more.

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…