Your own Stellar indexer, deployed in minutes.

Sierpe is a self-hosted server that watches the Stellar network for the contracts you register and keeps their complete history in your own Postgres, behind an honest REST API.

No forks, no custom code, no vendor. Configuration is data: register contracts at runtime through an authenticated API, and Sierpe classifies them, backfills their full history — replaying the public archives for ranges no RPC serves anymore — and follows the tip.

  1. Deploy the container next to an empty Postgres
  2. POST /v1/contracts {"contract_id": "C...", "from": "genesis"}
  3. Sierpe discovers the contract’s events from its on-chain spec and walks its history backwards, honestly declaring coverage
  4. GET /v1/contracts/C.../events?topic0=...&after=<cursor> — or just open / in a browser: the embedded UI covers it all

It indexes events, contract state, token transfers and the classic trustlines of SAC assets — each with full history and a current snapshot where that makes sense.

Honest by construction. Coverage and gaps are first-class data, declared in every API response. An empty page always tells you whether there is nothing — or whether it just hasn’t been indexed yet.

Latest news

Sierpe 1.5.2 — where it runs, and two fixes that widen the answer

2026-08-21

We set out to answer one question: if you hand the site to someone who needs an indexer, where can they actually put it? The result is a new page, Where it runs, covering app platforms, the three hyperscalers, serverless (no), self-hosted from Kubernetes to a Raspberry Pi, and twenty-five Postgres providers — each with a verdict and the one setting that matters.

Sierpe 1.5.1 — a stalled backfill and a wolf-crying warning

2026-08-21

Found by watching a real backfill on a real deployment, minutes after 1.5.0 shipped: the walk stopped 570 ledgers short of the data its operator was waiting for, retrying the same request every 40 seconds, logging unexpected end of JSON input forever.

Sierpe 1.5.0 — movements, and coverage that names its kind

2026-08-21

This release started as a user question: “I sent 100 USDC and 69 XLM to my escrow and they do not show up — and I do not want to register Circle’s USDC contract just to see my own deposits.”

He was right to expect them and right to refuse the workaround. A payment to a contract is emitted by the asset’s SAC, so transfers — which attributes rows to the emitter — can never answer “what came into my contract”. That is a different question, and 1.5.0 adds the resource that answers it.

Sierpe 1.4.1 and 1.4.2 — fixes from the first real deployment

2026-08-20

The first Basic-Auth deployment on a public domain found two bugs within an hour of going live. Both are the kind no test suite catches, because both live in the seams between the app and the world around it.

Sierpe 1.4.0 — Basic Auth for public deployments

2026-08-20

Sierpe’s default deployment shape is private networking: no public domain, your backend reaching the instance over your platform’s internal network. That is the RabbitMQ rule of thumb — management surfaces do not face the internet — and it stays the recommendation.

Older news… · RSS