17 points par GN⁺ 2025-10-10 | 1 commentaires | Partager sur WhatsApp
  • Lavandula est un framework web léger basé sur le langage C, conçu pour le développement d’applications web modernes
  • Il offre un environnement de développement intuitif et rapide, en mettant l’accent sur la productivité et les performances sans fonctionnalités superflues
  • Il inclut déjà la plupart des fonctions essentielles, comme un système de contrôleurs/routage, un pipeline de middleware, un framework de test, ainsi que des bibliothèques SQLite/JSON
  • À l’avenir, des extensions sont prévues avec notamment un ORM, des cookies de session, le serving de fichiers statiques et l’intégration de diverses bases de données
  • Il maximise le confort des développeurs grâce à la création rapide de projets via CLI, des tests unitaires intégrés et la prise en charge des variables d’environnement et du logging

Lavandula : aperçu d’un framework web C léger et haute performance

  • Lavandula est un framework web léger en C conçu pour permettre de créer rapidement et simplement des applications web modernes
  • Son objectif principal est d’offrir simplicité, rapidité et forte productivité, en se concentrant sur l’essentiel plutôt que sur des fonctions complexes, afin de réduire le poids inutile des frameworks lourds

Principales caractéristiques et intérêt

  • Développé en C, avec un minimum de dépendances
  • Fournit un système de contrôleurs et de routage pour configurer facilement des endpoints HTTP
  • Prend en charge les méthodes HTTP comme GET et POST ainsi qu’un pipeline de middleware local/global
  • Permet de créer et d’exécuter rapidement des projets via l’outil CLI (lavu)
  • Intègre un framework de tests unitaires, la gestion des variables d’environnement, le logging, l’intégration SQLite et une bibliothèque JSON

Fonctionnalités déjà disponibles

  • Système de contrôleurs/routage
  • Prise en charge des endpoints par méthode HTTP (GET, POST, etc.)
  • Pipeline de middleware (local/global)
  • Dépendances minimales (basé sur du code C pur)
  • Scaffolding de projet simplifié via CLI
  • Framework de tests unitaires intégré
  • Prise en charge des variables d’environnement, système de logging
  • Intégration de SQLite et d’une bibliothèque JSON embarquée

Fonctionnalités en cours de développement

  • Parsing du body JSON HTTP
  • Cookies de session
  • Configuration de la politique CORS
  • Lavender ORM
  • ELA (Embedded Lavandula) moteur de templates HTML

Plan de développement (roadmap)

  • Rate limiting
  • Serving de fichiers statiques
  • Intégration PostgreSQL et MySQL
  • Candidat framework d’injection de dépendances
  • Automatisation de la liste des endpoints/routes enregistrables
  • Génération automatique de modèles JSON et de fonctions CRUD (via la commande lavu model)
  • Gestion des paramètres d’URL et routage dynamique

Aperçu de la création et de l’exécution d’un projet

  • Commande CLI : lavu new my-project permet de générer automatiquement le dossier du projet et sa structure de base
  • Fichiers générés automatiquement :
    • fichier de configuration (lavandula.yml)
    • sources main/controller/routes
    • makefile
    • code de test, etc.
  • Exécution rapide : après s’être déplacé dans le dossier, lavu run permet de lancer immédiatement le serveur local, sur le port par défaut http://localhost:3000/

Licence et autres informations

  • Licence : MIT License
  • Fidèle à l’esprit open source, tout le monde peut contribuer et l’améliorer
  • Écrit principalement en C (97.3%), avec aussi un peu de Makefile et de scripts Shell

Résumé des avantages de Lavandula

  • Framework web complet très rare dans l’écosystème C, il est particulièrement adapté aux environnements à ressources limitées ou à la mise en œuvre de serveurs ultra-rapides
  • Il se distingue par une vitesse supérieure et un overhead plus faible que les frameworks populaires
  • Grâce à sa CLI, à ses outils intégrés et à sa structure minimale, il offre une courbe d’apprentissage courte et une productivité élevée

1 commentaires

 
GN⁺ 2025-10-10
Avis Hacker News
  • C’est sans doute le code C le plus propre, moderne et élégant que j’aie vu récemment. Ce n’est pas un kernel, bien sûr, mais comparé à de gros projets pleins de conditions #ifdef et de noms bourrés de underscores, je pense que c’est plutôt un bon exemple pour apprendre le sens esthétique du C. C’est aussi la première fois que je vois des tests écrits en C de cette manière. Très beau travail. J’ai appris à programmer d’abord en C quand j’étais au collège et au lycée, et en installant des logiciels libres sur le PC qu’il y avait à la maison, j’ai découvert que la plupart des programmes étaient écrits en C. Quand j’ai commencé l’informatique à l’université, j’ai fait structures de données et algorithmes en C++, mais comme je comprenais déjà les pointeurs, je m’y suis adapté facilement. Quand on évite certains éléments complexes, on se rend compte que C est un langage très propre et simple. Bien sûr, le fait de pouvoir accéder directement à cette complexité fait aussi son charme, mais je pense qu’un bon équilibre est important.
    • J’entends souvent dire que comprendre les pointeurs est difficile, mais je ne suis pas certain que ce soit vraiment si dur. Je me souviens avoir eu une intuition générale en 15 minutes la première fois que je les ai appris. Bien sûr, il faut plus de temps pour les maîtriser, mais je comprends mal pourquoi les pointeurs sont vus comme quelque chose de mythiquement difficile. Je trouve aussi ce projet très réussi. J’espère simplement que ce genre de projet, une fois mis dans le portfolio d’un candidat, ne finira pas vite archivé puis oublié.
    • Le fait que vous ayez salué le code compte vraiment beaucoup pour moi. Je fais toujours énormément d’efforts pour l’écrire ainsi, donc merci de me dire cela.
  • J’aimerais qu’on évite de critiquer ce projet avec un sérieux excessif ou de faire des analyses sans intérêt du genre « peut-il remplacer PHP ? ». Je pense que c’est un excellent exemple d’un beau défi relevé en C. Si des templates HTML sont ajoutés, cela pourrait évoluer vers un framework complet.
    • Merci beaucoup pour ces mots. Les templates HTML sont dans la liste des priorités, et j’ai hâte de les implémenter plus tard pour le plaisir.
    • J’apprends le C pour le plaisir, et je trouve vraiment ce projet génial.
  • Le code est très lisible et bien structuré. En revanche, il n’y a quasiment pas de vérification d’erreurs, donc beaucoup de retours de snprintf, malloc, etc. ne sont pas vérifiés. Il y a aussi une boucle inutilisée. La partie parallèle ne semble pas encore prise en charge, donc ce n’est pas un problème immédiat, mais vu la nature d’un serveur web, l’introduction de threads serait avantageuse à terme. Si vous envisagez cette implémentation, je recommande une bibliothèque comme libuv.
    • Merci pour ce retour détaillé. J’avais prévu d’ajouter le traitement parallèle plus tard, donc je suis content que vous l’ayez mentionné.
  • J’ai pris plaisir à utiliser un framework similaire appelé Jetzig, et j’ai aussi une très bonne impression de ce projet. J’aime également la combinaison BSD C CGI + Postgres. Je travaille surtout en Python, mais c’est vraiment amusant d’expérimenter directement les langages bas niveau et les concepts mémoire. Certains soulignent le manque de réalisme, mais à mesure que les appareils embarqués se répandront davantage, je pense que la valeur de frameworks bas niveau comme celui-ci augmentera encore. J’expérimente aussi avec pico calc, et si je devais créer une « application mobile » pour lui, j’écrirais le code du framework en C. Beau travail.
  • À mon avis, ce projet est vraiment génial. L’installation est facile à lire, et si on peut profiter des performances du C, c’est tout bénéfice. L’avantage, en particulier avec une IA comme Claude, c’est qu’on peut générer facilement certaines parties du framework, n’ajouter que ce dont on a besoin, et assembler soi-même un framework web léger et indépendant de la plateforme. Je m’attends aussi à de très bonnes performances.
    • Checklist du cauchemar de maintenance :
      • Les frameworks web sont difficiles à maintenir dès le départ à cause de standards en évolution permanente
      • Si le code est écrit par une IA, il est possible que personne ne sache clairement comment il fonctionne
      • C’est écrit en C
        Personnellement, j’aime la simplicité du C pur, mais l’association code réseau en C + code écrit par une IA me fait un peu peur.
  • Je pense qu’écrire soi-même un parseur HTTP en partant de zéro en C est très dangereux. Cela peut introduire d’énormes vulnérabilités, donc si l’on crée un framework web en pensant à un déploiement réel, il est plus sûr de partir de bibliothèques éprouvées comme libmicrohttpd, libevent_http, fastcgi, etc.
    • Je suis tout à fait d’accord avec ce genre d’avertissement. Du coup, je me demande comment on pourrait réellement construire un serveur HTTP sûr en C. Ce serait un sujet de livre vraiment fascinant. Il serait intéressant de traiter chapitre par chapitre les vulnérabilités et les approches structurelles qui mènent à une bibliothèque HTTP mature.
    • Il est peu probable que ce projet soit un jour utilisé en production, mais si jamais cette idée vous traverse l’esprit, je vous conseille d’y renoncer.
  • Retour non sollicité : je pense que la macro appRoute rend le type et la signature ambigus et introduit une indirection inutile. Il vaudrait mieux la supprimer. Et le type AppContext mélange en réalité App + requête HTTP + DB et d’autres fonctions, donc un nom comme RequestContext ou ControllerContext semblerait plus approprié. Cela dit, comme d’autres, j’ai été impressionné par la propreté du code, et c’est vraiment un bel effort.
  • Cela montre que l’on peut accomplir beaucoup grâce à l’usage des macros. En réalité, les frameworks web modernes utilisent eux aussi activement des outils complexes comme la métaprogrammation propre à chaque langage. Je tiens à féliciter l’auteur d’avoir construit cela lui-même. C’est difficile, mais c’est aussi clairement amusant. Certains demandent « pourquoi l’avoir fait ? », mais je ne pense pas qu’il faille forcément une raison. C’est simplement parce qu’on prend plaisir au développement lui-même.
    • Merci beaucoup, et je suis entièrement d’accord.
  • J’espère que des fabricants de matériel adopteront ce projet afin d’améliorer un peu la qualité de leurs pages web d’administration.
  • Je suis surpris de voir autant de réactions négatives malgré le soin apporté à ce projet et la qualité de l’idée. Les compétences qu’Ashton a acquises ici sont un atout précieux qui ne disparaîtra pas à l’avenir.
    • Merci infiniment de l’évaluer ainsi, cela me touche vraiment.