17 puntos por GN⁺ 2025-10-10 | 1 comentarios | Compartir por WhatsApp
  • Lavandula es un framework web ligero basado en C, diseñado para el desarrollo de aplicaciones web modernas
  • Ofrece un entorno de desarrollo intuitivo y rápido, y se enfoca en la productividad y el rendimiento sin funciones innecesarias
  • Incluye la mayoría de las funciones esenciales, como sistema de controladores/enrutamiento, pipeline de middleware, framework de pruebas y bibliotecas de SQLite/JSON
  • En el futuro está previsto ampliar sus capacidades con funciones como ORM, cookies de sesión, servicio de archivos estáticos e integración con varias bases de datos
  • Maximiza la comodidad para desarrolladores con creación rápida de proyectos basada en CLI, pruebas unitarias integradas y soporte para variables de entorno y logging

Lavandula: visión general de un framework web ligero y de alto rendimiento en C

  • Lavandula es un framework web ligero en C diseñado para crear aplicaciones web modernas de forma rápida y sencilla
  • Sus objetivos principales son la simplicidad, la velocidad y la alta productividad; en lugar de funciones complejas, se concentra en lo esencial y reduce lo innecesario de los frameworks pesados

Características principales y utilidad

  • Está construido sobre C, por lo que incluye dependencias mínimas
  • Ofrece un sistema de controladores y enrutamiento que permite configurar endpoints HTTP con facilidad
  • Incluye soporte para métodos HTTP como GET y POST y un pipeline de middleware local/global
  • Permite crear y ejecutar proyectos rápidamente mediante la herramienta CLI (lavu)
  • Integra framework de pruebas unitarias, manejo de variables de entorno, logging, integración con SQLite y una biblioteca JSON

Funciones ya completadas

  • Sistema de controladores/enrutamiento
  • Soporte para endpoints por método HTTP (GET, POST, etc.)
  • Pipeline de middleware (local/global)
  • Dependencias mínimas (basado en código C puro)
  • Scaffolding sencillo de proyectos mediante CLI
  • Framework de pruebas unitarias integrado
  • Soporte para variables de entorno y sistema de logging
  • Integración con SQLite/biblioteca JSON integrada

Funciones en desarrollo

  • Parsing de cuerpos JSON en HTTP
  • Cookies de sesión
  • Configuración de políticas CORS
  • Lavender ORM
  • Motor de plantillas HTML ELA (Embedded Lavandula)

Planes futuros (roadmap)

  • Rate limiting
  • Servicio de archivos estáticos
  • Integración con PostgreSQL y MySQL
  • Posible framework de inyección de dependencias
  • Automatización de la lista de endpoints/rutas registrables
  • Generación automática de modelos JSON y funciones CRUD (usando el comando lavu model)
  • Manejo de parámetros de URL y enrutamiento dinámico

Resumen de cómo crear y ejecutar un proyecto

  • Comando CLI: lavu new my-project crea automáticamente la carpeta del proyecto y la estructura base
  • Archivos generados automáticamente:
    • archivo de configuración (lavandula.yml)
    • código fuente principal/controladores/rutas
    • makefile
    • código de pruebas, etc.
  • Ejecución rápida: después de entrar a la carpeta, se puede iniciar de inmediato el servidor local con lavu run, puerto predeterminado http://localhost:3000/

Licencia y otra información

  • Licencia: MIT License
  • De acuerdo con el espíritu open source, cualquiera puede mejorar el proyecto o participar
  • Está escrito principalmente en C (97.3%) e incluye algunas partes en Makefile/Shell script

Resumen de las ventajas de Lavandula

  • Como framework web completo, algo muy poco común en el ecosistema de C, destaca en entornos con recursos limitados o en la implementación de servidores ultrarrápidos
  • Frente a frameworks populares, está especializado en mayor velocidad y menor overhead
  • Gracias a su CLI, herramientas integradas y estructura minimalista, tiene una curva de aprendizaje corta y alta productividad

1 comentarios

 
GN⁺ 2025-10-10
Comentarios de Hacker News
  • Siento que es el código en C más limpio, moderno y hermoso que he visto recientemente. No es un kernel, claro, pero comparado con grandes proyectos llenos de condicionales #ifdef y montones de guiones bajos, creo que más bien es un buen ejemplo para aprender el sentido estético de C. En particular, es la primera vez que veo código de pruebas escrito en C de esta manera; es un gran trabajo. En la secundaria y preparatoria aprendí C como mi primer lenguaje de programación, y al instalar software libre en la PC que tenía en casa me di cuenta de que la mayoría de los programas estaban hechos en C. Cuando conocí formalmente ciencias de la computación en la universidad, vi estructuras de datos y algoritmos con C++, pero como ya entendía los punteros pude adaptarme fácilmente. Si evitas varios elementos complejos, te das cuenta de que C es un lenguaje muy limpio y simple. Claro, poder acceder directamente a esa complejidad también es parte del atractivo de C, pero creo que lo importante es el equilibrio adecuado
    • Escucho seguido que entender los punteros es difícil, pero la verdad no sé si realmente lo sea tanto. Recuerdo que cuando los aprendí me tomó como 15 minutos agarrarles más o menos la idea. Claro, dominarlo lleva más tiempo, pero no termino de entender por qué los punteros se consideran algo de dificultad casi mítica. Este proyecto también me parece genial. Solo espero que este tipo de proyectos no termine en el portafolio de alguien que busca trabajo para luego archivarse y olvidarse poco después
    • Significa mucho que hayas elogiado el código. Siempre pongo mucho esfuerzo en hacerlo de esa manera, así que agradezco poder escuchar algo así
  • Ojalá no se critique este proyecto con un tono excesivamente serio ni se hagan análisis sin sentido sobre cosas como “si puede reemplazar a PHP”. Me parece un gran ejemplo de un buen reto hecho en C. Si se le agregan plantillas HTML, creo que podría evolucionar a un framework completo
    • Muchas gracias por tus palabras. Las plantillas HTML están en la lista de prioridades y pienso implementarlas más adelante por diversión
    • Estoy aprendiendo C por gusto, y este proyecto de verdad me parece genial
  • El código es muy fácil de leer y está bien organizado. Dicho eso, casi no hay error checking, así que en muchas partes no se revisan los valores de retorno de snprintf, malloc, etc. También existe un bucle sin usar. La parte de procesamiento paralelo todavía no parece estar soportada, así que no es un problema inmediato, pero por la naturaleza de un servidor web convendría introducir threading más adelante. Si llegas a considerar la implementación, recomiendo usar una biblioteca como libuv
    • Gracias por tomarte el tiempo de dar retroalimentación tan detallada. Tenía planeado agregar el procesamiento paralelo después, así que me gustó que lo mencionaras
  • Probé por diversión un framework parecido llamado Jetzig, y este proyecto también me dejó muy buena impresión. También me gusta la combinación de BSD C CGI y Postgres. Trabajo principalmente con Python, pero experimentar de forma directa con lenguajes de bajo nivel y conceptos de memoria es realmente divertido. Hay quienes señalan el tema de la viabilidad, pero mientras los dispositivos embebidos se vuelvan más comunes, creo que el valor de frameworks de tan bajo nivel crecerá aún más. También estoy experimentando con pico calc, y si hiciera una “app móvil” para eso, escribiría el código del framework en C. Gran trabajo
  • En mi opinión este proyecto está buenísimo. La configuración se lee fácil, y si además puedes aprovechar el rendimiento de C, ya es ganancia. Sobre todo con una IA como Claude, que puede generar con facilidad partes del framework para luego agregar solo lo que haga falta, la ventaja es que puedes armar tú mismo un framework web ligero e independiente de la plataforma. Espero además que el rendimiento sea bastante bueno
    • Lista de verificación de pesadilla de mantenimiento:
      • Los frameworks web ya de por sí son difíciles de mantener por los estándares que cambian constantemente
      • Si el código lo escribió una IA, puede que nadie tenga del todo claro cómo funciona
      • Está escrito en C
        En lo personal me gusta la simplicidad de C puro, pero la combinación de código de red en C escrito por IA sí me da algo de miedo
  • Creo que escribir desde cero un parser HTTP en C es muy peligroso. Puede generar vulnerabilidades enormes, así que si estás haciendo un framework web pensando en un despliegue real, es más seguro partir de bibliotecas probadas como libmicrohttpd, libevent_http, fastcgi, etc.
    • Coincido mucho con esta advertencia. Entonces me da curiosidad saber cómo se podría construir un servidor HTTP seguro en C. Suena de verdad como material para un libro interesante: ir señalando vulnerabilidades en cada capítulo y tratar métodos estructurados para llegar a una biblioteca HTTP madura
    • En realidad no parece que este proyecto vaya a usarse nunca en producción, pero si por algún motivo llegara a cruzarte esa idea, mejor abandónala
  • Retroalimentación no solicitada: creo que la macro appRoute vuelve ambiguos el tipo y la firma, e introduce una indirección innecesaria. Me parece mejor quitarla. Y el tipo AppContext en realidad mezcla funciones de App + HTTP Request + DB, así que algo como RequestContext o ControllerContext sería más apropiado. Fuera de eso, como varios otros, también me impresionó lo limpio del código. De verdad es un esfuerzo excelente
  • Esto demuestra que con el uso de macros se pueden lograr muchas cosas. De hecho, los frameworks web modernos también aprovechan activamente herramientas complejas como la metaprogramación de cada lenguaje. Aplaudo mucho que lo hayas construido tú mismo; es un trabajo difícil, pero sin duda también divertido. También está la pregunta de “por qué lo hiciste”, pero no creo que haga falta una razón especial. Es simplemente porque se disfruta desarrollar en sí mismo
    • Muchas gracias, y estoy totalmente de acuerdo
  • Espero que los fabricantes de hardware adopten este proyecto para que mejore un poco la calidad de sus páginas web de administración
  • Me sorprende que haya tantas reacciones negativas pese a que es un proyecto con una buena idea y ejecutado con esmero. La habilidad que Ashton desarrolló esta vez es un activo valioso que no va a desaparecer en el futuro
    • De verdad agradezco que lo valores así