Web analytics · API analytics · Bot defense
Proof of usage for the Stellar ecosystem.
Privacy-first web and API analytics for Stellar projects. No cookies, no consent banner, and bot traffic is flagged, not counted.
Hosted in the EU.
Bot and inflation defense
Four checks before a visit counts. The rest are flagged, not counted.
Anyone can script fake page views. Lumenstat checks every event four ways and keeps the failures, labelled, where you can see them.
01
Real browser
Origin and Fetch Metadata checks confirm the event came from a browser on your site.
origin · fetch metadata
02
Proof of JavaScript
The tracker solves a small proof-of-work on the page. Scripts that skip it are flagged.
proof-of-work in l.js
03
Data-center ranges
About 8,900 IP ranges from AWS, Google Cloud, Oracle, DigitalOcean, Akamai, Hetzner, OVH, Contabo, Vultr and others.
~8,900 ranges
04
Per-network limit
One network can only add so many visitors.
per-network cap
Flagged, not counted
Failed events are stored with the reason and kept out of your totals. Your project sees them on its Website page, and program operators see them too.
- No browser origin
- Not a browser request
- Sent from another domain
- No proof of JavaScript
- Invalid proof of JavaScript
- Data-center IP
- Too many visitors from one network
Privacy
No cookies. No consent banner.
Lumenstat runs Umami v3.5.0 with four small, documented patches. Two keep less data. Two keep the counts honest.
- Country, not city
- Location stops at the country. IP addresses are cut before the location lookup.
- /24 or /48
- A new salt every day
- Visitor hashes use a random daily salt. The salt is deleted after 48 hours.
- deleted after 48h
- Clean URLs
- Query strings are stripped. Campaign tags stay.
- except utm_*
- Nothing in the browser
- The tracker sets no cookies, so there is no banner to show.
- 0 cookies
This page runs the same tracker. Open your browser's storage and check.
API analytics
API analytics without traces or logs. Every route, measured.
Add a second OpenTelemetry exporter with your project's ingest key. The collector turns spans into per-route counts and latency, then drops traces and logs.
- Stellar-aware routes
- G, C and M addresses, ids and hashes become placeholders, so one route is one row.
- {account} {contract} {hash}
- Latency that adds up
- p50, p95 and p99 for every route.
- p50 · p95 · p99
- Keys per project
- Each project issues its own ingest key. Keys are hashed at rest.
- hashed at rest
Supply chain
Check the script before you trust it. The bytes are pinned.
Every snippet pins the tracker by version and by hash. If the file ever changes, the browser refuses to run it.
$ curl -s https://t.lumenstat.com/v/1.0.0/l.js | openssl dgst -sha384 -binary | openssl base64 -A
cBzCCJcHCWSGbuy/f+zavGm/HjUWv77eni4DyLfq+FfKigpin1mul1ekLXILze/3Match
Tracker 1.0.0 · 10,447 bytes · released 2026-11-13
Versioned, immutable URLs.
/v/1.0.0/l.js
Subresource Integrity in every snippet.
sha384
A reproducible build, checked byte for byte in CI and on every deploy.
10,447 bytes
Published to npm with provenance.
@lumenstat/tracker
<script defer src="https://t.lumenstat.com/v/1.0.0/l.js"
integrity="sha384-cBzCCJcHCWSGbuy/f+zavGm/HjUWv77eni4DyLfq+FfKigpin1mul1ekLXILze/3"
crossorigin="anonymous" data-website-id="YOUR-WEBSITE-ID"></script>curl -s https://t.lumenstat.com/v/1.0.0/l.js | openssl dgst -sha384 -binary | openssl base64 -AGet started
Enroll with a Stellar link.
Three steps. The third is optional.
Sign up
Add your domain and one Stellar link: your SCF project page, a stellar.expert page, or a Stellar account. Accounts are checked on Horizon mainnet.
Add the snippet
Paste the pinned snippet from your Setup page into your site.
Measure your API
Optional. Add an OpenTelemetry exporter with your ingest key.
Programs can run sign-up open or with approval.
For programs
One pipeline. The same rules for every project.
Every project is measured by the same pipeline with the same bot rules, so operators can compare them on equal terms.
Projects see
- Overview
- Website
- API
- Setup
Operators see
- All projects
- Compare
- Traffic quality
- Enrollment
- All projects
- Compare
- Traffic quality
- Enrollment
The dashboard is built with the Stellar Design System.
How it runs
Small and easy to reason about.
- One Docker host in the EU, with no published ports.
- eu · docker
- Reached through Cloudflare Tunnel.
- cloudflare tunnel
- DNSSEC on the domain.
- dnssec
- The whole setup is described as code, with OpenTofu and Ansible.
- opentofu · ansible
FAQ
Frequently asked questions
What is Lumenstat?
Lumenstat is privacy-first web and API analytics for Stellar ecosystem projects. It counts website visits and API requests, and it flags bot and inflated traffic instead of counting it.
Does Lumenstat use cookies?
No. The tracker sets no cookies, and there is no consent banner.
What does Lumenstat keep about visitors?
Location stops at the country, and IP addresses are cut to /24 or /48. Visitor hashes use a random daily salt that is deleted after 48 hours. Query strings are stripped, except utm_* tags.
How does Lumenstat stop fake traffic?
Every event passes four checks: real-browser origin and Fetch Metadata, proof of JavaScript, about 8,900 data-center IP ranges, and a per-network visitor limit. Events that fail are stored as flagged, not counted.
Can I see what was flagged?
Yes. Each flagged event is stored with its reason, such as "No proof of JavaScript" or "Data-center IP". Your project sees them on its Website page, and program operators see them too.
How does API analytics work?
You add a second OpenTelemetry exporter with your project's ingest key. The collector turns spans into per-route counts with p50, p95 and p99 latency, then drops traces and logs. Stellar addresses, ids and hashes in paths become placeholders.
How do I know the tracker has not changed?
Each version has its own URL that never changes, and the snippet pins it with a sha384 integrity hash. The build is reproducible byte for byte and is checked in CI and on every deploy. You can hash the file yourself with one command.
Who can enroll?
Projects in the Stellar ecosystem. You sign up with your domain and one Stellar link: your SCF project page, a stellar.expert page, or a Stellar account, which is checked on Horizon mainnet.
Where does Lumenstat run?
On one Docker host in the EU, with no published ports, reached through Cloudflare Tunnel. The domain uses DNSSEC, and the whole setup is described as code with OpenTofu and Ansible.
Is Lumenstat affiliated with the Stellar Development Foundation?
No. Lumenstat is an independent project built by Boundless. It is not affiliated with, sponsored or endorsed by the Stellar Development Foundation.
Start measuring your Stellar project.
Enroll with your domain and one Stellar link.