El lenguaje que se hospeda a si mismo

Un lenguaje. Ocho productos. Cero dependencias.
Lenguaje compilado self-hosting con rendimiento nativo y un ecosistema web completo.

Empezar GitHub
Sintaxis

Como se ve Nyx

Sintaxis limpia y familiar. Compila a codigo nativo via LLVM.

fn handle_usuario(req: Request) -> Response {
    let id: String = req.params.get("id")
    return response_json(200, "{\"id\": \"" + id + "\"}")
}

fn main() {
    let app: App = app_new()
    app_use(app, mw_cors)
    app_get(app, "/usuarios/{id}", handle_usuario)
    serve_app(app, 3000, 64)
}
$ redis-cli -p 6382

> CREATE TABLE eventos (id INTEGER PRIMARY KEY, nombre TEXT)
OK
> INSERT INTO eventos VALUES (1, 'deploy')
OK
> SELECT nombre FROM eventos WHERE id = 1
1) "deploy"
$ redis-cli -p 6381

> ENQUEUE tareas '{"tarea": "enviar_email", "a": "alice@ejemplo.com"}'
"msg_0001"
> DEQUEUE tareas
1) "msg_0001"
2) "{\"tarea\": \"enviar_email\"}"
> ACK tareas msg_0001
OK
fn handle_request(method: String, path: String,
                  headers: Array, body: String) -> Array {
    let hdrs: Array = ["content-type", "application/json",
                       "server", "nyx-http2"]
    return [200, hdrs, "{\"ok\": true, \"protocolo\": \"h2c\"}"]
}

fn main() -> int {
    h2_serve(3004, 4, handle_request)
    return 0
}
Ecosistema

Ocho productos, un lenguaje

Todo lo que sirve este sitio web esta escrito en Nyx.

NyxKV
KV store compatible con Redis. 52 comandos, Pub/Sub, auth multi-tenant, persistencia binaria.
82K ops/s
nyx-serve
Framework HTTP con middleware composable, APIs JSON y sesiones con cookies.
9,971 req/s
nyx-proxy
Proxy HTTPS con TLS, SNI, health checks, rate limiting, access logs.
4,282 req/s
nyx-queue
Cola de mensajes persistente con ACK, redelivery automatico y distribucion round-robin.
3,252 msg/s
nyx-http2
Servidor HTTP/2 con compresion HPACK, framing binario y multiplexing de streams.
h2c mode
nyx-db
Base de datos SQL embebida con parser propio, B-tree, transacciones, persistencia.
motor SQL
nyx-edit
Editor de texto terminal con seleccion, undo, busqueda, clipboard y raw mode.
1091 lineas
nyx-shell
Shell POSIX interactivo con pipes, redirects, expansion de variables, historial.
fork+exec
Playground
Proba Nyx en tu navegador. Edita, compila y ejecuta sin instalar nada.
probalo ahora
Rendimiento

Velocidad nativa

Compilado a codigo maquina via LLVM. Compite con C.

fibonacci(40)
0.87x C
primes(100K)
0.99x C
loop(100M)
= C
map(100K)
1.07x C
HTTP hello
73K req/s
Empezar

De cero a ejecutar en 30 segundos

1 — Instalar

$ curl -sSf https://nyxlang.com/install.sh | sh

Linux (x86_64, ARM64) · Requiere Clang · ~10 segundos

Verificar: $ nyx --version → Nyx v0.12.0

2 — Inicio Rápido

Hola Mundo
$ echo 'fn main() { print("Hola!") }' > hola.nx
$ nyx run hola.nx
Hola!
Crear un proyecto
$ nyx init miapp
$ cd miapp && nyx run
Hola desde miapp!
Servidor web en 8 líneas
import "std/http"

fn serve_req(request: Array) -> String {
    return http_response(200, "Hola desde Nyx!")
}

fn main() {
    http_serve_mt(8080, 4, serve_req)
}
$ nyx run servidor.nx
# Abrir http://localhost:8080

3 — Ejemplos

API JSON
Endpoint REST con rutas y respuesta JSON
import "std/web"

fn get_users(req: Request, resp: Response) {
    response_json(resp, "[{\"name\": \"Alice\"}]")
}

fn main() {
    let app: App = app_new()
    app_get(app, "/api/users", get_users)
    serve_app(app, 3000, 16)
}
Almacén Clave-Valor
Conectar a nyx-kv con el protocolo RESP
fn main() {
    let conn: int = tcp_connect("localhost", 6380)
    tcp_write(conn, "SET nombre Alice\r\n")
    let resp: String = tcp_read(conn)
    print(resp)  // +OK
    tcp_close(conn)
}
Procesar Archivos
Leer, parsear y filtrar contenido de archivos
fn main() {
    let content: String = read_file("datos.csv")
    let lines: Array = content.split("\n")
    var count: int = 0
    for line in lines {
        if line.contains("error") {
            print("Encontrado: " + line)
            count = count + 1
        }
    }
    print("Total: " + int_to_string(count))
}
Tareas Concurrentes
Concurrencia estilo goroutine con canales
fn work(id: int, ch: Map) -> int {
    print("Worker " + int_to_string(id))
    channel_send(ch, id * 10)
    return 0
}

fn main() {
    let ch: Map = channel_new(2)
    thread_spawn(fn() -> int { return work(1, ch) })
    thread_spawn(fn() -> int { return work(2, ch) })
    let r1: int = channel_recv(ch)
    let r2: int = channel_recv(ch)
    print(int_to_string(r1) + ", " + int_to_string(r2))
}
Leer el Libro Probar en Playground

31 capítulos · Bilingüe EN/ES · De lo básico a construir bases de datos

Package Manager

Gestiona tus proyectos Nyx

Todo lo que necesitas para crear, compilar, ejecutar y compartir proyectos Nyx.

Instalar y actualizar
Instalar desde cero
$ curl -sSf https://nyxlang.com/install.sh | sh
  Nyx installed successfully!

Se instala en ~/.nyx/ y enlaza nyx a ~/.local/bin/nyx. Agrega el PATH a tu perfil de shell automáticamente.

Actualizar a la última versión
$ nyx update
Updating Nyx...
Rebuilding compiler...
Rebuilding package manager...
Nyx updated successfully.
nyx 0.12.0

Descarga el código más reciente y recompila. Ejecuta esto en cualquier momento para obtener nuevas funcionalidades y correcciones.

Desinstalar
$ nyx uninstall
Nyx has been uninstalled.
  Removed: ~/.nyx/
  Removed: ~/.local/bin/nyx

Elimina Nyx completamente de tu sistema. Limpio y reversible.

Crear un proyecto
Inicializar
$ mkdir miapp && cd miapp
$ nyx init
Initialized project: miapp
  Created: nyx.toml, src/main.nx
  Build:   nyx build
  Run:     nyx run

nyx init crea dos archivos: nyx.toml (configuración del proyecto) y src/main.nx (punto de entrada).

Estructura del proyecto
miapp/
  nyx.toml          # Configuración del proyecto
  src/
    main.nx         # Punto de entrada (fn main)
  packages/     # Dependencias (se crea automáticamente)
  nyx.lock          # Archivo lock (generado automáticamente)
nyx.toml explicado
# Todo proyecto Nyx tiene un nyx.toml en su raíz
[package]
name = "miapp"          # Nombre del proyecto (nombre del binario)
version = "0.1.0"      # Versión semántica
main = "src/main.nx"   # Archivo de entrada
description = "..."    # Descripción (opcional)
no_gc = false           # Opcional: modo sistemas (sin GC)

[dependencies]
nyx-kv = "*"            # Desde el registro (github.com/nyxlang-dev/)
mylib = "https://..."  # Desde URL personalizada
Compilar y ejecutar
Compilar un proyecto
$ nyx build              # Compilar (debug)
Building: miapp v0.1.0
  Compiling: src/main.nx
✓ Built: miapp

$ nyx build --release    # Compilar con optimizaciones (-O2)
$ ./miapp                # Ejecutar el binario compilado
Compilar y ejecutar en un paso
$ nyx run                # Compilar + ejecutar (dentro de un proyecto)
Hola desde miapp!
Ejecutar un archivo suelto (sin proyecto)
$ nyx run hola.nx        # Compilar y ejecutar un archivo suelto
Hola!

$ nyx hola.nx            # Forma corta — mismo resultado
Hola!

No necesita nyx.toml. Perfecto para scripts y experimentos rápidos.

Dependencias
Agregar un paquete del registro
$ nyx add nyx-kv
Adding package: nyx-kv
  Fetching: https://github.com/nyxlang-dev/nyx-kv
  Updated nyx.toml
Package 'nyx-kv' added.

Los paquetes se descargan de github.com/nyxlang-dev/<nombre> por defecto y se guardan en packages/.

Agregar desde una URL personalizada
$ nyx add mylib --from https://github.com/user/mylib
Package 'mylib' added.

Usa --from para descargar desde cualquier repositorio Git.

Resolución automática
$ rm -rf packages/  # Borrar paquetes locales
$ nyx build             # Se descargan automáticamente
  Resolving: nyx-kv
  Fetched: nyx-kv
✓ Built: miapp

Las dependencias en nyx.toml se resuelven automáticamente al compilar. El archivo nyx.lock registra las versiones exactas.

Referencia de comandos
Comando Descripción
nyx initCrear un nuevo proyecto (nyx.toml + src/main.nx)
nyx buildCompilar el proyecto
nyx build --releaseCompilar con optimizaciones
nyx runCompilar y ejecutar el proyecto
nyx run archivo.nxCompilar y ejecutar un archivo suelto
nyx add <pkg>Agregar una dependencia del registro
nyx add <pkg> --from <url>Agregar una dependencia desde una URL
nyx infoMostrar detalles del proyecto
nyx updateActualizar Nyx a la última versión
nyx uninstallEliminar Nyx del sistema
nyx --versionMostrar versión instalada
Aprender

El Libro de Nyx

31 capitulos cubriendo desde lo basico hasta sistemas en produccion. Bilingue EN/ES.

Basico
Variables, funciones, control de flujo, structs, enums, pattern matching.
Avanzado
Generics, traits, closures, iteradores, concurrencia, FFI.
Sistemas
Punteros raw, assembly inline, modo sin GC, networking, TLS.
Leer el Libro
Codigo abierto

Construido abiertamente

Licencia Apache 2.0. Contribuciones bienvenidas.

nyx
Compilador, runtime, stdlib, 318 tests.
nyx-kv
KV store compatible con Redis.
nyx-serve
Framework HTTP.
nyx-proxy
Proxy HTTPS.
nyxlang.com
Sitio web y landing pages.