Quickstart
Host up → DSN → one exception → Issues. Epure does not ship a client SDK. Use the official Sentry package for your runtime, change only dsn, set tracing/replay/profiling sample rates to 0.
Fastest with the dashboard: after step 2, use Setup and Apply with AI (same stacks and snippets as this page). Fastest without an SDK: Try ingest. Full map: Pick your SDK.
Which package?
| If you ship… | Package | Deep dive |
|---|---|---|
| SPA in the browser (React, Vue, …) | @sentry/browser | Browser |
| React (SDK wrapper) | @sentry/react | Browser |
| Node API / worker | @sentry/node | Node |
| Next.js | @sentry/nextjs | Next.js |
| Python | sentry-sdk | Python |
| Go | sentry-go | Go |
| Ruby | sentry-ruby | Ruby |
| PHP | sentry/sentry | PHP |
| Java (JVM, not Android) | io.sentry:sentry | Java |
| .NET | Sentry (NuGet) | .NET |
JS/TS fixtures in CI use 7.120.0. Match the Issues environment filter to your SDK tag (local in the examples below).
Already have a host?
Skip step 1. Copy the DSN from Settings → SDK connection or open Setup, then start at step 2.
Deploy on Render, Railway, Coolify, or Dokploy?
Import the checked-in templates from GitHub — no marketplace export. See PaaS and panels or the one-click deploy guide.
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, set EPURE_PORT, recreate epure (URL follows on localhost). Configuration.
Confirm health
No auth. Run after compose is up.
command
curl -sS http://localhost:8080/health
Expected
{"status":"ok"}Open http://localhost:8080. Register — new accounts get Acme Web + Acme API preview issues. Full install notes: Installation.
For high-volume local UX fixtures (fixed numeric DSN ids):
./scripts/seed.sh --email you@example.com --password 'choose-a-password'Copy a DSN and open Setup
- Create or open a project → Setup (
/p/:projectId/setup) or Settings → SDK connection. - Create a DSN key if none exists. The secret is shown once.
http://{public_key}@localhost:8080/{dsn_project_id}Copy the full string from the dashboard — do not paste the project UUID from the URL into the DSN.
After ./scripts/seed.sh, you can skip the UI and use the seed DSN in Try ingest.
Setup wizard · Apply with AI
On Setup, pick Fresh install or Migrating from Sentry, then choose your stack (JavaScript, TypeScript, React, Node, Next.js, Python, Go, PHP, Ruby, Java, .NET — same icons as the dashboard).
| Action | What you get |
|---|---|
| Copy install | One-line command (npm, pip, go get, …) pinned like the snippets below |
| Copy init | DSN-filled Sentry.init (or runtime equivalent) for your stack |
| Apply with AI | Full agent prompt: discovery questions, install/init workflow, your DSN, and a link to the matching platform doc on epure.sh |
Paste the prompt into Cursor Agent, Claude Code, or any editor that edits the repo. The prompt mirrors a wire-up checklist (sample rates 0, one test exception, confirm 202 → Issues). From Sentry? Choose Migrating from Sentry so the prompt searches for existing Sentry.init and swaps only dsn. Short path: Migrate from Sentry. Full checklist: docs.
Browser SPAs: set EPURE_CORS_ORIGINS before client-side sends — Browser · CORS.
Install the official SDK
npm install @sentry/browser@7.120.0Init once, then throw
Call 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. 60-second guide · full checklist.
For Sentry JS v8+, also set enableTracing: false when the option exists.
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.
On Setup, the Verify step waits for the same signal. 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.sh.
Try ingest
Build a store POST for a host you already run. Seed defaults match ./scripts/seed.sh. Auth is sentry_key only (v0.1.5+). 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"
-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:
Post a browser envelope fixture
command
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" \ -H "Content-Type: application/x-sentry-envelope" \ --data-binary @fixtures/sentry/browser/envelope.txt
Expected
HTTP/1.1 202
Expect HTTP/1.1 202 and {"id":"..."}.
Next
FAQ
What does Apply with AI do?
It copies a structured prompt into your clipboard: stack confirmation questions, install/init steps, your project DSN, and the matching epure.sh platform doc. It does not call an external API — you paste into Cursor Agent or another coding agent. Use Fresh vs Migrating from Sentry on Setup so the workflow matches your repo.
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.