Initial profiling looks promising. Most of the compile time is a fixed cost. The session's Beast/Asio read and write path over tcp_stream, which is the same in every program. A quick prototype that compiles that part once brought hello_server from about 13 s to 6s on my machine. So I'm going to build a proper separately compiled I'm now not sure if header-only must stay the default or not. It will take some time to get right. Good thing that it's weekend and I can get busy with it. I'll report the numbers here when it's done. The handler binding will stay in headers, because it is generated from the user's own function signatures: rest(f, path_arg("id"), json_body_arg()) checks the arguments against the route at compile time, converts each one to the parameter's type, and derives the JSON Schema and OpenAPI description from the same types. That is what lets one plain C++ function serve REST, JSON-RPC and MCP without macros, code generation or hand-written schemas, and it costs almost nothing per route.