AtlatestRepositorysigil-web
1# sigil-web
2
3Web application framework for [Sigil](https://codeberg.org/sigil/sigil). Provides routing, middleware, static file serving, cookies, and a server-driven UI library for building interactive web applications.
4
5## Usage
6
7### Routing
8
9```scheme
10(import (sigil web routes))
12;; Define routes with pattern matching
13(define app
14 (router
15 (route GET "/" home-handler)
16 (route GET "/users/:id" user-handler)
17 (route POST "/api/login" login-handler)
18 (route ANY "/static/*path" static-handler)))
20;; Extract path parameters in handlers
21(define (user-handler request)
22 (let ((id (path-param request "id")))
23 ...))
24```
26### Middleware
28```scheme
29(import (sigil web middleware))
31;; Compose middleware around a handler
32(define handler
33 (wrap-middleware app
34 (cors-middleware '("*"))
35 (content-type-middleware "text/html")
36 (not-found-middleware)))
38;; Or use the chain style
39(define handler
40 (chain app
41 (with-cors "*")
42 (with-content-type "text/html")
43 (with-not-found)))
44```
46### Static Files
48```scheme
49(import (sigil web static))
51;; Serve files from a directory with MIME type detection
52(define static-handler (make-static-handler "public/"))
53```
55### Cookies
57```scheme
58(import (sigil web cookies))
60;; Read cookies from a request
61(cookie-ref request "session_id")
63;; Set a cookie on a response
64(set-cookie response "session_id" "abc123"
65 '((path . "/") (http-only . #t)))
66```
68### Server-Driven UI
70```scheme
71(import (sigil web ui))
73;; Send SSE events for real-time updates
74(sse-morph target: "#chat" mode: "append"
75 content: `(div (@ (class "msg")) "Hello!"))
77;; Return HTML with merge headers
78(sigil-ui-response target: "#results" mode: "inner"
79 content: `(ul ,@(map render-item items)))
80```
82### Live Development
84```scheme
85(import (sigil web dev))
87(define dev (make-dev-broadcast))
88;; Wire (dev-sse-handler) into your router at /__dev/events
89;; Then trigger browser refresh:
90(dev-reload!)
91```
93## Modules
95- `(sigil web routes)` -- path-based routing with named and splat parameters
96- `(sigil web middleware)` -- composable middleware (CORS, content-type, not-found)
97- `(sigil web static)` -- static file serving with directory traversal protection
98- `(sigil web cookies)` -- cookie parsing and setting
99- `(sigil web ui)` -- server-driven hypermedia (SSE morphing, forms, modals, data tables)
100- `(sigil web dev)` -- live development broadcast and error overlay
102## Dependencies
104- sigil-stdlib
105- sigil-http
106- sigil-sxml
107- sigil-nrepl
109## Build
111```sh
112sigil deps install
113sigil build
114sigil test
115```
117## License
119BSD-3-Clause