Open-source webhook & notification engine for Stellar blockchain events.
Horizon is being deprecated. Allium and Alchemy fill the indexing gap β but they are paid, centralised services. There is no open-source, self-hostable tool that lets a developer say:
"Send me a webhook when wallet X receives a payment, or when contract Y emits event Z."
Ethereum has The Graph, Alchemy Notify, and dozens of open-source alternatives. Stellar has nothing community-owned. Until now.
| Feature | Status |
|---|---|
| Stream Horizon payments per account | β |
| Stream account activity (all tx) | β |
| Stream all network transactions | β |
| Poll Soroban contract events (RPC) | β |
| Webhook delivery with HMAC-SHA256 | β |
| Email notifications (SMTP) | β |
| Telegram bot notifications | β |
| Exponential back-off retries | β |
| Cursor persistence (resume on restart) | β |
| REST API with API-key auth | β |
| Next.js dashboard | β |
| Docker + docker-compose | β |
| One-click Railway deploy | π |
| Discord / Slack channels | π |
| PostgreSQL support | π |
git clone https://github.com/stellar-notify/stellar-notify.git
cd stellar-notify
cp .env.example .env # edit values
docker-compose up -dThe engine runs on http://localhost:3000 and the dashboard on http://localhost:3001.
# Prerequisites: Node.js >= 18
npm install
cp .env.example .env # edit values
npm run migrate # initialise SQLite
npm startCopy .env.example to .env and fill in the values. Key variables:
| Variable | Description | Default |
|---|---|---|
STELLAR_NETWORK |
testnet or mainnet |
testnet |
HORIZON_URL |
Custom Horizon endpoint | network default |
SOROBAN_RPC_URL |
Soroban RPC endpoint | network default |
ADMIN_PASSWORD |
Password to issue API keys | changeme |
DB_PATH |
SQLite file path | ./data/stellar-notify.db |
SMTP_* |
Email configuration | β |
TELEGRAM_BOT_TOKEN |
Telegram bot token | β |
curl -X POST http://localhost:3000/api/auth/keys \
-H "Content-Type: application/json" \
-d '{"admin_password":"changeme","label":"my-app"}'
# Returns: { "key": "snk_β¦" } β store this, shown only oncecurl -X POST http://localhost:3000/api/subscriptions \
-H "Authorization: Bearer snk_β¦" \
-H "Content-Type: application/json" \
-d '{
"type": "payment",
"label": "My wallet",
"filter": {
"account": "GABCβ¦XYZ",
"asset_code": "USDC",
"min_amount": "10"
},
"channel": "webhook",
"channel_config": {
"url": "https://your-app.com/hooks/stellar",
"secret": "optional-signing-secret"
}
}'| Type | Filter fields |
|---|---|
payment |
account, asset_code, min_amount |
account_activity |
account (required) |
transaction |
account (optional) |
contract_event |
contract_id, topics, poll_interval_ms |
| Channel | Config fields |
|---|---|
webhook |
url, secret (HMAC-SHA256 optional) |
email |
to, subject_prefix |
telegram |
chat_id |
{
"event_type": "payment",
"id": "β¦",
"from": "GABCβ¦",
"to": "GXYZβ¦",
"amount": "100.0000000",
"asset_code": "USDC",
"asset_issuer": "GA5ZSβ¦",
"transaction_hash": "abc123β¦",
"created_at": "2025-01-01T00:00:00Z"
}Requests include X-StellarNotify-Signature: sha256=<hmac> when a secret is configured.
Open http://localhost:3001. Enter your API key (issued above) to access:
- Create / pause / delete subscriptions
- Filter by event type and channel
- View delivery log with retry on failure
- Live stats (active subs, delivered, pending, failed)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β stellar-notify β
β β
β βββββββββββββ ββββββββββββββββ ββββββββββββ β
β β Horizon βββββΆβ StreamManagerββββΆβ Delivery β β
β β SSE β β (per-sub) β β Service β β
β βββββββββββββ ββββββββββββββββ ββββββ¬ββββββ β
β βββββββββββββ β β
β β Soroban βββββΆ polling loop ββββββΌβββββββ β
β β RPC β β SQLite β β
β βββββββββββββ ββββββ¬βββββββ β
β β β
β βββββββββββββββββββββββββββββββ βββββββΌβββββββ β
β β REST API β β Channels: β β
β β /subscriptions β β webhook β β
β β /deliveries β β email β β
β β /auth/keys β β telegram β β
β βββββββββββββββββββββββββββββββ ββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β²
Next.js Dashboard (port 3001)
PRs are welcome! See CONTRIBUTING.md for guidelines.
npm install
cp .env.example .env
npm start # engine on :3000
cd dashboard && npm install && npm run dev # dashboard on :3001MIT Β© stellar-notify contributors