- 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
Avis Hacker News
#ifdefet 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.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.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.
appRouterend le type et la signature ambigus et introduit une indirection inutile. Il vaudrait mieux la supprimer. Et le typeAppContextmélange en réalité App + requête HTTP + DB et d’autres fonctions, donc un nom commeRequestContextouControllerContextsemblerait plus approprié. Cela dit, comme d’autres, j’ai été impressionné par la propreté du code, et c’est vraiment un bel effort.