Skip to content

Build a Web Server

A complete HTTP server in Wyn — under 30 lines.

The Server

wyn
var server = Http.listen(8080)
println("Listening on http://localhost:8080")

while true {
    var req = Http.accept(server)
    var parts = req.split("|")
    var method = parts[0]
    var path = parts[1]

    Log.info(method + " " + path)

    if path == "/" {
        Http.respond(req, 200, "<h1>Hello from Wyn! 🐉</h1>")
    } else if path == "/api/time" {
        var now = "${DateTime.now()}"
        Http.respond(req, 200, "{\"time\": " + now + "}")
    } else {
        Http.respond(req, 404, "Not Found")
    }
}

Run It

sh
wyn run server.wyn

Then visit http://localhost:8080 in your browser.

Add Concurrency

Handle requests in parallel with spawn:

wyn
var server = Http.listen(8080)
println("Listening on :8080")

while true {
    var req = Http.accept(server)
    spawn handle(req)
}

fn handle(req: string) {
    var parts = req.split("|")
    var path = parts[1]
    Log.info("handling " + path)

    if path == "/" {
        Http.respond(req, 200, "Hello!")
    } else {
        Http.respond(req, 404, "Not Found")
    }
}

Each request runs on its own green thread — lightweight coroutines, not OS threads.

Build for Production

sh
wyn build server.wyn --release -o server
./server  # 32KB binary, starts instantly

MIT License