Kubernetes-native Soroban event indexer for Stellar

Your contract events,
in your own Postgres.

Give it an event spec, a contract ID, and a stellar-rpc endpoint. Sorolog streams every Soroban event into your own PostgreSQL — one table per event, reliable and gap-free — from a single YAML manifest.

runs in your cluster · apache-2.0 · sorolog.com/v1alpha1
sorolog — usdc-stellar
$
The gap

Hosted indexers are delayed, rate-limited, and keep your data on their side. Raw stellar-rpc leaves paging, the retention window and XDR decoding to you. SubQuery means projects and heavy ops. There was no declarative path to your events, in your Postgres, in plain SQL.

01How it works

Declare it. The operator does the rest.

One Indexer resource describes what you want. A Kubernetes operator keeps it true — schema, tables, worker, status.

STEP 1

Write one manifest

Contracts, event-spec ref, RPC pool, storage — the whole setup.

kind: Indexer
metadata: { name: usdc-stellar }
spec:
  rpc: # health-checked failover
    - https://soroban-testnet.stellar.org
  contracts:
    - contractId: "CBIEL…DAMA"
      eventSpec: { configMapRef: usdc-events }
      startLedger: 0
STEP 2

The operator provisions

A reconcile loop turns the spec into running parts — and heals them.

Indexer CR — 1 YAML
Sorolog Operator
schema · tables · worker · status
pod dies? config drifts? it converges back.
STEP 3

Query plain SQL

Each event is a table in your Postgres. No API between you and your data.

-- one table per event
SELECT "from", "to", amount
FROM usdc_transfer
WHERE amount > 1000000000
ORDER BY ledger DESC;
GA7Q…PZWM GDRX…H2LV3,020.95GB2K…4JTA GCQL…X59W3,454.57GDKI…M3UB GA5T…B7DA60,884.96

event spec in → tables out · empty events list = every event in the spec · startLedger: 0 backfills from the RPC retention window

02Reliability

Even if the network blips, no data is lost.

A poll-based backbone chosen for loss-free, self-healing ingestion — not just latency. Don't take our word for it: break something.

Cursor + checkpoint

The last processed ledger lives in Postgres. After any crash it resumes exactly there.

Gap-free backfill

Event inserts and cursor advance share one transaction — a commit, or nothing.

No reorgs on Stellar

Ledgers are final the moment they close — what Sorolog writes never gets rolled back.

RPC failover

A passphrase-checked pool with rotation and backoff. A blip never becomes a gap.

chaos lab — try to lose datasimulated
soroban-rpc-1soroban-rpc-2worker pod
ledger head
3,591,310
cursor
3,591,310
lag
0
gaps
0
t+0.0s✓ usdc-stellar · phase=Live · cursor=head · lag=0 · gaps=0
the invariant: gaps stay 0
03Compare

A specific combination nobody else offers.

MercurySubQueryRaw RPCSorolog
Data in your own DBNoVia subquery-nodeIf you build it✓ Yes
Plain SQL accessGraphQLGraphQLRaw XDR/JSON✓ Yes
Retention & gap handlingTheirsYesOn you✓ Built-in
Setup effortLowMed–highHigh✓ One YAML

Honest positioning: Mercury stays great for hosted zero-ops indexing; SubQuery for multi-chain projects. Sorolog is for teams that want their own Postgres, plain SQL, and K8s-native ops — together.

Get started

One YAML. A running indexer.

Runs in your cluster. Your data never leaves it.

$ kubectl apply -f https://sorolog.com/install.yaml
runs in your cluster · apache-2.0 · v1alpha1