A globe that draws a beam for every event, with a terminal overlay reading out throughput, SDK families and regions.
npm install
npm run devhttp://localhost:5190. That is everything — it runs on synthetic data.
In a second terminal:
npm run backend # Docker, nothing else to install
npm run backend:native # or natively, needs Go 1.25Reload the page. It finds the backend and switches over on its own.
auto in development: synthetic until a backend answers /healthz, then live.
It does not switch back if the stream drops.
Force one, dev only:
?source=synthetic ?source=real ?source=auto
or VITE_EVENT_SOURCE=synthetic|real|auto before npm run dev.
A production build is hard-wired to the live feed — no override, and the synthetic generator is not in the bundle.
Serves /stream (SSE), /healthz and /stats on :7010. Vite proxies those
three paths.
npm run backend:native is go run main.go, so it takes any flag:
| flag | default | |
|---|---|---|
-host |
127.0.0.1 |
listen address |
-http-port |
7000 |
HTTP port (npm scripts publish it on 7010) |
-udp-port |
5556 |
UDP port |
-test |
off | generate test events internally |
-sample-rate |
1.0 |
fraction of datagrams eligible to forward |
-max-forward-rate |
50 |
ceiling on events/sec sent to clients |
Both npm scripts pass -test. Port 7010 rather than 7000 because macOS AirPlay
squats on 7000; point the frontend elsewhere with
ORBITAL_BACKEND=http://host:port npm run dev.
The Docker script publishes only the HTTP port. For a real producer sending UDP, publish that too:
docker run --rm -p 7010:7000 -p 5556:5556/udp \
-v "$PWD":/src -w /src golang:1.25-alpine \
sh -c 'go run main.go -host 0.0.0.0'C or ?dev |
style panel + diagnostics — localhost only |
F |
hide the readouts |
S |
mute |
?quality=low|medium|high |
force a rendering tier |
Every style control is documented in SETTINGS.md.
tools/ holds scripts that generate things checked into the repo — the globe's
land mask, the favicon set, and the social card. Nothing in there is served,
shipped or run at build time; it is run by hand when an input changes, which is
rarely. Vite copies only public/, main.go serves only static/, the runtime
image is FROM scratch, and tools/ is in .dockerignore, so it cannot reach
production by any of those routes.
See tools/README.md for what each script does and how to re-run it.
npm run build # -> dist/
npm run preview # serve it on :5190, still proxied to the backendThe container build does not work yet.
Dockerfileexpects the frontend underfrontend/with output at/static; it is at the repo root and Vite emitsdist/. The Go service servesstatic/, which nothing produces.
Push to master builds the image and deploys it — nothing here is run by hand.
- GitHub Actions (
.github/workflows/build.yml) builds the Dockerfile, runs a smoke test against the running container, and pushesghcr.io/getsentry/sentry-orbital:{nightly,<sha>}. - GoCD (
gocd/) waits for that check by name — Build and smoke test — and rolls the image out to theorbitalcontainer in each US region.
The image is one static Go binary plus the built frontend: npm run build
writes to static/, which is the directory main.go serves. That is why the
build output is static/ and not dist/ — point it elsewhere and the container
serves nothing.