Epure

Changelog

Engineering log for the binary (epure-sh/epure) and docs IA on epure.sh. Narrative marketing copy lives at /changelog.

Format: Keep a Changelog · Semantic Versioning.

Unreleased

Nothing yet.

[0.1.7] — 2026-10-04

Binary: ghcr.io/epure-sh/epure:v0.1.7 · GitHub release · Compare v0.1.6…v0.1.7

Envelope ingest accepts gzip/zlib bodies (PHP/Laravel and other compressing SDKs) and CRLF separators. Outbound webhooks pin DNS to the validated address.

Fixed

Binary

  • Decompress gzip/zlib envelope bodies before parsing (Laravel http_compression default)
  • Normalize \r\n envelope item separators
  • Ingest matrix covers every SDK envelope fixture raw + gzip
  • Webhook dispatch pins connect to the SSRF-validated IPs (blocks DNS rebinding between check and request)
  • Login and register stay on the page when session_secure is on and the browser is on HTTP
  • GET /api/v1/auth/config returns session_secure

Deploy

  • --profile tls on deploy/docker-compose.prod.yml starts Caddy (deploy/Caddyfile) on ports 80 and 443
  • ./configure --prod writes EPURE_SITE_ADDRESS and refuses a raw IP

Docs

Upgrade

git pull

Pin the release image

command

EPURE_IMAGE=ghcr.io/epure-sh/epure:v0.1.7
docker compose -f docker-compose.yml -f deploy/docker-compose.prod.yml --profile tls up -d

No new migration in this update. Open https://your-hostname/login. Drop --profile tls only when HTTPS is already in front. The earlier 20261001120000_credential_generation migration still runs on first boot of this tag.

[0.1.6] — 2026-10-01

Binary: ghcr.io/epure-sh/epure:v0.1.6 · GitHub release · Compare v0.1.5…v0.1.6

epure-cli ships in the GHCR image. PAT/MCP rate limits raised for agent loops.

Fixed

Binary

  • Image workflow packs epure-cli beside epure (Dockerfile.runtime)
  • PAT rate limits: 600 reads / 120 writes per minute (was 120 / 20); failed PAT attempts count toward the bucket

Docs

  • Current image pin is driven by LATEST_RELEASE in lib/changelog/releases.ts — add a row there when cutting a release

Upgrade

git pull, pin EPURE_IMAGE=ghcr.io/epure-sh/epure:v0.1.6, docker compose up -d. No migration.

[0.1.5] — 2026-10-01

Binary: ghcr.io/epure-sh/epure:v0.1.5 · GitHub release · Compare v0.1.4…v0.1.5

Official Sentry SDKs authenticate with the public key only. Ingest no longer requires sentry_secret.

Fixed

Binary

  • DSN auth accepts sentry_key alone on X-Sentry-Auth and query params
  • When a client still sends sentry_secret, Epure validates it; empty or omitted secret is accepted

Docs

Upgrade

git pull
# in .env:
EPURE_IMAGE=ghcr.io/epure-sh/epure:v0.1.5
docker compose up -d

If SDKs still return invalid_dsn, you are on a pre-v0.1.5 binary — pull and recreate. Re-copy the DSN from Settings → SDK connection (public-key form). No database migration.

[0.1.4] — 2026-09-30

Binary: ghcr.io/epure-sh/epure:v0.1.4 · GitHub release · Compare v0.1.3…v0.1.4

Public registration can be closed after the first account exists.

Added

Binary

  • EPURE_REGISTRATION=false blocks new workspaces on password register and Google sign-up
  • Login, existing Google accounts, and invitation links stay open
  • Login page hides Register when GET /api/v1/auth/config reports registration_enabled: false

Docs

Upgrade

Create the account you need, git pull so Compose and .env.example match the release, set EPURE_REGISTRATION=false, bump EPURE_IMAGE if needed, recreate the container. No migration.

[0.1.3] — 2026-09-28

Binary: ghcr.io/epure-sh/epure:v0.1.3 · GitHub release · Compare v0.1.2…v0.1.3

Numeric DSN project segments for official Sentry SDK validation (UUIDs remain internal primary keys).

Added

Binary

  • dsn_project_id on projects; ingest paths resolve numeric DSN segment
  • Dashboard and setup copy DSN with numeric segment

Docs

  • Quickstart, concepts, installation, troubleshooting, issues, and SDK matrix updated for numeric DSN ids
  • Redirect /docs/quickstart → /docs/get-started/quickstart

Upgrade

After upgrade, re-copy the DSN from Settings — do not reuse a UUID from the project URL in the DSN path.

[0.1.2] — 2026-09-28

Binary: ghcr.io/epure-sh/epure:v0.1.2 · GitHub release · Compare v0.1.1…v0.1.2

Agent workspace for coding tools: scoped PATs, HTTP Agent API, epure-cli, and @epure/mcp.

Added

Binary

  • Agent API (/api/v1/agent/*) — queue, issue context, scoped PATs (write:admin, project read/write)
  • epure-cli in the release image (MCP and CLI guide)
  • @epure/mcp stdio MCP server (build from repo tools/epure-mcp; npm when @epure scope is live)
  • Dashboard: agent token tab, setup wizard refresh (platform marks, docs links, Apply with AI)
  • OpenAPI in product repo: docs/agent.openapi.yaml

Docs

Changed

  • Agent API and Authentication: PAT covers full /api/v1/*, not only /agent/*
  • Settings agent tokens aligned with UI scope checkboxes
  • Calm Ledger design tokens and brand kit refresh in the product UI

[0.1.1] — 2026-09-26

Binary: ghcr.io/epure-sh/epure:v0.1.1 · GitHub release · Compare v0.1.0…v0.1.1

Setup and connection UI cover the full SDK matrix — not only JavaScript.

Added

  • Java and .NET on the setup wizard language picker (with framework icons)
  • Shared multi-platform SDK snippets in Connection settings and the Releases empty state

Notes

  • Ingest stays DSN-only for official Sentry SDKs. Symbolication remains JS/TS sourcemaps only.

[0.1.0] — 2026-09-23

Binary: ghcr.io/epure-sh/epure:v0.1.0 · GitHub release

First public tag. Error tracking for exceptions. Keep official Sentry SDKs. Change the DSN.

Added

Binary

  • Envelope + store ingest · spike valve · async 202 worker
  • JS/TS sourcemap demangle · fingerprint grouping · PII scrub
  • PostgreSQL 16 + RLS · monthly partitions + TTL
  • Dashboard triage · Google OAuth + password · keyboard j k e i
  • Regressions · snooze · velocity · webhooks · multi-project · RBAC lite
  • docker compose up with no .env required · deploy overlays under deploy/

Docs

  • Docs site on epure.sh (/docs): Get started, platforms (Browser, Node, Next.js, Python, Go, Ruby, PHP, Java, .NET), product UI, self-hosting, ingest/Issues/Events API
  • Try ingest panel: copyable store curl + JSON body; fields persist in the tab
  • Copyable command panels on product and self-host pages
  • Object-first API: Ingest, Issues, Events, Authentication, Errors
  • Docs IA: Get started / Platforms / Product / Guides / Self-hosting / API

Changed

  • Envelope reference title is Ingest (URL /docs/api/envelope unchanged)
  • Clone instructions target epure-sh/epure (Compose at repo root)
  • No .env required for docker compose up; ./configure --prod for VPS secrets
  • docker compose up pulls ghcr.io/epure-sh/epure; pin with EPURE_IMAGE

Out of scope

Tracing, session replay, profiling, log product, iOS/Android symbolication. No Redis, Kafka, or SQLite-as-primary on the self-host path.

How to read this page

SectionMeaning
AddedNew surface in the binary or docs
ChangedBehavior or IA that existing readers must notice
FixedDefect closed in a tagged release
Out of scopeExplicit product boundary

Confirm the running build

Health has no auth. Use this after compose up or an upgrade.

command

curl -sS http://localhost:8080/health

Expected

{"status":"ok"}
Where are GitHub compare links?

Each tagged section links to GitHub Releases and a compare URL when a previous tag exists. Pin production with EPURE_IMAGE=ghcr.io/epure-sh/epure:v0.1.7.

Docs vs marketing changelog?

This page is the engineering log for the binary and docs IA. The marketing changelog is /changelog. Upgrade steps: Upgrades.