Cameleeringsimoom

simoom FAQ

Short answers about simoom: no async runtime, zero dependencies, HTTP/3 without quinn, small builds, what it doesn't do, and how ready it is.

Common questions

Is there a Rust HTTP server without tokio?

Yes. simoom has no async runtime at all. It runs its own event loop per CPU core on epoll, io_uring, IOCP or kqueue, and a service is a plain function. Slow work goes to a bounded offload pool (simoom::blocking) or to your own threads (Reply::defer). Streaming, server-sent events and WebSocket all work without async. See Slow work.

Is there a Rust web server with zero dependencies?

Yes. simoom's crates have no crates.io dependencies, not even for tests. Calls into the operating system go through extern declarations in one crate, simoom-sys, and SIMD goes through core::arch. TLS, QUIC, HTTP/2, HTTP/3 and the compression codecs are all written in the repository.

Is simoom std-only or no_std?

std-only. It uses the Rust standard library and nothing else, so it needs an operating system: Linux, Windows or macOS. It doesn't run on bare-metal microcontrollers without an OS.

Can I serve HTTP/3 from Rust without quinn, rustls or OpenSSL?

Yes. simoom implements QUIC v1, HTTP/3, QPACK and TLS 1.3 itself, and HTTP/3 is a cargo feature of the same server that serves HTTP/1.1 and HTTP/2. It passes 54 of 58 supported pairs in the QUIC Interop Runner; the four failures are 0-RTT (refused by design) and ECN (not implemented). See HTTP/2 and HTTP/3.

What is the smallest Rust HTTP server for AWS Lambda or serverless?

An HTTP/1.1-only simoom build adds about 215 KB to the binary. In benchmark campaign 4 (2026-11-12), simoom's default build gave its first answer 0.94 ms after the process started, the fastest of 21 servers (hyper: 1.48 ms), and used 901 KB of memory at rest. Build with default-features = false, features = ["http1"]. See Features and size.

How do I embed an HTTP server in a Rust app?

Add simoom, build a server with Server::builder(), give it a service or a Router, and call start(). It runs on its own threads and returns a handle you can stop() and join(), so the rest of your program carries on. See Getting started.

Can I run a WebSocket server in a Rust CLI or desktop app?

Yes. Start the server on 127.0.0.1:0, print or open the chosen port, and push updates with a WebSocketHandler or server-sent events. The server starts in about a millisecond and adds no async runtime to your program. See WebSocket.

Does simoom run on a Raspberry Pi or other ARM boards?

It is built for small devices, and the ARM SIMD and crypto code paths compile. They are compile-checked only so far: the test suite runs on Windows and Linux on x86-64, and the benchmarks ran on x86-64. Reports from ARM hardware are welcome.

How does simoom compare with hyper?

In benchmark campaign 4 (2026-11-12), on the same 4-vCPU cloud machine, simoom answered 24% more status requests per second than hyper with 99% within 1 ms at 256 clients, and used 26% less CPU per request; hyper's process used less memory at rest (1,374 KB against 1,769 KB). The numbers and the method are on the benchmarks page. hyper is far more mature, has years of production use and a large ecosystem (axum is built on it). simoom has no dependencies, a smaller footprint, its own TLS and HTTP/3. Choose by what matters more to you.

Should I use simoom or axum?

axum gives you extractors, middleware and a large ecosystem on top of tokio. simoom gives you a small synchronous API, a router and optional helpers, with no runtime and no dependencies. If you want the ecosystem, use axum; if size, start-up, dependencies or HTTP/3 matter more, try simoom.

Can simoom serve static files or act as a reverse proxy?

No. simoom is an engine you build into a program; it has no static-file server, no reverse proxy and no configuration file. Use nginx, Caddy or h2o for those jobs. You can still send a file from a handler yourself (Streaming).

Is simoom production ready?

It is version 0.1.0, the first release, and the API can still change. It has been tested hard: h2spec 146/146, the QUIC Interop Runner, HTTP Garden with no desyncs, testssl.sh, fuzzing of every parser, and a test suite of several hundred tests on Windows and Linux. It has not had an independent security audit, macOS and ARM are compile-checked only, and the benchmarks ran on 4-vCPU machines. It is the HTTP server of Cameleer. Decide with those facts; SECURITY.md has the details.

Which platforms does simoom support?

Linux (epoll and io_uring), Windows (IOCP) and macOS (kqueue). The test suite runs on Windows and Linux; macOS is compile-checked only. Rust 1.89 or newer.

Does simoom support async handlers?

No, on purpose. A handler that needs to wait takes a Responder with reply.defer() and answers from any thread, which also works with a tokio task if your program has one. See Slow work.

Does simoom have an HTTP client?

Yes, the separate simoom-client crate: HTTP/1.1, HTTP/2, HTTP/3 and WebSocket, blocking, with pooling, TLS and redirects. See The client.

Does simoom support TLS 1.2?

Not on simoom servers: they speak TLS 1.3 only. The simoom-tls crate has TLS 1.2 behind a feature for other uses. See TLS.

Why is it called simoom?

A simoom is a hot, fast wind that crosses the desert. It belongs to the same caravan as Cameleer and the Cameleering projects.

What licence is simoom under?

Apache License 2.0.

Edit this page on GitHub