Resilient systems. Mobile. Native.

Build distributed APIs, mobile apps and native tools using a single language. Lx combines the BEAM actor model, native compilation and advanced static validation to create reliable software without sacrificing productivity.

Web & APIs Mobile apps Tools & CLIs
The purpose

What you can build

A language isn't the destination — it's what it lets you ship.

web
Won't go down

Web & APIs

Sites, APIs and backends that stay up under heavy traffic — and recover on their own when something breaks. Deploy updates without downtime.

mobile
Native, in your pocket

Mobile apps

Fast, modern-looking apps straight from your code. Not a wrapped website or a slow version: a real app.

native
Truly fast

Tools & CLIs

Command-line tools and programs that open in a blink and use little memory — from the same code as your web and app.

Web
robust apps & APIs
Mobile
native apps in your pocket
Native
high-performance CLIs
1
language for everything

Capabilities you inherit

Robustness, native mobile and performance — without reinventing the wheel.

shield

Won't go down (web)

On the server target, your service recovers from errors on its own and stays up — resilience that comes built-in.

mobile

Real mobile

On the mobile target, native, fluid and beautiful apps — not a sluggish website shell.

bolt

Fast (native)

On the native target, programs that start instantly and use few resources, where every millisecond counts.

web

Complete web

Routes, pages, APIs and real-time updates. Everything to ship a product.

safe

Fewer bugs

The language catches many errors before you run it — on any target. More confidence to ship.

1

One language

You write in a single language and compile to web, mobile and native. Each platform with its own strengths.

Lx in action

Expressive syntax, no boilerplate.

Hello, world

def main do
  io:puts("Hello, Lx!")
end

Pattern matching

case result do
  {:ok, value} -> value
  {:error, reason} -> reason
end

Types & structs

struct User {
  name :: string
  age  :: integer
}

user = %User{name: "Ada", age: 36}

Pipe operator

[1, 2, 3, 4]
  |> enum:map(fn(x) -> x * 2 end)
  |> enum:sum()

Ready to build?

Web, mobile or native — start in minutes.

Read the guide