Estáticamente tipado Orientado a expresiones Auto-alojado

Escribe como script, despliega como binario.

Nativo para agentes LLM, apps de escritorio y móvil de fábrica, y un binario nativo medido contra Go — sobre un lenguaje con genéricos, traits, pattern matching y actores multicore: errores como valores, sin null y sin excepciones.

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
}

Instálalo en un minuto

Un solo binario, sin dependencias: el instalador detecta tu plataforma (macOS, Linux y Windows, arm64 y x86_64), descarga la release y deja ray en ~/.local/bin — o en %LOCALAPPDATA%\Programs\raylang\bin desde PowerShell, ya en tu PATH.

1

Instala la toolchain

macOS y Linux:

$curl -sSfL https://raylang.dev/install.sh | sh

Windows, desde PowerShell:

>irm https://raylang.dev/install.ps1 | iex

Verifícalo con ray version — un binario, todo incluido: compilador, VM, LSP, formateador y gestor de paquetes.

2

Crea y corre tu primer proyecto

$ray new hola && cd hola && ray run

ray new deja un ray.toml + src/main.ray; ray dev recompila y reinicia al guardar.

Y después, el handbook: instalar, el lenguaje en quince minutos, la concurrencia y las herramientas, y desde ahí una guía por tipo de app.

Nativo para agentes LLM

raylang trae de serie las dos piezas para que un modelo escriba raylang correcto — y lo verifique solo.

  • llms.txt — el contexto destilado: el delta contra Rust, las formas canónicas y los mensajes de error exactos, listo para tu prompt o CLAUDE.md.
  • ray mcp — un servidor MCP embebido en el binario: el bucle escribir → verificar → corregir con los diagnósticos exactos del compilador y el código del modelo confinado (fuel + heap + plazo, en subproceso).
  • El propio llms.txt se sirve como resource (raylang://llms.txt) — el cliente lo inyecta antes de la primera línea. Guía completa en docs/mcp.md.
  • Y para escribir agentes: el handbook construye uno en raylang que habla con Claude y usa herramientas por MCP — LLM y MCP.
mcp
$ claude mcp add raylang -- ray mcp

# tools
ray_check   diagnósticos exactos, posicionados
ray_run     stdout + exit, confinado
ray_test    el runner @test
ray_fmt     fuente canónico
ray_doc     firma + doc de la stdlib

# resource
raylang://llms.txt

Desktop y móvil, de fábrica

El mismo fuente raylang corre como app de escritorio en macOS, Linux y Windows y como app móvil en iPhone y Android — sin framework externo ni segundo lenguaje. La interfaz es HTML en el webview del sistema (std/ui), el backend es tu servidor web en raylang, y el puente JS ↔ raylang, los menús nativos, los diálogos de archivo, el audio y los assets horneados en el binario vienen en la toolchain.

macOSray bundle produce la .app con icono, menú de aplicación, panel About y firma ad-hoc (la de distribución la pones tú).
Linuxel mismo comando deja el binario con su lanzador .desktop; ventana y webview sobre GTK/WebKitGTK.
Windowsel mismo comando deja el .exe de escritorio (sin consola al doble clic, icono y versión embebidos) con su acceso directo; ventana y webview sobre Win32/WebView2, audio por WASAPI.
iOSray bundle --ios genera el proyecto Xcode con el programa compilado a librería estática; firma persistente para dispositivo y simulador.
Androidray bundle --android genera el proyecto Gradle con el .so nativo, icono launcher y firma de release; audio por AAudio.
ray bundle · .app / .desktop / .exe ray bundle --ios · proyecto Xcode ray bundle --android · proyecto Gradle

Guía paso a paso en el handbook: app móvil para iOS y Android, de ray new al simulador, al emulador y a la recarga en caliente en el teléfono.

En tu editor

Extensiones oficiales sobre el LSP de raylang: diagnósticos en vivo, autocompletado, hover, ir a definición, renombrar y formateo.

La extensión de Zed está enviada a la galería oficial y en proceso de aprobación: zed-industries/extensions #7361.

Pruébalo en el navegador

La VM completa compilada a WebAssembly — el playground corre raylang en tu navegador, sin servidor y sin instalar nada.

Alcance: corre el lenguaje completo y la stdlib pura con import std/* (math, json, markdown, iteradores, actores/canales…). La stdlib con E/S (fs, process, red) compila pero devuelve Err al ejecutar — el navegador no tiene disco ni sockets. Los paquetes del registro (net, web, rpc, db…) y los módulos multi-archivo no resuelven aquí: para eso, instala ray y usa ray add.

Abrir el playground a pantalla completa →

Medido, no prometido

El binario nativo se pelea de tú a tú con Go y rustc -O, y le gana a node en 9 de los 10 programas de cómputo del banco poliglota. Las barras salen de la tabla real del repositorio — re-medir el banco regenera esta gráfica. La columna de la VM se mide con un build PGO de la toolchain (make pgo); la release publicada es un build plano y en la VM rinde un 10–26 % menos en cómputo puro — el binario nativo no se ve afectado. Cómo compilarlo.

loopsum 29.9 ms

raylang1.00×
rustc -O1.00×
go1.00×
node9.01×

fibrec 19.5 ms

raylang1.00×
rustc -O0.81×
go0.89×
node2.10×

wordcount 40.3 ms

raylang1.00×
rustc -O1.55×
go1.18×
node3.22×

jsonserialize 32.1 ms

raylang1.00×
rustc -O0.88×
go0.90×
node2.35×

jsondeserialize 79.2 ms

raylang1.00×
rustc -O0.63×
go0.59×
node1.22×

logparse 23.9 ms

raylang1.00×
rustc -O1.36×
go1.00×
node2.17×

treealloc 19.6 ms

raylang1.00×
rustc -O1.47×
go1.56×
node1.12×

sortnums 20.6 ms

raylang1.00×
rustc -O1.18×
go3.85×
node22.68×

matrixmul 6.5 ms

raylang1.00×
rustc -O0.99×
go1.33×
node4.05×

regex 68.4 ms

raylang1.00×
rustc -O0.40×
go1.19×
node0.97×

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×.

Ver los benchmarks completos

≡

Tres motores que coinciden

Una VM de bytecode para desarrollar, un binario nativo para desplegar y un intérprete como oráculo — salida byte a byte idéntica, verificada en CI.

»

Binario nativo

ray build --native transpila a Rust y compila un ejecutable: 2,6–4× la VM en cargas de servicio y 14–28× en cómputo puro.

⇄

Concurrencia por actores

Heap aislado por fibra + transferencia de propiedad en send: multicore real sin data races, con scheduler M:N.

?

Errores como valores

Sin null y sin excepciones: Result/Option + ?, pattern matching exhaustivo y genéricos con traits.

⌘

Tooling completo

ray trae proyecto, paquetes, tests, formateador, docs, REPL, LSP para el editor y un servidor MCP para agentes LLM.

◇

Dependencias deliberadas

HTTP/1.1 y 2, JSON, TOML, DNS, WebSocket o los clientes de BD están escritos en raylang; cada crate de Cargo entra justificado y medido.

∞

Auto-alojado

raylang lexea, parsea, chequea y ejecuta raylang: el compilador auto-alojado se ejecuta a sí mismo sobre los motores auto-alojados.

/

Framework web

Servidor HTTP de producción con framework estilo Express, SSR con templates compilados y tipados (.ray.html), WebSocket y streaming.

✓

Paquetes verificables

Manifiesto ray.toml + lockfile con hashes SHA-256; el registro acepta versiones firmadas con Ed25519 y nombres reclamados.

Hecho con raylang

Un agente de código LLM, una app de escritorio, servidores y herramientas — dogfood real, publicado en la organización.

Las librerías también: la pila de red y formatos (net — HTTP/1.1 y 2, DNS, WebSocket, TLS —, web, rpc, db — Postgres, Redis, SQLite) vive en packages/, escrita en raylang (TLS y SQLite vienen del runtime, rustls/rusqlite), y los paquetes de la comunidad se publican en el registro con hashes y firmas.

Manta, la mascota de raylang

raylang fluye sin fricción

Un fuente, tres motores: el mismo programa corre igual — byte a byte — en desarrollo, en despliegue y bajo el oráculo de validación.

ray run · VM de bytecode ray build --native · binario de máquina --interp · el oráculo