Crow is a C++ framework for creating HTTP or Websocket web services. It uses routing similar to Python's Flask which makes it easy to use. It is also extremely fast, beating multiple existing C++ frameworks as well as non-C++ frameworks.
- Easy Routing (similar to Flask).
- Type-safe handlers.
- Blazingly fast (see this benchmark and this benchmark).
- Built in JSON support.
- Mustache based templating library (
crow::mustache). - Header only library (single header file available).
- Middleware support for extensions.
- HTTP/1.1 and Websocket support.
- Multi-part request and response support.
- Uses modern C++ (11/14)
Available here.
Warning
If you are using Crow v0.3, then you have to put
#define CROW_MAINat the top of one and only one source file.
#include "crow.h"
int main()
{
crow::SimpleApp app;
CROW_ROUTE(app, "/")([](){
return "Hello world";
});
app.port(18080).multithreaded().run();
}CROW_ROUTE(app, "/json")
([]{
crow::json::wvalue x({{"message", "Hello, World!"}});
x["message2"] = "Hello, World.. Again!";
return x;
});CROW_ROUTE(app,"/hello/<int>")
([](int count){
if (count > 100)
return crow::response(400);
std::ostringstream os;
os << count << " bottles of beer!";
return crow::response(os.str());
});Handler arguments type check at compile time
// Compile error with message "Handler type is mismatched with URL parameters"
CROW_ROUTE(app,"/another/<int>")
([](int a, int b){
return crow::response(500);
});CROW_ROUTE(app, "/add_json")
.methods("POST"_method)
([](const crow::request& req){
auto x = crow::json::load(req.body);
if (!x)
return crow::response(crow::status::BAD_REQUEST); // same as crow::response(400)
int sum = x["a"].i()+x["b"].i();
std::ostringstream os;
os << sum;