A fast, minimal, batteries-included web server. Auto HTTPS, multi-protocol, and expressive routing -- all in one binary.
import jet app = jet.new() app.get "/" do |ctx| ctx.json { message: "Hello from Koder Jet!" } end app.listen 3000
Koder Jet ships with production-ready features out of the box. No plugins to install, no dependencies to manage.
Automatic TLS certificates via ACME. Zero-config HTTPS with automatic renewal and OCSP stapling.
Full multi-protocol support including QUIC-based HTTP/3 for ultra-low latency connections.
Composable middleware stack with before/after hooks, error recovery, CORS, rate limiting, and auth.
Built-in reverse proxy with round-robin, least-connections, and weighted load balancing strategies.
First-class WebSocket and Server-Sent Events support with automatic upgrade negotiation.
High-performance radix tree routing with O(k) lookups, parameterized paths, and wildcards.
Native gRPC server and client with protobuf support, streaming, and automatic service reflection.
Automatically generates OpenAPI 3.1 specs from your route definitions. Swagger UI included.
Built-in template engine with layouts, partials, and hot-reload in development mode.
In-memory and Redis-backed response caching with stale-while-revalidate and cache tags.
Built-in /metrics endpoint with request latency histograms, status codes, and custom counters.
Koder Lang's Ruby-like syntax makes route definitions feel natural. Write less, serve more.
import jet import jet/middleware app = jet.new() # Global middleware app.use middleware.logger app.use middleware.cors origin: "*" app.use middleware.rate_limit 100, "1m" # Route group with auth app.group "/api/v1" do use middleware.jwt_auth secret: env("JWT_SECRET") get "/users" do |ctx| users = User.all ctx.json users end post "/users" do |ctx| user = ctx.body_as User user.save! ctx.status(201).json user end get "/users/:id" do |ctx| user = User.find ctx.param("id") ctx.json user end end app.listen 3000
import jet app = jet.new() # WebSocket chat app.ws "/chat" do |ws| ws.on_message do |msg| ws.broadcast msg end ws.on_close do puts "Client disconnected" end end # Server-Sent Events app.sse "/events" do |stream| loop do data = fetch_updates stream.send event: "update", data: data.to_json sleep 1 end end # Reverse proxy with load balancing app.proxy "/api/*" do upstream "http://10.0.0.1:8080", weight: 3 upstream "http://10.0.0.2:8080", weight: 1 strategy :weighted health_check "/health", interval: "10s" end app.listen 3000
A feature-by-feature comparison against popular web servers and frameworks.
| Feature | Koder Jet | Nginx | Caddy | Traefik | Express | Actix Web |
|---|---|---|---|---|---|---|
| Language | Koder Lang | C | Go | Go | JavaScript | Rust |
| Auto HTTPS | Yes | No | Yes | Yes | No | No |
| HTTP/3 (QUIC) | Yes | Exp. | Yes | Yes | No | No |
| Reverse Proxy | Yes | Yes | Yes | Yes | Plugin | No |
| Load Balancer | Yes | Yes | Yes | Yes | No | No |
| WebSocket | Yes | Proxy | Proxy | Proxy | Plugin | Yes |
| gRPC | Yes | Proxy | Proxy | Proxy | No | Plugin |
| OpenAPI Gen | Yes | No | No | Yes | Plugin | No |
| Template Engine | Built-in | No | Yes | No | Plugin | Plugin |
| Response Cache | Built-in | Yes | No | No | No | No |
| Prometheus Metrics | Built-in | Module | Yes | Yes | Plugin | Plugin |
| Single Binary | Yes | No | Yes | Yes | No | Yes |
| Config Format | TOML + Code | Custom | Caddyfile/JSON | TOML/YAML | Code | Code |
kjet commandManage your server, inspect routes, and benchmark performance from the terminal.
$ kjet serve --port 3000 --tls auto Koder Jet v1.0.0 Listening on https://0.0.0.0:3000 TLS certificate obtained for jet.koder.dev HTTP/3 (QUIC) enabled Press Ctrl+C to stop
$ kjet routes METHOD PATH HANDLER MIDDLEWARE GET / index logger, cors GET /api/v1/users users#index logger, cors, jwt POST /api/v1/users users#create logger, cors, jwt GET /api/v1/users/:id users#show logger, cors, jwt WS /chat chat#connect logger SSE /events events#stream logger PROXY /api/* upstream[2] logger
$ kjet bench http://localhost:3000 -c 200 -d 10s Benchmarking http://localhost:3000... 200 connections, 10s duration Requests/sec: 148,392 Avg latency: 1.34ms P99 latency: 4.21ms Transfer/sec: 42.8 MB Total requests: 1,483,920 Errors: 0 (0.00%)
Configure your server declaratively with TOML, or programmatically in Koder Lang. Both approaches work together.
# Koder Jet configuration [server] host = "0.0.0.0" port = 3000 workers = "auto" # matches CPU cores [tls] auto = true domains = ["jet.koder.dev"] acme_email = "admin@koder.dev" [http3] enabled = true [cache] enabled = true max_size = "256MB" default_ttl = "5m" [metrics] enabled = true path = "/metrics" [logging] level = "info" format = "json"
# jet.toml - reverse proxy mode [server] port = 443 [tls] auto = true [[proxy]] match = "api.example.com" to = [ "http://10.0.0.1:8080", "http://10.0.0.2:8080", ] strategy = "round_robin" health_check = "/health" [[proxy]] match = "app.example.com" to = ["http://localhost:5000"] [[proxy]] match = "grpc.example.com" to = ["h2c://localhost:50051"] protocol = "grpc"
One binary. Zero dependencies. Production-ready in seconds.
Install via the Koder package manager or curl.
$ koder install jet # or via curl $ curl -fsSL https://jet.koder.dev/install.sh | sh