Shipped and stable for loopback APIs, middleware kinds, routing, static files, and vpm packaging.
| Area |
v0.2 behavior |
| Concurrency |
Blocking single-threaded accept/handle |
listen_concurrent |
Deprecated — aliases listen until v0.3 worker pool |
listen_async |
Stub — aliases listen until v0.3 event loop |
| Middleware |
Built-in enum kinds only — no custom fn arrays |
| HTTP |
HTTP/1.1, keep-alive when client sends HTTP/1.1 |
| Large bodies |
Chunked encoding for bodies ≥ 1MB (runtime) |
| TLS |
Not supported — terminate at reverse proxy |
| WebSockets |
Not supported |
Workarounds today:
- Run multiple processes behind a load balancer
- Offload static assets and TLS to nginx/Caddy
- Compose handler logic instead of custom middleware functions
| Feature |
Goal |
async fn handlers |
Non-blocking request handlers |
await on I/O |
HTTP read/write without blocking the runtime |
| Event-driven loop |
epoll/kqueue accept loop |
Real listen_async |
Integrated with v0.3 runtime |
| Worker pool |
Real listen_concurrent(workers) |
| Function middleware |
Arbitrary fn middleware chains like Express |
Track language/runtime async work on the main Project roadmap.
| Express |
vow-web-server v0.2.1 |
v0.3 target |
express() |
app() |
same |
app.get/post/put/delete/patch/all |
get, post, …, all |
same |
app.use(mw) |
use_mw(a, kind) — built-in kinds |
custom fn middleware |
app.use('/api', mw) |
use_at(a, prefix, kind) |
custom fn + prefix |
app.use(logger) |
use_log(a) |
same |
express.json() |
use_json(a) |
same + streaming |
app.listen(port) |
listen(a, cap, port) |
listen_async |
res.send(body) |
response.send(body) |
same |
res.json(obj) |
response.json(string) |
same |
res.redirect(url) |
response.redirect(url) |
same |
res.status(n) |
send(n, body) / json(n, body) |
same |
Static express.static |
staticfiles.files_handler |
same |
| Error middleware |
handler returns error responses |
planned |
Router .param() |
request.param |
same |
| Sub-app mount |
app.mount(a, prefix, sub) |
same |
| Express |
vow-web-server |
Notes |
req.body object |
context_value(req) string |
JSON stored as raw string; parse in handler or use vow-body-parser |
req.params object |
param(req, key) per key |
|
next(err) |
halt via middleware kind |
custom error propagation in v0.3 |
| Cluster module |
multi-process external |
no in-process cluster yet |