Your device serves this.From two files.
Copy mongoose.h and mongoose.c into your source tree. Your firmware answers HTTP, speaks WebSocket and MQTT, holds a TLS 1.3 connection, updates itself over the air and serves the dashboard beside this. There is no external TCP/IP stack to bring in and no TLS library to link.
- On the market since 2004
- Hundreds of millions of devices
- Used by NASA on the ISS
- Built in Dublin
The whole networking layer, in your build.
One library, written and maintained by us since 2004, covering what an embedded product actually needs on a network.
HTTP, WebSocket and MQTT
An embedded HTTP, WebSocket and MQTT library for C and C++, which is what most of the hundreds of millions of devices in the field are using us for.
TLS 1.3, ours or yours
We implement a built-in TLS 1.3 stack. If your certification path already depends on OpenSSL or mbedTLS, use those instead and keep the same API.
Firmware over the air
Upload a .bin from the dashboard, or point the device at a URL and let it check on an interval you set. A hung update is re-pushed rather than returned.
A dashboard, not a demo
Login and access levels, live status, real-time graphs, settings, file upload and device logs, bound to your C code through a simple dashboard API.
Drop the two files into a real project.
Most networking stacks arrive as a dependency tree, a build system and an account to create. Ours arrive as mongoose.h and mongoose.c, which you can read in an afternoon. Add them to the tree below and watch the board beside it come up.
/* main.c */ #include "mongoose.h" static void ev_handler(struct mg_connection *c, int ev, void *ev_data) { if (ev == MG_EV_HTTP_MSG) { struct mg_http_serve_opts opts = {.root_dir = "."}; mg_http_serve_dir(c, ev_data, &opts); } } int main(void) { board_init(); /* your product, offline */ for (;;) {} struct mg_mgr mgr; mg_mgr_init(&mgr); mg_http_listen(&mgr, "http://0.0.0.0:80", ev_handler, NULL); for (;;) mg_mgr_poll(&mgr, 1000); return 0; }
mongoose / add to project
Use the arrow keys if you prefer. The code beside it is the HTTP server example from our own documentation, unedited.
Our own TCP/IP stack
Enable it and you need no external stack at all. If you already run BSD sockets, lwIP or FreeRTOS-Plus-TCP, we sit on top of that instead.
Our own TLS 1.3 stack
Written by us and shipped in the same two files. OpenSSL and mbedTLS are supported if you would rather use them.
Nothing to package
No package manager, no submodule, no generated build tree. Two files in your repository, under your review, in your existing build.
The same dashboard, on a phone.
Your installer is standing at a cabinet with a handset, not a laptop. The dashboard your board serves reflows to the screen in front of them, with the same controls and the same live values.
- One UI to build and one to maintain
- Served from the device, so it works on a closed network
- No app to publish, review or update

Draw the dashboard. Take the C.
Wizard is our no-code visual tool for adding networking to embedded devices. Lay out the pages, the UI elements and the REST endpoints, pick your target architecture, then generate the C and C++ and keep it. The output is source you own, in the same two-file library, not a runtime you rent.
When it is a fleet, not a device.
mDash is our IoT cloud, for the estate you are already shipping. The library on the device does not change; this is where the devices report in, get updated and get managed.
- Device management
- Remote control
- OTA updates
- Access control
- Built-in database
- REST API
- Web and mobile app
- Hosted by us
We have sold to hundreds of companies, from small enterprises to Fortune 500 giants.
“We have thousands of devices connected to mDash. It is a very reliable system that allows us to troubleshoot, monitor and update our users’ devices whenever we need.”Jim Rhodes, Founder and Director, Those Ltd, UK
“mDash has proven to be stable and gets the job done. Its features, such as OTA and shadow, saved us a lot of custom development and shortened product time to market.”Thijs Olthof, Founder, Innovation in Motion B.V, Netherlands
Two ways to use it, and no surprise in either.
Open source, under GPLv2
Evaluate it, prototype with it and learn it under GPLv2. The full library, the dashboard and the examples, with no gate in front of them.
Read the sourceCommercial, for proprietary firmware at scale
Ship closed firmware and keep your source your own, with developer support from the people who wrote the library. Tell us the product and the volume and we will price it.
Request a quoteTell us what you are building.
Questions about the library, licensing, support or the dashboard go straight to the engineers who maintain it. We are in Dublin and we answer in English.
- Office13 Edward Place, Bloomfield Ave, Dublin 4, Ireland
- Phone+353 1 592 5476
- Emailsupport@cesanta.com
- Documentationmongoose.ws/documentation