joetjen.net
EN DE
Web-Framework

Webglue

Ein Klebstoff-Framework, kein Monolith — Rings Einfachheit, Phoenix’ Anspruch. Webglue ist ein in Praxis geschriebenes Web-Framework aus kleinen, austauschbaren Bibliotheken mit einem gemeinsamen Vertrag: Ein Request ist eine Map, eine Response ist eine Map, und ein Handler ist eine Funktion von einem zum anderen.

In Entwicklung · v0.4

Die Idee

Clojures Ring ist eher eine Spezifikation als eine Bibliothek: Ein Handler ist eine gewöhnliche Funktion, und Middleware ist eine Funktion, die einen Handler umhüllt. Webglue nimmt dieses Muster und zieht es durch ein ganzes Framework — Routing, HTTP-Server, Sessions, WebSockets, Pub/Sub, Presence und Server-Push — mit der Vollständigkeit von Phoenix oder Laravel als Ziel.

handler    :: Request -> Response
middleware :: Handler -> Handler

Eine Webglue-Anwendung ist eine Auswahl zusammengeklebter Bibliotheken. Das Framework ist die Konvention, nicht der Code.

Grundsätze

  • Kleiner Kern, austauschbare Ränder.
  • Standards zuerst: HTTP/1.1, HTTP/2, RFC-6455-WebSockets, IPv4 und IPv6.
  • Entwurf vor Code: Jede Bibliothek beginnt als Spezifikation.
  • Keine versteckte Magie im heißen Pfad. Komposition sind lesbare Funktionsaufrufe — keine Makros, kein use.
  • Das Frontend ist kein eigenes Ökosystem: Es wird ebenfalls Praxis sein, für den Browser kompiliert.
  • Vollständig beim Release, monolithisch nie.
  • An den etablierten Standard andocken statt ihn neu zu erfinden — Bandit, Ecto, Absinthe, Oban, Swoosh, Redix.

Drei weitere Entscheidungen stehen fest: Markup ist Daten — ein Baum aus gewöhnlichen Praxis-Vektoren und -Maps, niemals Zeichenketten; das Wire-Format ist DXN, mit JSON als Rückfall; Konfiguration ist CASC.

Ein erster Blick

Die Demo-Anwendung ist eine einzige Funktion. Von unten gelesen: Die Reihenfolge des Umhüllens ist die Reihenfolge der Verschachtelung, und nur hier wird sie festgelegt.

webglue_demo/apps/web/src/webglue/demo/web.prax
(defn app
  "The application: one function, request to response."
  [] :spec [-> function]
  (-> (router/handler (routes))
      (db/wrap {:repo webglue.demo.store.memory})
      (wrap-user)
      (static/wrap {:root (assets) :at "/assets"})
      (session/wrap {:store (memory/store)})))

Sprache und Laufzeit

Webglue ist in Praxis geschrieben und läuft heute auf der BEAM: Namespaces werden zu .beam-Modulen, langlebiger Zustand lebt in OTP-Prozessen, und Pub/Sub läuft auf Erlangs pg. Etablierte BEAM-Bibliotheken — Bandit, Plug, WebSock, Redix — kommen über Praxis’ Interop zum Einsatz. Die Frontend-Hälfte ist für Praxis’ Browser-Ziel geplant.

Wo es steht

Version 0.4.0 (29. September 2026) umfasst siebzehn Bibliotheken, alle implementiert und getestet — rund 480 Tests — für den Vertrag, Routing, zwei HTTP-Server, Sessions, statische Dateien, WebSockets, Pub/Sub, Presence, Clustering, Redis, Server-Push, Validierung und eine Nahtstelle zur Datenschicht. Alles ist als experimentell markiert. Bis 1.0 liegt der Fokus auf dem Backend; das Frontend folgt in 2.x.