Everything included
Core / framework split, like Node and Express the core exposes one entry point, (http-listen port (lambda (req res) ...)) ; the bundled (igropyr express) layer ( create-app , app-get , send-json! , ...) is optional, and alternative frameworks can be built on the same core
Green processes thousands of lightweight processes scheduled over one OS thread; continuation-based context switching with preemption, so even a CPU-spinning handler cannot freeze the system
Pure message passing spawn / send / receive / link / monitor ; no shared state between processes
Fault tolerant by default a fixed worker pool behind a supervisor: crashed workers are replaced and the task retried (at most 3 times, then the client gets a 500); workers stuck for more than 30 s are killed and replaced; a slow or half-sent request only ever blocks its own reader process
Failure hook (remote retry ring) when retries are exhausted or a stuck worker is killed (killed first, so no execution is in flight), an optional on-failure handler answers a structured JSON fault instead of the plain 500, on the same keep-alive connection — the client resubmits (changed parameters, carried state) and gets a fresh retry round; unset, the plain 500 remains
Conversations (process-per-dialogue) a multi-request dialogue runs as one green process holding live state — even an open database transaction — across rounds; suspend! answers and parks, conversation-resume! continues, and death for any reason (crash, TTL) means guaranteed rollback: a later resume gets gone
Hot code swapping replace the handler (or individual routes) on a live server: the listener, open connections and worker pool stay up, in-flight requests finish on the old code
WebSocket RFC 6455 upgrade on the same port; each socket is its own green process, so server push is just a message send
Streaming responses & SSE chunked response body via res-begin! / res-write! / res-end! ; Server-Sent Events helpers on top
... continue reading