Niell

Un lenguaje de programación diseñado para legibilidad bidireccional humano↔IA.

Compila a LLVM IR. Memoria segura por construcción. Sin data races. Sin VM. Sin liturgia sintáctica.

Las firmas se leen como prosa: action greet with name: text -> text. Los efectos se leen como contratos: fails with NotFound. El programa cuenta lo que tiene que hacer antes de cómo lo hace.

Status

Pre-release v0.3. El compilador (Rust + inkwell + LLVM 18) implementa la Fase 1 — thin-slice del lenguaje con 407 tests verdes. Binario distribuible para Linux x86_64 (otras plataformas, build desde fuentes).

Try it

Un programa mínimo:

action main
  show with "hola, niell"
end

Instalar el compilador (Linux x86_64):

sudo apt install -y clang xz-utils
curl -L https://niell.dev/dl/niell-linux-x86_64.xz | xz -d > niell
chmod +x niell
sudo mv niell /usr/local/bin/
niell --help

Detalles por plataforma (macOS, WSL2) en Install.

Compilar y ejecutar el programa:

niell hello.niell -o hello
./hello
# → hola, niell

Hecho con Niell

Este sitio se genera con un SSG escrito completamente en Niell. El binario niell que acabas de descargar compila el mismo código que produjo esta página. Pipeline: markdown → AST → HTML, ~1000 líneas de Niell.

El source de esta página está a un click: descarga index.md — es el markdown crudo. El HTML que estás leyendo lo generó esa lógica, corriendo en el mismo binario que tienes en tu máquina.

Fragmento real del template, para que veas cómo se lee Niell:

action wrap_in_template with body: text, sidebar: text, meta: PageMeta -> text
  title: text = meta.title
  description: text = meta.description
  canonical: text = meta.canonical
  lang: text = meta.lang
  og_meta: text = emit_og_meta with meta
  json_ld: text = emit_json_ld with meta
  return "<!DOCTYPE html>\n<html lang=\"{lang}\">\n<head>..."
end

Cada .md de la spec tiene su gemelo crudo servido al lado del HTML — 02-tipos.md, 04-acciones.md, etc. Transparencia para humanos curiosos y agentes que prefieren el source.

Para qué sirve Niell

Niell brilla en tres nichos donde su diseño paga doble.

Pipelines de agentes

Cuando un loop tiene a Claude (o cualquier IA) como intérprete del pipeline y necesita una autoridad determinística para validar estado, derivar contadores de retry, o rechazar transiciones inválidas — ese rol encaja con Niell. Tagged unions con match exhaustivo cierran todos los casos en compile-time; fails with distingue fallos esperados de bugs; el output --json da contratos estables consumibles desde Bash o desde otro agente.

Spec-driven development

Una firma como action authenticate with creds: Credentials -> Session fails with InvalidPassword, AccountLocked es contrato y código a la vez. El compilador exige que todos los on <variant> se manejen, así que la spec no se desactualiza silenciosamente: si un error nuevo aparece, el checker lo señala en cada call site hasta que se cubra. La documentación del sistema y el código son la misma cosa.

CLI tools introspectables

Errores con códigos estables (niell explain NIELL-PARSE-001 devuelve descripción + ejemplo + fix pattern), output --json versionado, schema introspectable con niell describe --json. Las CLI escritas en Niell son consumibles por humanos y por scripts sin parsear prosa, y los agentes pueden preguntarles "qué entiendes y qué errores puedes tirar" antes de invocar.

Proyectos concretos con código y walkthroughs en preparación — sección Proyectos pendiente.

Por qué Niell

Antes de los LLMs, traducir intención a código era responsabilidad exclusiva del humano. Hoy esa traducción ya no es monopolio humano, pero la IA tampoco la reemplaza. Programador e IA trabajan como pares.

Lo que escasea entre ambos ya no es escribir código — es revisarlo. Validar que hace lo que tiene que hacer, detectar lo que está mal, decidir si la dirección es correcta.

Niell pone esa revisión en primer plano. La sintaxis empuja el contrato al frente; la mecánica de orquestación queda atrás. El compilador garantiza memoria, seguridad y ausencia de data races; el humano y la IA se reparten el resto.