Native for LLM agents, desktop and mobile apps out of the box, and a native binary measured against Go — on a language with generics, traits, pattern matching and multicore actors: errors as values, no null, no exceptions.
enum Tree { Leaf, Node(Tree, int, Tree) } fn sum(t: Tree) -> int { match (t) { Tree.Leaf => 0, Tree.Node(l, v, r) => sum(l) + v + sum(r), } } fn main() { let t = Tree.Node(Tree.Node(Tree.Leaf, 1, Tree.Leaf), 2, Tree.Leaf); print(sum(t)); // 3 }
A single binary, no dependencies: the installer detects your platform
(macOS, Linux and Windows, arm64 and x86_64), downloads the release and leaves
ray in ~/.local/bin — or in
%LOCALAPPDATA%\Programs\raylang\bin from PowerShell, already on your PATH.
macOS and Linux:
curl -sSfL https://raylang.dev/install.sh | shWindows, from PowerShell:
irm https://raylang.dev/install.ps1 | iexCheck it with ray version — one binary, everything included: compiler, VM, LSP, formatter and package manager.
ray new hola && cd hola && ray runray new leaves a ray.toml + src/main.ray; ray dev recompiles and restarts on save.
Then, the handbook: install, the language in fifteen minutes, concurrency and the tools, and from there one guide per kind of app.
raylang ships the two pieces a model needs to write correct raylang — and verify it on its own.
CLAUDE.md.ray mcp — an MCP server embedded in the binary:
the write → check → fix loop with the compiler's exact diagnostics
and the model's code sandboxed (fuel + heap + deadline, in a subprocess).llms.txt itself is served as a resource
(raylang://llms.txt) — the client injects it before the first
line. Full guide in
docs/mcp.en.md.$ claude mcp add raylang -- ray mcp
# tools
ray_check exact, positioned diagnostics
ray_run stdout + exit, sandboxed
ray_test the @test runner
ray_fmt canonical source
ray_doc stdlib signature + doc
# resource
raylang://llms.txt
The same raylang source runs as a desktop app on macOS, Linux and
Windows and as a mobile app on iPhone and Android — no external framework, no second
language. The interface is HTML in the system webview (std/ui), the backend
is your raylang web server, and the JS ↔ raylang bridge, native menus, file dialogs,
audio and the assets baked into the binary ship with the toolchain.
ray bundle produces the .app with icon, application menu, About panel and ad-hoc signature (the distribution one is yours to add)..desktop launcher; window and webview on GTK/WebKitGTK..exe (no console on double-click, embedded icon and version) with its shortcut; window and webview on Win32/WebView2, audio through WASAPI.ray bundle --ios generates the Xcode project with the program compiled to a static library; persistent signing for device and simulator.ray bundle --android generates the Gradle project with the native .so, launcher icon and release signing; audio through AAudio.Step-by-step guide in the handbook: mobile app for iOS and Android, from ray new to the simulator, the emulator and hot reload on the phone.
Official extensions on top of the raylang LSP: live diagnostics, completion, hover, go to definition, rename and formatting.
Package Control: Install Package → raylang
Zedunder review in the Zed gallerytree-sitter grammar + LSP; until approved, install it as a dev extension
Neovim · Helixpoint at ray lsp directly; snippets in editors/README.md
The Zed extension is submitted to the official gallery and awaiting approval: zed-industries/extensions #7361.
The full VM compiled to WebAssembly — the playground runs raylang in your browser, with no server and nothing to install.
Scope: it runs the whole language and the pure stdlib
through import std/* (math, json, markdown, iterators, actors/channels…).
The stdlib with I/O (fs, process, networking) compiles but
returns Err at run time — the browser has no disk and no sockets. Registry
packages (net, web, rpc, db…) and
multi-file modules do not resolve here: for those, install ray and use
ray add.
The native binary goes head to head with Go and rustc -O, and
beats node in 9 of the 10 compute programs of the polyglot bench. The bars come from the
repository's real table — re-measuring the bench regenerates this chart. The VM column is
measured with a PGO build of the toolchain (make pgo); the published release is
a plain build and runs 10–26% slower on pure compute in the VM — the native binary is
unaffected. How to build it.
Resultados (22 sep 2026 — M3 Pro, mediana de 10 corridas, 5 de calentamiento) · el mismo output en todas las variantes, verificado por checksum · barra más larga = más lento que el binario nativo de raylang (1×), truncada en 4×.
A bytecode VM to develop, a native binary to deploy and an interpreter as the oracle — byte-for-byte identical output, verified in CI.
ray build --native transpiles to Rust and compiles an executable:
2.6–4× the VM on service workloads and 14–28× on pure compute.
An isolated heap per fiber + ownership transfer on send:
real multicore without data races, on an M:N scheduler.
No null and no exceptions: Result/Option
+ ?, exhaustive pattern matching and generics with traits.
ray brings projects, packages, tests, formatter, docs, REPL,
an LSP for your editor and an MCP server for LLM agents.
HTTP/1.1 and 2, JSON, TOML, DNS, WebSocket and the database clients are written in raylang; every Cargo crate enters justified and measured.
raylang lexes, parses, checks and runs raylang: the self-hosted compiler runs itself on top of the self-hosted engines.
A production HTTP server with an Express-style framework, SSR with compiled,
typed templates (.ray.html), WebSocket and streaming.
ray.toml manifest + lockfile with SHA-256 hashes; the registry
accepts Ed25519-signed versions and claimed names.
An LLM coding agent, a desktop app, servers and tools — real dogfood, published in the organization.
The libraries too: the networking and formats stack
(net — HTTP/1.1 and 2, DNS, WebSocket, TLS —, web,
rpc, db — Postgres, Redis, SQLite) lives in
packages/,
written in raylang (TLS and SQLite come from the runtime's rustls/rusqlite), and community packages are published in the
registry with hashes and signatures.
One source, three engines: the same program runs the same — byte for byte — in development, in deployment and under the validation oracle.