Estáticamente tipado Orientado a expresiones Auto-alojado

Un lenguaje para producción real.

Genéricos, traits, pattern matching y concurrencia multicore por actores — con errores como valores, sin null y sin excepciones. Escrito en Rust, con una superficie de dependencias mínima y deliberada.

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 y Linux, arm64 y x86_64), descarga la release firmada y deja ray en ~/.local/bin. En Windows, descarga el binario de la última release.

1

Instala la toolchain

$curl -sSfL https://raw.githubusercontent.com/ray-language/raylang/main/install.sh | sh

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.

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: 3–4× la VM en cargas de servicio y 28–57× 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.

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.

loopsum 27.3 ms

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

fibrec 17.7 ms

raylang1.00×
rustc -O0.79×
go0.91×
node2.21×

wordcount 38.4 ms

raylang1.00×
rustc -O1.60×
go1.16×
node3.28×

jsonserialize 28.6 ms

raylang1.00×
rustc -O0.92×
go0.96×
node2.50×

jsondeserialize 74.4 ms

raylang1.00×
rustc -O0.66×
go0.60×
node2.11×

logparse 21.5 ms

raylang1.00×
rustc -O1.49×
go1.05×
node2.38×

treealloc 18.1 ms

raylang1.00×
rustc -O1.52×
go1.59×
node1.13×

sortnums 18.0 ms

raylang1.00×
rustc -O1.12×
go3.51×
node19.99×

matrixmul 5.6 ms

raylang1.00×
rustc -O1.01×
go1.35×
node4.12×

regex 65.2 ms

raylang1.00×
rustc -O0.40×
go1.17×
node0.95×

Resultados (29 jul 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

En tu editor

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

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

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 →

Hecho con raylang

Servidores, herramientas y hasta juegos de terminal — 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 puro, 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