The Elo Language

A simple, well-designed, portable, and safe data expression language

Elo compiles to JavaScript, Ruby, and SQL. Built for No-Code tools where non-technical users need to manipulate data easily and safely.

=

Simple by Design

A pure data language: everything is a value, no reference semantics, no new. One equality operator that just works. Designed to be safe for non-technical users.

3x

Truly Portable

One expression compiles to semantically equivalent JavaScript, Ruby, and SQL. Frontend, backend, and database all speak the same data language.

{}

Built for Real Data

First-class dates, times, and durations with intuitive syntax. Data schemas that validate and coerce input. Business logic that just works, everywhere.

What Makes Elo Different

Built for real-world data problems, Elo brings powerful features in a simple syntax

let
  signup = D2024-06-15
in
  TODAY > signup + P30D

First-Class Dates & Durations

Dates, times, and durations are native types with intuitive literal syntax. Add 30 days to a date? Just write + P30D. No parsing, no conversion, no library imports.

let Event = {
  name: String,
  date: Datetime,
  capacity: Int(c | c > 0)
} in _ |> Event

Data Schemas That Work

Turn untrusted input into safe, validated data. Elo coerces and checks everything so your code always runs on data you can trust.

_
  |> filter(i ~> i.price > 100)
  |> map(i ~> i.price * 1.21)
  |> reduce(0, fn(a, b ~> a + b))

Functional & Portable

Pipeline operators, lambdas, and a comprehensive standard library. Write once, compile to JavaScript, Ruby, and SQL—same semantics everywhere.

guard
  positive: _.age > 0,
  adult: _.age >= 18
in
  'Welcome!'

Guards for Safe Reasoning

Validate assumptions at runtime with labeled guards. Make your logic explicit, fail fast on invalid data, and reason confidently about what your code guarantees.

orders
  |> restrict(o ~> o.status == 'pending')
  |> extend({total: o ~> o.qty * o.price})
  |> project([.customer, .total])

Coming Soon: Relational Algebra

Inspired by Tutorial D and powered by Bmg, Elo will bring true relational algebra to your data pipelines. Query, join, and aggregate—all with portable semantics.

One Expression, Three Targets

Elo compiles to idiomatic code in each target language

Elo
2 ^ 10 > 1000 and TODAY >= SOY
JavaScript
Math.pow(2, 10) > 1000 && DateTime.now().startOf('day') >= DateTime.now().startOf('year')
Ruby
2 ** 10 > 1000 && Date.today >= Date.today.beginning_of_year
SQL
POWER(2, 10) > 1000 AND CURRENT_DATE >= DATE_TRUNC('year', CURRENT_DATE)

Ready to try Elo?

Jump into the playground and start writing temporal expressions that just work.

Open Playground
📚

New to Programming?

Elo is designed to be your friendly first step into coding. No scary jargon, no confusing concepts—just simple ideas explained clearly.

Learn about numbers, text, dates, decisions, and more—at your own pace.

Start Learning →

Brought to You by

B

Bernard Lambeau

Designer & Supervisor

25 years of language design at Enspirit

+
AI

Claude Code

Co-designer & Implementer

Every line of code, tests, and docs