Eelden Lang
Eelden Lang is a typed, pipe-based data language designed LSP-first. Every pipeline stage has a statically known row shape — so autocomplete, diagnostics, and hover are structural, not heroic.
There is no SQL compatibility.
Design invariants
- Data flows left-to-right through
|>. - Every stage boundary is independently typecheckable.
- Queries are scoped to the current tenant by default.
- Types are rigorous at edit time; storage stays dynamic (mismatches →
unknown). - Reads and writes share one pipeline model.
Tiny example
eel
users
|> filter status == .paid && balance >= 50.00$usd
|> select { name, email, balance }Runtime vs parsed-only
| Surface | Executes today |
|---|---|
| Mutations | insert / update / delete |
| Reads | filter / select / sort / take / skip / distinct |
| Join | join on a ref field (inner) |
| Aggregate | group … aggregate { count/sum/min/max/avg } |
| Time travel | asof → nearest named snapshot ≤ time |
| Transactions | atomic { … } — Transactions |
| Tenant ops | create / fork / snapshot / suspend / delete (via language, CLI, or HTTP) |
| Parsed only | Notes |
|---|---|
across tenants(pred) collection | Not executed yet |
See Status for engine-wide limits.
Grammar sketch
program := (schema | useschema | namedquery | atomicblk | tenantop | query)*
useschema := "use" "schema" TEXT
namedquery := "query" IDENT "(" [param ("," param)*] ")" "{" (query | atomicblk) "}"
query := source ("|>" stage)*
source := IDENT | "across" "tenants" "(" pred ")" IDENT
stage := filter | select | join | sort | take | skip
| group | distinct | insert | update | delete | asof
schema := "schema" IDENT annotation* "{" fielddecl* "}" [transform]Full stage reference: Pipelines. Schema annotations and transforms: Schemas and Migrations.
Where to go next
- Schemas — fields,
@index,@strict/@loose - Pipelines — every stage with examples
- Types & Money — scalars, enums, narrowing
- Named queries — app integration path
- Migrations — fingerprints,
@breaking, drift