Cesanta

Mongoose networking library / Dublin, since 2004

Your product on the network, in two files.

Copy mongoose.c and mongoose.h into your source tree. Your device answers HTTP, speaks WebSocket and MQTT, holds a TLS 1.3 connection, updates its own firmware and serves a dashboard your customers open in a browser. There is nothing else to install and nothing else to link.

  • Since 2004Our story starts in 2004, when Mongoose development began.
  • Hundreds of millions of devicesDeployed worldwide in production.
  • Aboard the ISSUsed by NASA on the International Space Station.
  • Bosch, Samsung, Google, IntelAmong the companies we have licensed to.
Our device dashboard running in a browser, showing temperature, CPU load, free memory and volume cards above a static graph and a real-time motor voltage graph, with LED and action controls beneath
served from the device itself

The integration

Two files, and your firmware is on the network.

Most networking stacks arrive as a dependency tree, a build system and an account to create. Ours arrives as mongoose.h and mongoose.c. Add them below and watch what happens to the board on the right.

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.

Full width view of our device dashboard: navigation across the top with a live indicator, temperature 16.5 degrees, CPU load 10 per cent, free memory 26 KB and volume 17.2 decibels, a static temperature and humidity graph, a real-time motor voltage graph, and LED and action button controls

Captured from the dashboard running right now at mongoose.ws/device-dashboard

What arrives with them

The whole networking layer, in your build.

01

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.

02

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.

03

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.

04

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.

On whatever they open it with

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

Mongoose Wizard

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.

Who ships it

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

Licensing

Two ways to use it, and no surprise in either.

GPLV2

Open source

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

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

Talk to us

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.