Cesanta

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.

board / eth0 http://0.0.0.0:80
The device dashboard: a navigation row with a live indicator, four metric cards reading temperature 16.5 degrees, CPU load 10 per cent, free memory 26 KB and volume 17.2 decibels, a static temperature and humidity graph and a real-time motor voltage graph
served by the board, not by us
  • 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.

your-product / src
main.c
board.c
drivers/
Makefile
mongoose.h
mongoose.c
/* 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;
}
board / eth0
eth0: down http: no listener Nothing to connect to.
eth0: down mongoose.h: API resolved link: mg_mgr declared, no implementation Add mongoose.c.
The same device dashboard, now running on the board: live status, four metric cards and two graphs

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
The device dashboard at phone width, the metric cards stacked into a single column beneath the navigation

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.

Our mDash illustration: a dotted world map overlaid with connected circular nodes carrying device, home, screen, user and meter icons, linked by thin lines across the continents
  • 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.

BoschDellEpsonFAROGoogleHPHumaxIDEXIntelIngenicoKapschLennoxMicroscanNintendoNovAtelPilzQualcommRedflexSamsungSkySwarcothyssenkruppUbisoft
“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 source

Commercial, 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 quote

Tell 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.