A small FFI-backed HTTP server for serving static route responses from Bern.
import vendor/http/http
lib/vendor/http - windows/bern_http.dll, macos/libbern_http.dylib, or linux/libbern_http.so. The right one is picked automatically from get_host_machine().
Start a server bound to 0.0.0.0 on the given port; returns a server handle.
server = http_server_start(8080)
Start a server bound to a specific host address.
server = http_server_start_on(8080, "127.0.0.1")
Whether the server is still running.
http_server_running(server) -- Output: true
Stop a running server.
http_server_stop(server) -- Output: true
Set the fallback response for any unmatched route.
http_server_set_default(server, 404, "text/plain; charset=utf-8", "Not found") -- Output: true
The general route builder - full control over method, status, and content type.
http_server_add_route(server, "GET", "/teapot", 418, "text/plain", "I'm a teapot") -- Output: true
Add a GET route returning 200 with a plain-text body.
http_server_get(server, "/", "hello from bern http") -- Output: true
Add a GET route returning HTML.
http_server_add_route_html(server, "/page", "Bern
") -- Output: true
Add a GET route returning JSON.
http_server_add_route_json(server, "/health", "{\"ok\":true}")
-- Output: true
Run a single poll tick, waiting up to timeout_ms for activity. Use it to drive your own event loop.
http_server_poll(server, 50)
Keep polling for as long as the server is running - the simplest way to "just serve".
http_server_serve_forever(server, 50)
Convenience constants for common HTTP status codes:
| Constant | Value |
|---|---|
HTTP_STATUS_OK | 200 |
HTTP_STATUS_CREATED | 201 |
HTTP_STATUS_NO_CONTENT | 204 |
HTTP_STATUS_BAD_REQUEST | 400 |
HTTP_STATUS_NOT_FOUND | 404 |
HTTP_STATUS_INTERNAL_ERROR | 500 |
A complete tiny server: register a few routes of different content types, set a fallback, then serve. This combines almost every function in the module:
import vendor/http/http server = http_server_start(8080) http_server_get(server, "/", "hello from bern http") http_server_add_route_html(server, "/page", "Bern
It works!
") http_server_add_route_json(server, "/health", "{\"ok\":true}") http_server_add_route(server, "/teapot", 418, "text/plain", "I'm a teapot") http_server_set_default(server, HTTP_STATUS_NOT_FOUND, "text/plain", "Not found") -- block and handle requests until the server stops http_server_serve_forever(server, 50)
If you need to do other work between requests, drive the loop yourself with http_server_poll:
import vendor/http/http
server = http_server_start(8080)
http_server_get(server, "/", "tick")
loop http_server_running(server) do
http_server_poll(server, 100)
-- ... run background tasks here ...
end