{"id":40149593,"url":"https://github.com/celenium-io/celestia-indexer","last_synced_at":"2026-06-01T12:00:39.192Z","repository":{"id":203073258,"uuid":"708742679","full_name":"celenium-io/celestia-indexer","owner":"celenium-io","description":"🌐 Indexer for modular data availability network Celestia ","archived":false,"fork":false,"pushed_at":"2026-06-01T10:11:31.000Z","size":4976,"stargazers_count":33,"open_issues_count":1,"forks_count":18,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-06-01T10:25:42.116Z","etag":null,"topics":["api","blockchain","celestia","indexer"],"latest_commit_sha":null,"homepage":"https://celenium.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/celenium-io.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-10-23T09:50:15.000Z","updated_at":"2026-06-01T08:56:42.000Z","dependencies_parsed_at":"2023-10-26T15:34:21.087Z","dependency_job_id":"dc65b948-29a1-4b08-b1c5-89685dde4dc4","html_url":"https://github.com/celenium-io/celestia-indexer","commit_stats":null,"previous_names":["celenium-io/celestia-indexer"],"tags_count":148,"template":false,"template_full_name":null,"purl":"pkg:github/celenium-io/celestia-indexer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/celenium-io%2Fcelestia-indexer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/celenium-io%2Fcelestia-indexer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/celenium-io%2Fcelestia-indexer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/celenium-io%2Fcelestia-indexer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/celenium-io","download_url":"https://codeload.github.com/celenium-io/celestia-indexer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/celenium-io%2Fcelestia-indexer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33773782,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-01T02:00:06.963Z","response_time":115,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","blockchain","celestia","indexer"],"created_at":"2026-01-19T15:04:28.284Z","updated_at":"2026-06-01T12:00:38.895Z","avatar_url":"https://github.com/celenium-io.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcelenium-io%2Fcelestia-indexer.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcelenium-io%2Fcelestia-indexer?ref=badge_shield\u0026issueType=license)\n[![Build Status](https://github.com/celenium-io/celestia-indexer/workflows/Build/badge.svg)](https://github.com/celenium-io/celestia-indexer/actions?query=branch%3Amaster+workflow%3A%22Build%22)\n[![made_with golang](https://img.shields.io/badge/made_with-golang-blue.svg)](https://golang.org/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Go Coverage](https://github.com/celenium-io/celestia-indexer/wiki/coverage.svg)](https://raw.githack.com/wiki/celenium-io/celestia-indexer/coverage.html)\n[![Latest release](https://img.shields.io/github/v/release/celenium-io/celestia-indexer.svg)](https://github.com/celenium-io/celestia-indexer/releases)\n\n# Celestia Indexer | Celenium\n\nGo-based blockchain indexer and REST API for the [Celestia](https://celestia.org/) Data Availability (DA) network. It reads data from a Celestia full node, decodes blocks, transactions, messages, events, and blobs, and stores them in a PostgreSQL (TimescaleDB) database. A public Echo HTTP/WebSocket API and a private admin API serve the indexed data.\n\n## Architecture\n\n```\ncmd/\n  indexer/          # Core indexer daemon\n  api/              # Public REST API (port 9876)\n  private_api/      # Admin REST API (port 9877)\n  celestials/       # Off-chain Celestials metadata indexer\npkg/\n  indexer/\n    receiver/       # Fetches blocks from CometBFT RPC / REST / WebSocket\n    parser/         # Decodes raw blocks, txs, messages, events, blobs\n    storage/        # Persists parsed data inside a single DB transaction\n    rollback/       # Handles chain reorganizations\n    genesis/        # Handles the genesis block\ninternal/\n  storage/          # Domain model structs and storage interfaces\n    postgres/       # Bun ORM implementations, migrations, hypertables\nnode/\n  rpc/              # CometBFT RPC client\n  api/              # Node REST API client\n  dal/              # DAL API client (blob retrieval)\n```\n\n**Indexer pipeline:** CometBFT RPC/WS → Receiver → Parser → Storage → PostgreSQL\n\n## Prerequisites\n\n- [Docker](https://docs.docker.com/engine/install/) and Docker Compose\n- [Go 1.26+](https://go.dev/doc/install) (for local development and testing)\n\n## Quick Start\n\nClone the repository:\n\n```sh\ngit clone https://github.com/celenium-io/celestia-indexer.git\ncd celestia-indexer\n```\n\nCopy the example env file and fill in the required values:\n\n```sh\ncp .env.example .env\n$EDITOR .env\n```\n\n**Required environment variables:**\n\n| Variable | Description |\n|---|---|\n| `CELESTIA_NODE_URL` | URI to a [Celestia Consensus Node](https://docs.celestia.org/nodes/consensus-node) RPC endpoint |\n| `CELESTIA_NODE_API_URL` | URI to the Consensus Node REST API |\n| `CELESTIA_DAL_API_URL` | URI to a [Celestia Full Storage Node](https://docs.celestia.org/nodes/full-storage-node) |\n| `CELESTIA_NODE_AUTH_TOKEN` | Read-access auth token for the DAL node (`celestia full auth read`) |\n| `POSTGRES_USER` | PostgreSQL username |\n| `POSTGRES_PASSWORD` | PostgreSQL password |\n| `HYPERLANE_NODE_URL` | Hyperlane node URL for cross-chain message indexing |\n\nBuild and start all services:\n\n```sh\ndocker compose up -d\n```\n\nThis starts the indexer, public API, private API, TimescaleDB, and Valkey cache.\n\n## Services\n\n| Service | Image | Default port |\n|---|---|---|\n| `indexer` | `ghcr.io/celenium-io/celestia-indexer` | — |\n| `api` | `ghcr.io/celenium-io/celestia-indexer-api` | 9876 |\n| `private-api` | `ghcr.io/celenium-io/celestia-indexer-private-api` | 9877 |\n| `db` | `timescale/timescaledb-ha:pg15` | 5432 |\n| `cache` | `valkey/valkey:8` | 6379 |\n\n## Indexed Entities\n\n| Category | Entities |\n|---|---|\n| Blockchain | Block, BlockStats, BlockSignature, Transaction, Message, Event |\n| DA / Blobs | Namespace, NamespaceMessage, BlobLog |\n| Validators | Validator, ValidatorStats, Delegation, Redelegation, Undelegation, Jail, StakingLog |\n| Accounts | Address, Balance, Grant, Vesting, Forwarding |\n| Governance | Proposal, Vote, Signal |\n| IBC | IbcClient, IbcConnection, IbcChannel, IbcTransfer |\n| Hyperlane | HlMailbox, HlToken, HlTransfer, HlIgp, HlGasPayment |\n| Rollups | Rollup, RollupProvider |\n| Infrastructure | Constant, State, DenomMetadata, Upgrade |\n| Off-chain | Celestial (identity metadata) |\n\n## Development\n\nFirst-time setup:\n\n```sh\nmake init\n```\n\nRun individual services locally:\n\n```sh\nmake indexer      # go run ./cmd/indexer -c ./configs/dipdup.yml\nmake api          # go run ./cmd/api -c ./configs/dipdup.yml\nmake private_api  # go run ./cmd/private_api -c ./configs/dipdup.yml\nmake celestials   # go run ./cmd/celestials -c ./configs/dipdup.yml\n```\n\nOther useful commands:\n\n```sh\nmake build        # build all binaries to /bin\nmake test         # run all tests (requires Docker for DB integration tests)\nmake generate     # regenerate mocks and enums\nmake api-docs     # regenerate Swagger docs (swag init)\nmake lint         # run golangci-lint\nmake cover        # generate HTML coverage report\nmake compose      # docker compose up --build\n```\n\nRun a specific test:\n\n```sh\ngo test ./internal/storage/postgres/... -run TestBlockByHeight -v\ngo test ./cmd/api/handler/... -timeout 30s\n```\n\n## Configuration\n\nThe YAML config at `configs/dipdup.yml` uses `${ENV_VAR:-default}` substitution. All settings can be overridden via environment variables or the `.env` file. Key options beyond the required variables above:\n\n| Variable | Default | Description |\n|---|---|---|\n| `INDEXER_START_LEVEL` | `1` | First block to index |\n| `INDEXER_BLOCK_PERIOD` | `15` | Polling interval (seconds) |\n| `NETWORK` | — | Network identifier |\n| `API_RATE_LIMIT` | `20` | Requests per second per IP |\n| `API_WEBSOCKET_ENABLED` | `true` | Enable WebSocket notifications |\n| `CACHE_URL` | — | Valkey/Redis connection URL |\n| `CACHE_TTL` | — | Cache TTL (seconds) |\n| `SENTRY_DSN` | — | Optional Sentry DSN for error tracking |\n\n## Features\n\n- [x] Full block, transaction, and message indexing\n- [x] Blob and namespace tracking\n- [x] Validator, staking, and governance indexing\n- [x] IBC transfer and channel indexing\n- [x] Hyperlane cross-chain message indexing\n- [x] Chain rollback handling\n- [x] TimescaleDB hypertables for time-series performance\n- [x] WebSocket real-time notifications\n- [x] Public REST + WebSocket API with Swagger docs\n- [x] Private admin API\n- [x] Valkey/Redis response cache\n- [x] Deterministic IDs (no autoincrement sequences for tx/messages)\n\n## License\n\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fcelenium-io%2Fcelestia-indexer.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fcelenium-io%2Fcelestia-indexer?ref=badge_large)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcelenium-io%2Fcelestia-indexer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcelenium-io%2Fcelestia-indexer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcelenium-io%2Fcelestia-indexer/lists"}