17 Punkte von GN⁺ 2025-10-10 | 1 Kommentare | Auf WhatsApp teilen
  • Lavandula ist ein leichtgewichtiges Web-Framework auf Basis der Programmiersprache C, das für die Entwicklung moderner Webanwendungen konzipiert wurde
  • Es bietet eine intuitive und schnelle Entwicklungsumgebung und legt ohne unnötige Funktionen den Schwerpunkt auf Produktivität und Performance
  • Es enthält die meisten wesentlichen Funktionen wie Controller-/Routing-System, Middleware-Pipeline, Test-Framework sowie SQLite-/JSON-Bibliotheken
  • Künftig sind Funktionserweiterungen wie ORM, Session-Cookies, Serving statischer Dateien und die Anbindung verschiedener Datenbanken geplant
  • Mit schneller Projekterstellung per CLI, integrierten Unit-Tests sowie Unterstützung für Umgebungsvariablen und Logging wird die Entwicklerfreundlichkeit maximiert

Lavandula: Überblick über ein leichtgewichtiges Hochleistungs-Web-Framework in C

  • Lavandula ist ein leichtgewichtiges Web-Framework in C, das dafür entwickelt wurde, moderne Webanwendungen schnell und einfach zu erstellen
  • Die Hauptziele sind Einfachheit, hohe Geschwindigkeit und hohe Produktivität; statt auf komplexe Funktionen setzt es auf das Wesentliche und reduziert den Ballast schwergewichtiger Frameworks

Hauptmerkmale und Nutzen

  • Auf C-Basis entwickelt und mit minimalen Abhängigkeiten
  • Bietet ein Controller- und Routing-System, mit dem sich HTTP-Endpunkte leicht konfigurieren lassen
  • Unterstützt HTTP-Methoden wie GET und POST und verfügt über eine lokale/globale Middleware-Pipeline
  • Unterstützt schnelle Projekterstellung und Ausführung über das CLI-Tool (lavu)
  • Integriertes Unit-Test-Framework, Verarbeitung von Umgebungsvariablen, Logging, SQLite-Integration und eine eingebaute JSON-Bibliothek

Bereits fertiggestellte Funktionen

  • Controller-/Routing-System
  • Unterstützung von Endpunkten nach HTTP-Methode (GET, POST usw.)
  • Middleware-Pipeline (lokal/global)
  • Minimale Abhängigkeiten (auf reinem C-Code basierend)
  • Einfaches Projekt-Scaffolding per CLI
  • Integriertes Unit-Test-Framework
  • Unterstützung für Umgebungsvariablen, Logging-System
  • Integration von SQLite/eingebauter JSON-Bibliothek

Funktionen in Entwicklung

  • Parsen von HTTP-JSON-Bodys
  • Session-Cookies
  • Konfiguration von CORS-Richtlinien
  • Lavender ORM
  • ELA (Embedded Lavandula) HTML-Template-Engine

Zukünftige Pläne (Roadmap)

  • Rate Limiting
  • Serving statischer Dateien
  • Anbindung von PostgreSQL und MySQL
  • Kandidat für ein Dependency-Injection-Framework
  • Automatisierung registrierbarer Endpunkt-/Routenlisten
  • Automatische Generierung von JSON-Modellen und CRUD-Funktionen (mit dem Befehl lavu model)
  • Verarbeitung von URL-Parametern und dynamisches Routing

Überblick über Projekterstellung und Ausführung

  • CLI-Befehl: Mit lavu new my-project werden Projektordner und Grundstruktur automatisch erstellt
  • Automatisch erzeugte Dateien:
    • Konfigurationsdatei (lavandula.yml)
    • Quellcode für Main/Controller/Routen
    • makefile
    • Testcode usw.
  • Schneller Start: Nach dem Wechsel in den Ordner kann mit lavu run direkt ein lokaler Server gestartet werden, Standard-Port http://localhost:3000/

Lizenz und weitere Informationen

  • Lizenz: MIT License
  • Im Sinne des Open-Source-Gedankens kann jede Person Verbesserungen beitragen und mitwirken
  • Geschrieben auf Basis von C (97,3 %), mit einigen Anteilen an Makefile/Shell-Script

Zusammenfassung der Vorteile von Lavandula

  • Als sehr seltenes vollständiges Web-Framework im C-Ökosystem eignet es sich hervorragend für ressourcenbeschränkte Umgebungen oder die Implementierung extrem schneller Server
  • Im Vergleich zu populären Frameworks ist es auf höhere Geschwindigkeit und geringeren Overhead spezialisiert
  • Mit CLI, integrierten Tools und minimalistischer Struktur bietet es eine kurze Lernkurve und hohe Produktivität

1 Kommentare

 
GN⁺ 2025-10-10
Hacker-News-Kommentare
  • Ich hatte das Gefühl, dass dies der sauberste, modernste und schönste C-Code ist, den ich in letzter Zeit gesehen habe. Es ist zwar kein Kernel-Code, aber im Vergleich zu großen Projekten voller #ifdef-Bedingungen oder Unterstriche halte ich ihn eher für ein gutes Beispiel, an dem man die Ästhetik von C lernen kann. Vor allem ist es das erste Mal, dass ich Testcode in C auf diese Weise geschrieben sehe. Tolle Arbeit. Ich habe C in der Mittel- und Oberstufe als erste Programmiersprache gelernt, und als ich Free Software auf dem PC zu Hause installierte, wurde mir klar, dass die meisten Programme in C geschrieben waren. Als ich Informatik an der Universität zum ersten Mal formell kennenlernte, habe ich Datenstrukturen und Algorithmen in C++ gemacht, aber weil ich Pointer schon verstanden hatte, konnte ich mich leicht anpassen. Wenn man verschiedene komplizierte Elemente vermeidet, merkt man, dass C eine sehr saubere und einfache Sprache ist. Natürlich ist es auch ein Reiz von C, direkt auf diese Komplexität zugreifen zu können, aber ich denke, ein angemessenes Gleichgewicht ist wichtig.
    • Ich höre oft, dass Pointer schwer zu verstehen seien, aber ich weiß nicht recht, ob sie wirklich so schwierig sind. Ich erinnere mich, beim ersten Lernen nach etwa 15 Minuten grob ein Gefühl dafür bekommen zu haben. Natürlich hat es länger gedauert, wirklich sicher damit zu werden, aber ich verstehe nicht ganz, warum Pointer als etwas mit mythischem Schwierigkeitsgrad gelten. Auch dieses Projekt finde ich großartig. Ich hoffe nur, dass solche Projekte nicht im Portfolio von Jobsuchenden landen und dann bald archiviert und vergessen werden.
    • Es bedeutet mir wirklich viel, dass Sie den Code gelobt haben. Ich investiere immer viel Mühe, ihn genau so zu gestalten, deshalb bin ich dankbar, so etwas zu hören.
  • Ich hoffe, dass dieses Projekt nicht übertrieben ernst kritisiert oder mit sinnlosen Analysen wie einer „möglichen PHP-Ablösung“ bedacht wird. Ich halte es für ein hervorragendes Beispiel dafür, eine coole Herausforderung in C anzugehen. Wenn HTML-Templates hinzukommen, könnte es sich zu einem vollständigen Framework weiterentwickeln.
    • Vielen Dank für die netten Worte. HTML-Templates stehen auf der Prioritätenliste, und ich werde sie später mit Freude implementieren.
    • Ich lerne C just for fun, und ich finde dieses Projekt wirklich großartig.
  • Der Code ist sehr gut lesbar und sauber strukturiert. Allerdings gibt es fast kein Error Checking, sodass an vielen Stellen Rückgabewerte von snprintf, malloc usw. nicht geprüft werden. Außerdem gibt es hier eine ungenutzte Schleife. Der Parallelisierungs-Teil scheint noch nicht unterstützt zu werden, daher ist das im Moment wohl kein Problem, aber wegen der Natur eines Webservers wäre Threading später vorteilhaft. Wenn man eine Implementierung erwägt, würde ich die Verwendung einer Bibliothek wie libuv empfehlen.
    • Vielen Dank für das sorgfältige Feedback. Ich hatte ohnehin geplant, Parallelverarbeitung später hinzuzufügen, daher war ich froh, dass Sie es erwähnt haben.
  • Ich hatte Spaß dabei, ein ähnliches Framework namens Jetzig zu verwenden, und sehe auch dieses Projekt sehr positiv. Die Kombination aus BSD C CGI und Postgres gefällt mir ebenfalls, und obwohl ich hauptsächlich mit Python arbeite, macht es wirklich Spaß, Low-Level-Sprachen und Speicherkonzepte direkt zu erleben. Manche weisen auf die mangelnde Praxistauglichkeit hin, aber je weiter sich Embedded Devices verbreiten, desto wertvoller könnten solche Low-Level-Frameworks werden. Ich experimentiere auch mit pico calc, und wenn ich dafür eine „Mobile App“ bauen würde, würde ich den Framework-Code in C schreiben. Tolle Arbeit.
  • Meiner Meinung nach ist dieses Projekt wirklich großartig. Das Setup lässt sich leicht lesen, und wenn man dabei von der C-Performance profitieren kann, ist das ein Gewinn. Besonders vorteilhaft ist, dass man mit einer AI wie Claude Teile des Frameworks leicht erzeugen, bei Bedarf nur das Nötige ergänzen und sich so selbst ein leichtgewichtiges, plattformunabhängiges Web-Framework zusammenstellen kann. Ich erwarte auch eine ziemlich gute Performance.
    • Wartungsalbtraum-Checkliste:
      • Web-Frameworks sind wegen sich ständig ändernder Standards von Haus aus schwer zu warten
      • Wenn der Code von AI geschrieben wurde, weiß womöglich niemand genau, wie er funktioniert
      • Es ist in C geschrieben
        Persönlich gefällt mir die Einfachheit von reinem C, aber die Kombination aus von AI geschriebenem C-basiertem Netzwerkcode macht mir auch etwas Angst.
  • Ich halte es für sehr riskant, einen HTTP-Parser in C komplett von Grund auf selbst zu schreiben. Das kann enorme Sicherheitslücken verursachen, deshalb ist es sicherer, bei einem Web-Framework mit Blick auf echten Deployment-Einsatz von bewährten Bibliotheken wie libmicrohttpd, libevent_http oder fastcgi auszugehen.
    • Diesen Warnungen stimme ich sehr zu. Dann frage ich mich allerdings, wie man überhaupt einen sicheren HTTP-Server in C bauen kann. Das wäre wirklich Stoff für ein interessantes Buch. Es wäre spannend, wenn jedes Kapitel Schwachstellen aufgreifen und einen strukturierten Weg hin zu einer ausgereiften HTTP-Bibliothek behandeln würde.
    • Tatsächlich wird dieses Projekt wohl nie in einer Produktionsumgebung eingesetzt werden, aber falls jemand auf diese Idee kommen sollte, würde ich dringend davon abraten.
  • Ungefragtes Feedback: Ich denke, das appRoute-Makro macht Typen und Signaturen unklar und führt unnötige Indirektion ein. Es wäre vermutlich besser, es zu entfernen. Außerdem bündelt der Typ AppContext in Wirklichkeit Funktionen von App + HTTP-Request + DB usw., daher wäre RequestContext oder ControllerContext wohl passender. Davon abgesehen habe ich wie die anderen die Sauberkeit des Codes bewundert; wirklich eine tolle Leistung.
  • Das zeigt, wie viel sich durch den Einsatz von Makros erreichen lässt. Tatsächlich nutzen moderne Web-Frameworks auch aktiv komplexe Werkzeuge wie Metaprogramming der jeweiligen Sprache. Ich lobe sehr, dass das selbst gebaut wurde; es ist harte Arbeit, aber definitiv auch eine unterhaltsame. Es gibt auch die Frage „Warum hast du das gebaut?“, aber ich denke nicht, dass dafür unbedingt ein Grund nötig ist. Man genießt schlicht die Entwicklung an sich.
    • Vielen Dank, und ich stimme vollkommen zu.
  • Ich hoffe, dass Hardware-Hersteller dieses Projekt übernehmen, damit die Qualität ihrer Web-Administrationsseiten etwas besser wird.
  • Es überrascht mich, dass es trotz eines Projekts mit guter Idee und sorgfältiger Umsetzung so viele negative Reaktionen gibt. Die Fähigkeiten, die Ashton diesmal aufgebaut hat, sind ein wertvoller Besitz, der auch künftig nicht verloren gehen wird.
    • Ich bin wirklich dankbar, dass Sie es so beurteilen.