Gjallarhorn: un framework web minimalista escrito desde cero en Odin

Fuentes: Gjallarhorn: a from-scratch web framework in Odin with no dependencies

Gjallarhorn es un framework web escrito desde cero en el lenguaje Odin, sin dependencias externas de terceros. Reúne en un único paquete un servidor HTTP artesanal, un enrutador, una cadena de middleware en capas ("runes"), un motor de plantillas llamado Loom y un ORM para PostgreSQL —denominado Mímir— que implementa por sí mismo el protocolo wire v3 del motor de base de datos, incluida la autenticación SCRAM y un pool de conexiones. No recurre a libpq ni a otras librerías.

El proyecto se instala clonando o copiando el directorio del paquete junto al archivo principal de la aplicación, ya que Odin carece de un gestor central de paquetes. Solo se necesita el compilador de Odin en el PATH; opcionalmente, OpenSSL del sistema para habilitar TLS en la base de datos y en HTTPS mediante la bandera -define:GJ_TLS=true. La base de datos PostgreSQL es opcional: sin ella, el framework imprime por consola el SQL de las migraciones en lugar de ejecutarlas y devuelve 503 en las rutas dependientes de base de datos, mientras el resto de funciones opera con normalidad.

Gjallarhorn expone una API breve y explícita. El objeto Bifrost encapsula la petición y la respuesta, con helpers para leer parámetros de ruta, query string, cabeceras y cuerpos (JSON o application/x-www-form-urlencoded), y para escribir respuestas en texto, JSON o HTML. Incluye registro de rutas por verbo HTTP, sesiones mediante cookies firmadas, servicio de archivos estáticos con protección frente a path traversal y middleware incorporado de registro y CORS. El ORM asocia structs de Odin a tablas mediante etiquetas y realiza el mapeo de filas a estructuras de forma automática.

El repositorio documenta con honestidad su estado actual: cada módulo indica su cometido, su control de seguridad y qué funciones quedan diferidas a fases posteriores. La licencia es la del repositorio original en GitHub del usuario Lvcky-gg.