--- Oat++ Oat++ is a modern Web Framework for C++. It's fully loaded and contains all the necessary components for effective production-level development. It's also light and has a smallβ¦

---
Oat++
Oat++ is a modern Web Framework for C++.
It's fully loaded and contains all the necessary components for effective production-level development.
It's also light and has a small memory footprint.
News
- β οΈ Attention! Oat++ main repo is bumping its version to 1.4.0. While 1.4.0 is IN DEVELOPMENT use
1.3.0-latesttag. - Follow the changelog for news and features in version
1.4.0. - Consider supporting Oat++ via the GitHub sponsors page.
New ORM integrations:
Start
- Get Started
- Build For Unix/Linux
- Build For Windows
- [Examples](#examples)
Support the Project
Maintaining and developing this project requires significant time and resources. If you enjoy using it and want to support its continued development, please consider supporting us through GitHub Sponsors.Every contribution, big or small, helps us keep improving and maintaining the project.
Thank you for your support!
About
- Website
- Supported Platforms
- Latest Benchmarks: 5 Million WebSockets
- [Contributing to Oat++](CONTRIBUTING.md)
Quick Overview
Shortcuts:
- Oat++ High Level Overview - Get a quick overview of Oat++ features.
- Example Project - A complete example of a "CRUD" service (UserService) built with Oat++. REST + Swagger-UI + SQLite.
Build Powerful API And Document It With Swagger-UI
See ApiController for more details.
cpp
ENDPOINT_INFO(getUserById) {
info->summary = "Get one User by userId";
info->addResponse>(Status::CODE_200, "application/json");
info->addResponse>(Status::CODE_404, "application/json");
info->addResponse>(Status::CODE_500, "application/json");
info->pathParams["userId"].description = "User Identifier";
}
ENDPOINT("GET", "users/{userId}", getUserById,
PATH(Int32, userId))
{
return createDtoResponse(Status::CODE_200, m_userService.getUserById(userId));
}
Access Databases And Keep Your Data Consistent
See Oat++ ORM for more details.
cpp
QUERY(createUser,
"INSERT INTO users (username, email, role) VALUES (:username, :email, :role);",
PARAM(oatpp::String, username),
PARAM(oatpp::String, email),
PARAM(oatpp::Enum::AsString, role))
Join Our Community
- Gitter - Talk to Oat++ developers and to other Oat++ users.
- Twitter - Follow Oat++ on Twitter.
- Reddit - Follow Oat++ subreddit.
- StackOverflow (new) - Post a Question.
Examples
REST-API
- REST Service - A complete example of a "CRUD" service (UserService) built with Oat++. REST + Swagger-UI + SQLite.
- REST Client - Example project of how-to use Retrofit-like client wrapper (ApiClient) and how it works.
WebSocket
- Can Chat - Feature-complete rooms-based chat for tens of thousands of users. Client plus Server.
- WebSocket - Collection of oatpp WebSocket examples.
- YUV Websocket Stream - Example project how-to create a YUV image stream from a V4L device (i.E. Webcam) using websockets.
Databases
- SQLite - A complete example of a "CRUD" service. REST + Swagger-UI + SQLite.
- PostgreSQL - Example of a production-grade entity service storing information in PostgreSQL. With Swagger-UI and configuration profiles.
- MongoDB - Example project how to work with MongoDB using oatpp-mongo mondule. The project is a web-service with basic CRUD and Swagger-UI.
IoT
- Example-IoT-Hue - Example project how-to create a Philips Hue compatible REST-API that is discovered and controllable by Hue compatible Smart-Home devices like Amazon Alexa or Google Echo.
Streaming
- HTTP Live Streaming Server - Example project on how to build an HLS-streaming server using Oat++ asynchronous API.
- YUV Websocket Stream - Example project how-to create a YUV image stream from a V4L device (i.E. Webcam) using websockets.
TLS
- TLS With Libressl - Example project how-to setup secure connection and serve via HTTPS.
Microservices
- Consul Integration - Example project on how to use oatpp::consul::Client. Consul integration.
- Microservices - Example project on how to build microservices with Oat++,
Asynchronous API
- Async Service - Example project on how to use asynchronous API to handle a large number of simultaneous connections.
Frequently Asked Questions
Q: "Oat++" name?
- "Oat" is something light, organic, and green. It can be easily cooked and consumed with no effort.
- "++" gives a hint that it is "something" for C++.
Q: What is the main area of Oat++ application?
Oat++ is used for many different purposes, from building REST APIs that run on embedded devices to
building microservices and highly-loaded cloud applications.
But the majority of use cases appears to be in IoT and Robotics.
Q: How portable is Oat++?
Theoretically, Oat++ can be easily ported everywhere where you have threads and network stack.
With an additional comparably small effort, it can be ported almost everywhere depending on how
much you strip it and what would be the final binary size.
See supported platforms for additional info.
Q: What is the size of a minimal Oat++ application?
About 1Mb, depending on C/C++ std-lib and oatpp version.
Q: Which Oat++ API to choose, Simple or Async?
Always choose Simple API wherever possible. Simple API is more developed and makes the code cleaner.
Async API is designed for small, specific tasks that run at high concurrency levels ex.:
- Serving file downloads to a large number of concurrent users (1K users and more).
- Streaming to a large number of clients (1K or more).
- Websocket Chat servers.
For all other purposes use simple API.
Members
-
oatpp β PINNED
π±Light and powerful C++ web framework for highly scalable and resource-efficient web application. It's zero-dependency and easy-portable.
C++ β 8.6k 9mo agoExplain β -
benchmark-websocket β PINNED
Websocket Client and Server for benchmarks with Millions of concurrent connections.
C++ β 104 2y agoExplain β -
oatpp-swagger β PINNED
OpenApi 3.0.0 docs + Swagger UI for oatpp services
C++ β 107 1y agoExplain β -
oatpp-examples β PINNED
List of example projects of how to use oat++ framework
C++ β 186 6y agoExplain β -
oatpp-websocket β PINNED
oatpp-websocket submodule.
C++ β 95 2y agoExplain β -
oatpp-consul β PINNED
oatpp client for consul
C++ β 40 2y agoExplain β -
example-crud
A complete example of a "CRUD" service (UserService) built with Oat++.
C++ β 126 1y agoExplain β -
oatpp-starter
Oatpp simple-API starter project
C++ β 79 2y agoExplain β -
example-hls-media-stream
Example project how-to build HLS-streaming server using oat++ Async-API.
C++ β 76 1y agoExplain β -
example-websocket
Collection of oatpp WebSocket examples
C++ β 60 1y agoExplain β -
oatpp-mcp
Anthropicβs Model Context Protocol implementation for Oat++
C++ β 50 1y agoExplain β -
example-postgresql
A complete example of a "CRUD" service (UserService) built with Oat++ and using oatpp ORM with PostgreSQL.
C++ β 41 2y agoExplain β -
example-api-client
Example project how-to use oatpp ApiClient and how it works
C++ β 27 2y agoExplain β -
oatpp-sqlite
SQLite adapter for oatpp ORM.
C β 27 2y agoExplain β -
oatpp-postgresql
PostgreSQL adapter for oatpp ORM.
C++ β 23 1y agoExplain β -
oatpp-starter-async
oatpp Async-API starter project.
C++ β 23 2y agoExplain β -
example-microservices
Example project how to do microservices using Oat++. Different build configs and monolithization.
C++ β 22 2y agoExplain β -
example-iot-hue-ssdp
Oat++ Example to emulate a Hue bridge using SSDP and HTTP
C++ β 20 2y agoExplain β -
example-async-api
Example project how-to use oatpp asynchronous API.
C++ β 20 2y agoExplain β -
oatpp-openssl
OpenSSL adaptor for Oat++ applications
C++ β 18 2y agoExplain β -
website
oatpp.io public website
C++ β 15 3y agoExplain β -
example-libressl
Example project how-to use oatpp-libressl submodule. HTTPS async server.
C++ β 14 2y agoExplain β -
example-yuv-websocket-stream
Oat++ example on how to stream raw YUV images from V4L2 via websockets to an HTML5 canvas
C++ β 13 2y agoExplain β -
helicopter
WebSocket server for multiplayer games
C++ β 12 3y agoExplain β -
example-jwt
A complete example of a CRUD service with API secured with JSON Web Token (JWT)
C++ β 12 3y agoExplain β -
oatpp-curl
RequestExecutor for oatpp's ApiClient based on libcurl. Supports both Sync and Async APIs.
C++ β 12 2y agoExplain β -
example-mongodb
Example project how to work with MongoDB
C++ β 11 2y agoExplain β -
example-server-stop
Oatpp simple-API starter project (threaded)
C++ β 9 4y agoExplain β -
oatpp-protobuf
Use protobuf messages as regular oatpp DTOs
C++ β 9 3y agoExplain β -
oatpp-mbedtls
Client/Server Secure ConnectionProvider for oatpp applications. Based on MbedTLS.
C++ β 9 2y agoExplain β -
oatpp-mongo
Oat++ native BSON + MongoDB driver implementation based on Oat++ object-mapping sub-framework.
C++ β 9 2y agoExplain β -
oatpp-starter-module
starter project for oatpp module
CMake β 8 2y agoExplain β -
oatpp-libressl
oatpp secure ConnectionProvider based on libressl
C++ β 7 2y agoExplain β -
benchmark
oatpp performance benchmark vs other frameworks
C++ β 6 6y agoExplain β -
oatpp-zlib
Module oatpp-zlib provides functionality for compressing/decompressing content with deflate and gzip. Supports both "Simple" and "Async" oatpp APIs.
C++ β 6 2y agoExplain β -
oatpp-openwrt-feed
Oat++ for OpenWRT
Makefile β 5 6y agoExplain β -
funnel-proxy
Transparent multiplexing proxy
C++ β 5 6y agoExplain β -
oatpp-kafka
oatpp client for Apache Kafka
C++ β 5 7y agoExplain β -
oatpp-bob
Object-Mapper for binary serialization/deserialization
C++ β 4 2y agoExplain β -
oatpp-ssdp
Oat++ extension module to work with SSDP protocol.
C++ β 4 2y agoExplain β -
example-consul
Example project how-to use oatpp-consul integration module.
C++ β 3 2y agoExplain β -
oatpp-nixos-feed
Oat++ for NixOS
β 3 6y agoExplain β -
oatpp-xcompile
Deeper look into (cross-)compiling the Oat++ library.
β 2 6y agoExplain β -
oatpp-dtoql
No description.
C++ β 2 6y agoExplain β -
oatpp-xml
Object-Mapper for XML serialization/deserialization
C++ β 2 2y agoExplain β -
meta-oatpp
Yocto meta-layer for Oat++
BitBake β 2 2y agoExplain β -
dockerfiles
helper Dockerfiles for oatpp ops-needs
Dockerfile β 2 6y agoExplain β -
oatpp-wolfssl
TLS adaptor for wolfSSL
C++ β 2 3y agoExplain β -
oatpp-boringssl
BoringSSL adaptor for Oat++ applications.
β 1 6y agoExplain β -
openapi-generator β
OpenAPI Generator allows generation of API client libraries (SDK generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3)
β 1 5y agoExplain β
No repos match these filters.