AtlatestRenderedmarkdown
Readme

sigil-web

Web application framework for Sigil. Provides routing, middleware, static file serving, cookies, and a server-driven UI library for building interactive web applications.

Usage

Routing

(import (sigil web routes))

;; Define routes with pattern matching
(define app
  (router
    (route GET "/" home-handler)
    (route GET "/users/:id" user-handler)
    (route POST "/api/login" login-handler)
    (route ANY "/static/*path" static-handler)))

;; Extract path parameters in handlers
(define (user-handler request)
  (let ((id (path-param request "id")))
    ...))

Middleware

(import (sigil web middleware))

;; Compose middleware around a handler
(define handler
  (wrap-middleware app
    (cors-middleware '("*"))
    (content-type-middleware "text/html")
    (not-found-middleware)))

;; Or use the chain style
(define handler
  (chain app
    (with-cors "*")
    (with-content-type "text/html")
    (with-not-found)))

Static Files

(import (sigil web static))

;; Serve files from a directory with MIME type detection
(define static-handler (make-static-handler "public/"))

Cookies

(import (sigil web cookies))

;; Read cookies from a request
(cookie-ref request "session_id")

;; Set a cookie on a response
(set-cookie response "session_id" "abc123"
            '((path . "/") (http-only . #t)))

Server-Driven UI

(import (sigil web ui))

;; Send SSE events for real-time updates
(sse-morph target: "#chat" mode: "append"
           content: `(div (@ (class "msg")) "Hello!"))

;; Return HTML with merge headers
(sigil-ui-response target: "#results" mode: "inner"
                   content: `(ul ,@(map render-item items)))

Live Development

(import (sigil web dev))

(define dev (make-dev-broadcast))
;; Wire (dev-sse-handler) into your router at /__dev/events
;; Then trigger browser refresh:
(dev-reload!)

Modules

  • (sigil web routes) -- path-based routing with named and splat parameters
  • (sigil web middleware) -- composable middleware (CORS, content-type, not-found)
  • (sigil web static) -- static file serving with directory traversal protection
  • (sigil web cookies) -- cookie parsing and setting
  • (sigil web ui) -- server-driven hypermedia (SSE morphing, forms, modals, data tables)
  • (sigil web dev) -- live development broadcast and error overlay

Dependencies

  • sigil-stdlib
  • sigil-http
  • sigil-sxml
  • sigil-nrepl

Build

sigil deps install
sigil build
sigil test

License

BSD-3-Clause