{"id":13891303,"url":"https://github.com/eigerco/lumina","last_synced_at":"2026-01-16T12:00:22.214Z","repository":{"id":175884038,"uuid":"654642390","full_name":"eigerco/lumina","owner":"eigerco","description":"Wasm friendly Celestia light node implementation in Rust","archived":false,"fork":false,"pushed_at":"2026-01-14T09:18:45.000Z","size":3697,"stargazers_count":173,"open_issues_count":74,"forks_count":55,"subscribers_count":6,"default_branch":"main","last_synced_at":"2026-01-14T13:36:04.748Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/eigerco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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-06-16T15:27:02.000Z","updated_at":"2026-01-08T13:53:00.000Z","dependencies_parsed_at":"2024-02-06T13:28:40.073Z","dependency_job_id":"d87eef04-f77e-4065-8529-72bf5690526c","html_url":"https://github.com/eigerco/lumina","commit_stats":null,"previous_names":["eigerco/celestia-node-rs","eigerco/lumina"],"tags_count":196,"template":false,"template_full_name":null,"purl":"pkg:github/eigerco/lumina","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigerco%2Flumina","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigerco%2Flumina/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigerco%2Flumina/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigerco%2Flumina/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/eigerco","download_url":"https://codeload.github.com/eigerco/lumina/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/eigerco%2Flumina/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28478396,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2024-08-06T16:01:30.664Z","updated_at":"2026-01-16T12:00:22.153Z","avatar_url":"https://github.com/eigerco.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Lumina\n\n\u003ca href=\"https://github.com/eigerco/lumina/actions/workflows/ci.yml?query=branch%3Amain\"\u003e\u003cimg src=\"https://github.com/eigerco/lumina/actions/workflows/ci.yml/badge.svg?branch=main\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://lumina.rs\"\u003e\u003cimg src=\"https://img.shields.io/website?url=https%3A%2F%2Flumina.rs\u0026label=lumina.rs\" alt=\"lumina.rs\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/lumina-cli\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/lumina-cli?label=lumina-cli\" alt=\"crates.io lumina-cli\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/lumina-node\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/lumina-node?label=lumina-node\" alt=\"crates.io lumina-node\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/lumina-node-uniffi\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/lumina-node-uniffi?label=lumina-node-uniffi\" alt=\"crates.io lumina-node-uniffi\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/lumina-node-wasm\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/lumina-node-wasm?label=lumina-node-wasm\" alt=\"crates.io lumina-node-wasm\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/celestia-types\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/celestia-types?label=celestia-types\" alt=\"crates.io celestia-types\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/celestia-proto\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/celestia-proto?label=celestia-proto\" alt=\"crates.io celestia-proto\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/celestia-rpc\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/celestia-rpc?label=celestia-rpc\" alt=\"crates.io celestia-rpc\"\u003e\u003c/a\u003e\n\u003ca href=\"https://crates.io/crates/celestia-grpc\"\u003e\u003cimg src=\"https://img.shields.io/crates/v/celestia-grpc?label=celestia-grpc\" alt=\"crates.io celestia-grpc\"\u003e\u003c/a\u003e\n\n\u003c/div\u003e\n\n\nRust implementation of Celestia's [data availability node](https://github.com/celestiaorg/celestia-node) able to run natively and in browser-based environments.\n\nRun Lumina now at [lumina.rs](https://lumina.rs/) and directly verify Celestia.\n\nSupported features:\n- Backward and forward synchronization of block headers within sampling window\n- Header exchange (`header-ex`) client and server\n- Listening for, verifying and redistributing extended headers on gossip protocol (`header-sub`)\n- Listening for, verifying and redistributing fraud proofs on gossip protocol (`fraud-sub`)\n- Backward and forward Data Availability Sampling\n- Native and browser persistent storage\n- Streaming events happening on the node\n- Native, Wasm and UniFFI libraries, embed the node anywhere\n- Integration tests with Go implementation\n\n## Installing the node\n\n### Installing with cargo\n\nInstall the node. Note that currently to serve lumina to run it from the browser, you need to compile `lumina-cli` manually.\n```bash\ncargo install lumina-cli --locked\n```\nRun the node\n```bash\nlumina node --network mocha\n```\n\n### Building from source\n\nInstall common dependencies\n\n```bash\n# install dependencies\nsudo apt-get install -y build-essential curl git\n\n# install rust\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\n# open a new terminal or run\nsource \"$HOME/.cargo/env\"\n\n# clone the repository\ngit clone https://github.com/eigerco/lumina\ncd lumina\n\n# install lumina\ncargo install --path cli\n```\n\n### Building wasm-node\n\nTo build `lumina-cli` with support for serving wasm-node to browsers, currently\nyou need to compile wasm node manually. Follow these additional steps:\n\n```bash\n# install npm and wasm-pack\nsudo apt-get install -y npm\ncargo install wasm-pack\n\n# compile lumina to wasm\nwasm-pack build node-wasm\n\n# build the local webpage\ncd cli/js\nnpm i \u0026\u0026 npm run build\ncd -\n\n# install lumina-cli\ncargo install --path cli --features browser-node\n```\n\n\u003e [!WARNING]\n\u003e Since `getrandom v0.3` it is required to configure the randomness source via `RUSTFLAGS`.\n\u003e If you depend on any of the crates and build for `wasm32-unknown-unknown`, it may be required to set\n\u003e `'--cfg getrandom_backend=\"wasm_js\"'` either through an environment variable or through `.cargo/config.toml`.\n\u003e [See `getrandom` docs for more info](https://docs.rs/getrandom/0.3.3/getrandom/#webassembly-support).\n\n## Running the node\n\n### Running the node natively\n\n```bash\n# run lumina node\nlumina node --network mocha\n\n# check out help for more configuration options\nlumina node --help\n```\n\n### Serving node-wasm\n\n```bash\n# serve lumina node on default localhost:9876\nlumina browser\n\n# check out help from more configuration options\nlumina browser --help\n```\n\n#### WebTransport and Secure Contexts\n\nFor security reasons, browsers only allow WebTransport to be used in [Secure Context](https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts). When running Lumina in a browser make sure to access it either locally or over HTTPS.\n\n## Running Go Celestia node for integration\n\nFollow [this guide](https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#authenticating-with-a-personal-access-token-classic)\nto authorize yourself in GitHub's container registry.\n\nStarting a Celestia network with single validator and some DA nodes\n```bash\ndocker compose -f ci/docker-compose.yml up --build --force-recreate -d\n# and to stop it\ndocker compose -f ci/docker-compose.yml down\n```\n\u003e **Note:**\n\u003e You can run more DA nodes by uncommenting/copying the node service definition in `ci/docker-compose.yml`.\n\nTo get a JWT token for a topped up account (coins will be transferred in block 2):\n```bash\nexport CELESTIA_NODE_AUTH_TOKEN=$(docker compose -f ci/docker-compose.yml exec node-1 celestia bridge auth admin --p2p.network private)\n```\n\nAccessing json RPC api with Go `celestia` cli:\n```bash\ndocker compose -f ci/docker-compose.yml exec node-1 \\\n    celestia blob submit 0x0c204d39600fddd3 '\"Hello world\"' --token \"$CELESTIA_NODE_AUTH_TOKEN\"\n```\n\nExtracting blocks for test cases:\n```bash\ndocker compose -f ci/docker-compose.yml exec node-1 \\\n    celestia header get-by-height 27 --token \"$CELESTIA_NODE_AUTH_TOKEN\" | jq .result\n```\n\n## Running integration tests with Celestia node\n\nMake sure you have the Celestia network running inside docker compose from the section above.\n\nGenerate authentication tokens\n```bash\n./tools/gen_auth_tokens.sh\n```\n\nRun tests\n```bash\ncargo test\n```\n\n## Frontend\n\nCheck out the frontend at [eigerco/lumina-front](https://github.com/eigerco/lumina-front)\n\n## About Eiger\n\nWe are engineers. We contribute to various ecosystems by building low level implementations and core components. We built Lumina because we believe in the modular thesis. We wanted to make the Celestia light node available and easy to run for as many users so that everyone can perform sampling to ensure data availability.\n\nContact us at hello@eiger.co\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigerco%2Flumina","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Feigerco%2Flumina","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Feigerco%2Flumina/lists"}