Fitz
Un lenguaje de programación compilado con HTTP, async, auth, WebSockets, jobs e interop Python como ciudadanos de primera clase del core del lenguaje.
Sintaxis inspirada en Python/TypeScript, compilado a binario nativo standalone (sin runtime en el destino), tipado gradual con checker estático en compile-time.
type User { id: Int, email: Str, name: Str, role: Str }
@auth_provider
fn check_token(headers: Map<Str, Str>) -> Result<User> {
let auth = headers.get("authorization")?
let claims = jwt.decode(auth, "secret")?
return Ok(User { id: 1, email: claims["email"], name: "Ada", role: "admin" })
}
@authenticated
@get("/me")
fn me(user: User) -> User => user
@server(3000)
fn main() => 0
$ fitz build server.fitz
$ ./server
🏔️ Fitz HTTP escuchando en http://127.0.0.1:3000
GET /me 🔒 (bearerAuth)
GET /openapi.json (schema autogenerado)
GET /docs (UI Scalar)
¿Por qué Fitz?¶
| Python | TypeScript | Go | Fitz | |
|---|---|---|---|---|
| Sintaxis limpia | ✅ | ⚠️ | ❌ | ✅ |
| Tipado gradual | ❌ | ✅ | ❌ | ✅ |
| Compilado nativo | ❌ | ❌ | ✅ | ✅ |
| Multiplataforma | ⚠️ | ⚠️ | ✅ | ✅ |
| HTTP en el core | ❌ | ❌ | ❌ | ✅ |
| Async nativo | ⚠️ | ✅ | ✅ | ✅ |
| Docs HTTP auto | ⚠️ | ❌ | ❌ | ✅ |
| Auth nativa | ❌ | ❌ | ❌ | ✅ |
| WS tipados + AsyncAPI auto | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Jobs sin Celery | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Postgres + ORM nativo | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Observability OTel | ⚠️ | ⚠️ | ⚠️ | ✅ |
| Interop Python | ✅ | ❌ | ❌ | ✅ |
Multiplataforma: cada release
publica binarios + extensión VSCode + imagen Docker
(ghcr.io/thegreekman76/fitz:latest) para 4 plataformas:
Windows x64, Linux x64, Linux ARM64 y macOS Apple Silicon. El mismo
programa Fitz corre en cualquiera; cross-compile gratis vía rustc
targets.
Benchmark Fitz ORM vs SQLAlchemy¶
Para validar la promesa "binario nativo sin overhead" del ORM,
mantenemos un bench reproducible cabeza-a-cabeza entre los dos
boilerplates equivalentes
(api-postgres-fitz
vs api-postgres-python)
— mismo Postgres, mismos endpoints, misma firma. Headline numbers
en v0.10.13 (Intel Core Ultra 7 155H, Docker 29.2.1, sustained
30s c=10):
| Métrica | Fitz ORM | Python+SQLAlchemy | Speedup |
|---|---|---|---|
| Memory peak | 9.2 MB | 51 MB | 5.5x más eficiente |
| GET /users p50 | 4.88 ms | 37.85 ms | 7.76x |
| GET /users RPS | 1944 | 246 | 7.91x |
| GET /users/{id} p50 | 3.60 ms | 31.87 ms | 8.85x |
| GET /users/{id} RPS | 2604 | 296 | 8.80x |
| Cold start | 0.14 s | 0.22 s | 1.57x |
| Image size | 131 MB | 258 MB | 2x más liviano |
Detalle, metodología y "cómo reproducir" en Benchmarks.
Por dónde arrancar¶
Curso de 0 a experto → Guía completa → DB y ORM → Benchmarks → Boilerplates → Ver el roadmap → GitHub →
El curso Fitz de 0 a experto es la entrada
recomendada si arrancás de cero. Te lleva paso a paso desde la
instalación hasta una app real con HTTP + auth + Postgres, con un
proyecto que crece capítulo a capítulo. M1 (setup) y M2 (tipos y
funciones) están cerrados (13 caps, ~9k LoC); M3 (módulos) recién
cerrado; M4-M7 en construcción.
La guía cubre 34 capítulos con ejemplos runnable en
examples/guide/:
desde print("hola") hasta servidores HTTP con auth + WebSockets +
cron jobs + Postgres + ORM nativo en menos de 100 líneas. Para el
stack DB completo (driver puro + ORM declarativo + relations +
JSONB/arrays + GROUP BY + eager loading + recetas), ver la
guía exhaustiva DB y ORM (~2500 LoC dedicados al
diferencial con SQLAlchemy/Prisma/Diesel).
Para ver el stack completo en acción, los 6 boilerplates Dockerizados del repo cubren CLI puro, REST API, auth + frontend, WebSockets con chat, CRUD multi-archivo con SQLAlchemy + Postgres, y un showcase fullstack con frontend rico + Postgres en 3 containers. Cada uno con README exhaustivo. Ver el cap 35 de la guía.
Extensión VSCode¶
La extensión con LSP (highlighting + diagnostics + hover +
go-to-def + autocomplete) viene en .vsix per-plataforma como
asset de cada release.
Bajá el de tu OS/arquitectura (fitz-lang-win32-x64.vsix,
fitz-lang-linux-x64.vsix, fitz-lang-linux-arm64.vsix o
fitz-lang-darwin-arm64.vsix) e instalá desde VSCode:
Ctrl+Shift+P → "Extensions: Install from VSIX...". El binario
fitz-lsp viene bundleado adentro — no necesitás compilar nada
local.
Cuando la cuenta de publisher en el VSCode Marketplace esté lista, la extensión va a estar instalable en un clic desde la UI de Extensions. Detalle en cap 22 de la guía.
Estado del proyecto¶
Fases cerradas (cierre formal de cada bloque en
CHANGELOG.md):
- Fase 2-3 — Lexer + parser + AST + intérprete + tipos
custom +
Result+ módulos. - Fase 4 — HTTP nativo (
@get/@post/@put/@delete+@server). - Fase 5a — Type checker estático.
- Fase 5b — Codegen
fitz builda binario nativo standalone. - Fase 6 — Async nativo (
async fn+.await+sleep+Future<T>). - Fase 7 — OpenAPI 3.1 auto-generado + UI Scalar.
- Fase 8 — Interop Python end-to-end (PyO3 + marshaling
bidireccional + bridge async +
fitz py-types). - Fase 9.x — LSP MVP (diagnostics + hover + go-to-def + autocomplete) + distribución multi-platform.
- Fase 9.y — Package manager (
fitz new/add/remove+fitz.toml+fitz.lock+ path/git deps). - Fase 9.z — DX completo (
fitz fmt/test/dev/repl/lint). - Fase 9.w MVP — Stack web first-class (auth + JWT/Argon2 + WebSockets tipados + AsyncAPI auto + cron + spawn).
- Fase 10 — Stack DB nativo (driver Postgres puro Fitz + ORM declarativo + migraciones automáticas + transactions + composite PK + indexes + tipos avanzados Date/DateTime/Uuid).
- Fase 11 (v0.11.0) — CLI builder nativo (
@commandcon--helpautogenerado, sinclap/argparse/click). - Fase 12 ENTERA — Deployment ciudadano primera clase.
Healthz/readyz auto-mount + SIGTERM drain (12.1),
Secret<T>opaco con redacción automática + builtinssecret()/config()/load_env()(12.2), Observability OTel built-in con logs estructurados + spans HTTP + métricas Counter/Histogram + bridge OTLP + endpoint/metricsPrometheus (12.3), Dockerfile + compose autogenerados confitz docker init/buildy detección AST del shape (12.4), cap 35 integrador en la guía + curso M7 completo (12.5). - 9.w.1.iter2.a (v0.12.4) — RBAC custom con
@requires("role")apilable. Mensaje 403 enriquecido con role actual + requeridos. - 9.w.1.iter2.b (v0.12.6) — Token blacklist + refresh con
módulo built-in
auth(auth.blacklist/auth.is_blacklisted/auth.cleanup_expired). Tabla auto-creada idempotente. - Fase 12 Tier 2 (v0.13.0) — CERRADO en bloque coordinado:
fitz deploy <docker|compose>(12.6 — sub-comando con thin wrappers sobredocker build/compose up); decoradores explícitos@trace(name="X")y@metric(name="X")sobre fns user con paridad bit-a-bitfitz run↔fitz build(12.7); feature flags built-in@flag("name")+flag(name) -> Bool - módulo
flagscon manifest[flags]y override por env varFITZ_FLAG_<UPPERCASE>(12.8).
Próximo norte: Fase 13+ (orquestación distribuida, multi-tenant,
o plugin architecture para deploy targets fly/railway/k8s)
según demanda real. Sin presión inmediata.
Nombre¶
Por el Monte Fitz Roy en El Chaltén, Patagonia, Argentina. Un nombre que no se olvida.