Get startedQuickstart

Quickstart

Run Epure locally, point a Sentry JS/TS SDK at the DSN, and open the first issue.

Host up → copy a DSN → capture one exception → Issues. Epure does not ship a client SDK. This walkthrough uses JS fixtures (@sentry/browser / @sentry/node 7.120.0). Other runtimes: Pick your SDK.

First issue in five steps

Copy a DSN, call Sentry.init, then captureException. Ingest returns 202 before the Issues row appears.

App surfacePackageDoc
SPA in the browser (React, Vue, …)@sentry/browserBrowser
Node API / worker@sentry/nodeNode
Next.js@sentry/nextjsNext.js
Pythonsentry-sdkPython
Gosentry-goGo
Rubysentry-rubyRuby
PHPsentry-phpPHP
Java (JVM, not Android)sentry-javaJava
.NETSentry.NET

Match the environment filter to the SDK tag (local in the examples).

Already have a host?

Skip step 1. Copy the DSN from Settings → SDK connection and start at step 2.

Start the two containers

Compose files live at the public product repo root.

Clone and compose up

command

git clone https://github.com/epure-sh/epure.git
cd epure
docker compose up

8080 taken? cp .env.example .env and set EPURE_PORT plus EPURE_PUBLIC_URL. Configuration.

Wait until health is ok:

curl -sS http://localhost:8080/health
{"status":"ok"}

Open http://localhost:8080. Register, or for local smoke only:

./scripts/seed-dev.sh

Login: dev@epure.local / devpassword. Full install notes: Installation.

Copy a DSN

Dashboard → Settings → SDK connection (or the setup checklist). Create a key if none exists. Secret is shown once.

http://{public_key}@localhost:8080/{project_id}

After seed-dev, you can skip the UI and use the seed DSN in Try ingest below.

Install the SDK

npm install @sentry/browser@7.120.0

Init once, then throw

Call Sentry.init at startup. Set unused sample rates to 0. Transactions, replay, and profiles are discarded.

import * as Sentry from "@sentry/browser";

Sentry.init({
  dsn: "http://YOUR_PUBLIC_KEY@localhost:8080/YOUR_PROJECT_ID",
  environment: "local",
  release: "my-app@0.0.0",
  tracesSampleRate: 0,
  profilesSampleRate: 0,
  replaysSessionSampleRate: 0,
  replaysOnErrorSampleRate: 0,
});

Sentry.captureException(new Error("Epure quickstart test"));

Migrating from Sentry SaaS: keep the same init options; replace only dsn.

Confirm 202, then Issues

Ingest returns 202 before the row appears. Locally the worker usually flushes in under a second.

Expected ingest body:

{ "id": "660e8400-e29b-41d4-a716-446655440001" }

Refresh http://localhost:8080. Match the environment filter to Sentry.init (local). You should see an unresolved issue for Error / Epure quickstart test.

Empty feed copy: 0 UNRESOLVED EXCEPTIONS. If that is you after a 202, open Verify.

Try ingest without an SDK

POST legacy store JSON for the same 202. Seed fields match ./scripts/seed-dev.sh.

Try ingest

Build a store POST for a host you already run. Seed defaults match ./scripts/seed-dev.sh. Change host if EPURE_PORT is not 8080. Fields persist in this tab.

store curl

curl -sS -D - -o /tmp/epure-ingest.json -X POST
  "http://localhost:8080/api/550e8400-e29b-41d4-a716-446655440000/store/"
  -H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=a1b2c3d4e5f6g7h8i9j0, sentry_secret=supersecretdevkey"
  -H "Content-Type: application/json"
  -d '{
  "platform": "javascript",
  "exception": {
    "values": [{ "type": "Error", "value": "Epure try-it" }]
  }
}'

Expected

HTTP/1.1 202 Accepted

{ "id": "<event-uuid>" }

Then open Issues. This panel does not POST from the browser. CORS and your DSN stay on your machine.

Envelope fixture from the repo root:

curl -sS -D - -o /tmp/epure-envelope.json -X POST \
  "http://localhost:8080/api/550e8400-e29b-41d4-a716-446655440000/envelope/" \
  -H "X-Sentry-Auth: Sentry sentry_version=7, sentry_key=a1b2c3d4e5f6g7h8i9j0, sentry_secret=supersecretdevkey" \
  -H "Content-Type: application/x-sentry-envelope" \
  --data-binary @fixtures/sentry/browser/envelope.txt

Expect HTTP/1.1 202 and {"id":"..."}.

Next

Does Sentry JS 8.x work?

Often yes, though CI fixtures are 7.120.0. On v8+, set enableTracing: false when the option exists, and keep traces, profiles, and replay sample rates at 0. Pin 7.120.0 if you want the same line the docs exercise. Confirm a throw with Verify.

Can I use Python or curl only?

Yes. Envelope and store accept official Sentry SDKs and raw JSON, with store as the smallest wire path. Use Other runtimes or the Try ingest panel above. Demangle stays JS/TS only, so frames stay as sent.

Why is Issues empty after a 202?

Accept is non-blocking. Wait about a second, then match the environment chip to the SDK tag (local in these examples). Confirm you opened the project that owns the DSN. If the feed still says 0 UNRESOLVED EXCEPTIONS, follow the table on Verify.