Lumen — time-series store for edge devices
Lumen ingests metrics from constrained devices and keeps them queryable for 13 months. This documentation site is ordinary static HTML. The assistant in the corner is not: it runs a language model in this tab, on this GPU, with no inference server anywhere.
Quickstart
Install the SDK and point it at a project. There is no server to deploy.
npm i @lumen/sdk
lumen init --project my-project
lumen push --config lumen.config.ts
lumen init writes a project manifest, generates a write key scoped to that project,
and creates the ingest endpoint. Keys are shown once and stored in
~/.config/lumen/credentials.json.
Write API
Send one JSON object per measurement. Batches are newline-delimited JSON, capped at 1000 records.
curl https://ingest.lumen.dev/v2/write \
-H "Authorization: Bearer $LUMEN_KEY" \
-H "Content-Type: application/x-ndjson" \
--data-binary @metrics.ndjson
A 200 means the batch was durably queued, not that every point parsed. Per-record
rejections arrive in the /v2/ingest-report response and in the project log.
Rate limits
Limits are per project, per minute, and burst is limit × 1.5. Exceeding either returns
429 with a Retry-After header. Free projects are capped at 1,000 writes
and 30 days of retention; paid projects raise both on request.
Billing
Usage is billed per million points ingested, monthly, in arrears. There is no egress charge and no charge for queries. Invoices are issued on the first of the month and cover the previous calendar month. Deleting a project removes its points immediately; the invoice is not adjusted.
Troubleshooting
Writes return 202 but no data appears. Query the same window with
?consistency=strong; the default is eventual and can lag a few seconds.
Device clocks drift. Lumen rejects points more than 24 hours in the past. Send
X-Lumen-Offset-Ms to correct for a known device offset.