Minnow Server (Embedded REST, HTTPS, & WebSocket Server)

Embedded HTTPS & WebSocket Server

Minnow Server, a super small and fast embedded HTTPS (secure) WebSocket server, lets small microcontrollers with no external memory act as real-time web servers. The super small and secure Minnow Server is ideal for devices that are too small for standard web applications or our Barracuda Embedded Web Server.

License:

The Minnow Server is available under either an open source license or commercial license. The Minnow Server is also included as a free optional component in the SharkSSL package. The open source licensed version is available on Github.

Designed for Microcontrollers:

The Minnow Server is designed for memory constrained microcontrollers such as Cortex M3. We recommend using the Embedded App Server for larger embedded systems.

How does it work?

Minnow Server incorporates the HTML5 WebSocket specification, letting JavaScript applications open a persistent, bidirectional, full-duplex and asynchronous communication channel with the embedded device. The Minnow Server is specifically designed to facilitate the use of modern Single Page Applications (SPA) for device management and can be used with modern frameworks such as AngularJS, ReactJS, and Vue.js. See the video below for details.

Real Time WebSockets & HTML5 User Interface

The Minnow Server is ideal for most modern microcontroller-based systems, letting you web-enable even the tiniest device.

Web applications for Minnow Server are designed in JavaScript and can load on demand from any of the following:

  • the device (flash memory)
  • the browser's local file system
  • directly from a browser, such as a Chrome browser app
  • a cloud server

You decide where to store the web presentation logic by selecting one or all of the above options. Of course, the benefit of storing the web presentation logic off device is that it saves considerable space on the device and lets you easily modify the application without upgrading the firmware.

Size Matters

When we say size, you are probably thinking of the Minnow Server C code, and yes, the server's code size is small; however, we are referring to the web application you will design. Did you know that modern web applications can easily be megabytes in size, especially if using modern tools such as Angular and React? Our Minnow Server design book shows how to design a compact fully fledged Single Page Application suitable for microcontrollers. In addition, the Minnow Server stores compressed data and serves the data to the browser without having to uncompress the data, further reducing the web application size by one-third. Both the Minnow Server and our Barracuda App Server store web applications compressed, embedded in the firmware, on a separate memory partition, or on a file system.

Compressing the www web folder

Minnow Server: One Of Three WebSocket Servers

The Minnow Server is one of three WebSocket server implementations provided by Real Time Logic.

  • The Minnow Server is designed for resource constrained devices such as a Cortex-M0 and ESP8266. A Minnow Server application must be designed as an SPA and preferably use the SPA amalgamator service for converting the SPA assets into a C array. The SharkSSL ESP8266 IDE and the SharkSSL ESP32 IDE include a ready to compile and run Minnow Server example.
  • The Barracuda Web Server's WebSocket Server enables hybrid server-side/client-side web applications to communicate using both HTTP(S) and (secure) WebSockets. The SharkSSL ESP32 IDE includes a ready to compile and run Barracuda Web Server WebSocket example.
  • The Barracuda App Server's WebSocket Server provides the easiest to use solution, in which server side business logic can be designed in the easy to learn Lua scripting language. With the Barracuda App Server, much of the device's high level logic can be implemented in Lua. Just as Lua is popular with rapid game development, now embedded systems can benefit from the same. The SharkSSL ESP32 IDE includes a ready to compile and run Barracuda App Server project called the LSP Application Manager, which can be used as the foundation for your development. See the online tutorial for an interactive WebSocket example.

Get Started with the Minnow Server

The Minnow Server is designed for embedded devices, but you may initially want to try our ready to use reference example on your host computer. The following instructions work on Windows 10 with the Linux subsystem, Linux, and Mac OS. Check out the sharkSSL IDE if you want to easily test the Minnow Server Reference Example in secure mode (HTTPS). See the tutorial Beginner's Guide To Embedded Systems and Secure IoT Communication for details.

Open a shell and copy/paste the following into the shell to make sure you have the necessary tools.

sudo apt-get -y install git make gcc zip curl

Copy and paste the following into the shell to download and compile the Minnow server reference example with the optional IoT bridge mode.

git clone https://github.com/RealTimeLogic/MinnowServer.git git clone https://github.com/RealTimeLogic/JSON.git git clone https://github.com/RealTimeLogic/SMQ.git cd MinnowServer/example/make make packwww minnow IOT=true ./minnow

When the server runs, control the server by navigating to http://localhost:portno or via the online IoT bridge demo server. Login with user 'root' and password 'password'.

Minnow Server Design Book:

Download Minnow Server from GitHub and start writing Minnow Server Apps. Our Minnow Server design book shows you how to easily and efficiently develop web applications for microcontrollers without running into the typical issues related to running a web server on a resource constrained device.

FreeRTOS/lwIP Example

The following video shows how to install the reference example on a FreeRTOS/lwIP powered ESP8266.

WebSockets Design Book

Super Easy TLS and Public Key Infrastructure

The Minnow Server comes pre integrated with our own TLS stack, SharkSSL, thus making it easy for you to use as a developer.

Embedded HTTPS Web Server

Why You Need a Trusted TLS Server for Private Networks

You may think you do not need a TLS enabled and trusted server when deployed on a private network, but nothing could be further from the truth. Learn how shockingly easy it is to hack servers on private networks with free tools available on the Internet.


How the WebSocket Protocol Works

HTTPS to WebSocket Upgrade Example

The WebSocket protocol defined in RFC 6455 specifies how a standard HTTPS request/response pair can be upgraded to a secure and persistent full-duplex connection. HTML5 WebSocket-based applications enable real-time communication while placing less burden on the servers.

WebSockets vs HTTP/AJAX/REST

WebSockets is a relatively new standard that brings real-time communication to the web. WebSockets is supported by all modern browsers and is designed to provide a persistent full-duplex asynchronous communication channel over a single TCP connection.

HTTPWebSockets
Persistent
PartlyYes
Duplex
HalfFull
Message Pattern
Request-ResponseBi-Directional
Service Push
Not supportedCore feature
Overhead
Moderate to large for embedded systemsMinimal overhead per WebSocket message

Most embedded web device management applications currently operate by simply responding to user interactions. You click a button and this causes the browser to submit the data to the server. The server performs the command and responds with a new HTML page. This old technology works, but it is a very limiting model. You may have moved beyond the simple GET/POST submit button web design concept and embraced AJAX/REST. However, the fact remains that AJAX is still a one way asynchronous message sent from the browser to the server and any real-time updates you want to display in the browser require polling of server resources. You may still think AJAX and REST are the way to go; however, the entire AJAX protocol could be built using Websockets technology. This makes Websockets literally a superset of AJAX so it makes sense that we might abandon a limiting technology for a broader technology.

The fact that Websockets provides a bi-directional communication channel between the browser and server immediately opens up some very interesting opportunities for web based device management applications. Because the connection is persistent, the embedded web server can now initiate communication with the browser. The embedded web server can send alerts, updates, notifications, etc.. This adds a whole new dimension to the types of web based device management applications that can be constructed.

REST & AJAX over WebSockets

You may have an application where AJAX is the preferred communication model. WebSockets enables us to multiplex data on the same connection, thus we can easily implement an AJAX library on top of WebSockets and still use the same WebSockets connection for bi-directional real-time data transfer. See our AJAX over WebSockets tutorial if you are interested in learning more about this technique.

Minnow Server Application Areas

The Minnow Server is primarily designed for small micro controllers such as the Cortex-M3/M4 family, where internal memory is limited and using a full application server, such as the Barracuda Application Server, is not an option. Minnow Server is not recommended for larger embedded systems where a full application server can fit into the memory.

RTOS/HLOS

Out-of-the-box operating system (OS) support includes INTEGRITY™, MQX™, SMX™, ThreadX™, embOS™, VxWorks™, QNX™, FreeRTOS™, uCLinux™, MDK-ARM™, Microchip, mbed™, Mediatek™, lwIP, Linux, and Windows™.

Bare-Metal

Out-of-the-box support for lwIP in event driven mode.

Minnow Server Alternatives

Consider using the Barracuda App Server with its included WebSocket libraries if you are using a microprocessor or a microcontroller design with included external SRAM. To learn why, check out the Web server vs. Application Server Tutorial.

The following image is a clip from the FreeRTOS Barracuda App Server ESP32 video. The clip shows how the high level Lua language can be used on the server side (microcontroller) when communicating via WebSockets. The Barracuda App Server runs on all microcontrollers with sufficient memory.