Monkey v1.6.0

Release notes


Monkey Server is a fast and lightweight HTTP server for Linux, OSX and BSD. It has been designed to be very scalable with low memory and CPU consumption, the perfect solution for High Demand Production Servers and Embedded Devices. Made for ARM, x86 and x86_64.

We are proud to announce the availability of Monkey v1.6, a major release that brings exciting features and architectural changes that provides portability, reliability and the ability to welcome new protocols.


Below there is a list of the most relevant changes on this version:

Build System

  • Monkey now uses CMake as it default build system. This relevant change and improvement have deprecated the old bash configure script of 1200 lines. Now new CMake script rules exists for every component and a new configure script of 200 lines was added that works as an optional wrapper over the CMake build options provided by Monkey.


  • Now the Listeners can have associated a specific networking plugin, for short we added the capability to let some Listener working on port 443 use the SSL/TLS implementation while the port 80 uses plain communication.
  • A new Streams interface have been implemented, it hide the complexity of writing data to network channels and abstract the networking plugin for that specific purpose.
  • Source code split: mk_core, mk_server and mk_bin.


  • The Scheduler is aware about protocol handlers, we are preparing for HTTP/2.0.
  • Remove old array of connections, allocate space on demand.
  • The Connection interface have been dropped and replaced by the Scheduler directly.

Event Loop

  • The Event Loop have been reimplemented and now it support different backends: for Linux it uses epoll and for OSX and FreeBSD kqueue.
  • The old Event File Descriptor (EFD) table have been dropped.
  • The events are not longer associated to a socket number. Upon notification, the scheduler connection context is provided.


  • Starting from this version, Monkey is not only compatible with Linux, now we add support for OSX and FreeBSD.


  • A new HTTP parser have been implemented.
  • Internal structures to represent a connection and request have been reimplemented.
  • The HTTP interface is now a handler for the Scheduler.

Virtual Hosts

  • The Virtual Host interface now implements a new configuration for Handlers, plugins such as CGI, FastCGI, Directory Listing, Mandril and others, are triggered upon a regular expression match that works on order from top to bottom.

Plugin Interface

  • Plugins now have a new architecture, new registration mechanism.
  • Plugins can be build in static (built-in) or dynamic mode (shared libs).


  • SSL/TLS: our plugin that provides channel encryption have been upgraded to support the new mbedTLS v2.0.
  • FastCGI: plugin re-written from scratch to adapt to new architecture.
  • CGI: Plugin adapted to new architecture, small changes.
  • Others: all other plugins have been modified to adapt to the new registration mechanism.


We would like to thanks to the following people who have been involved doing code and bug fixes contributions on this release:

  • Eduardo Silva
  • Sonny Karlsson
  • Vladimir Cernov
  • Kaspersky
  • Matthew Daley
  • Felipe Reyes
  • Chris Johns
  • Denis
  • Neeraj Sharma
  • Nithin Saji
  • leowzukw
  • nkaneko
  • pandax381
  • txt.file

Join us!

We want to hear about you, our community is growing and you can be part of it!, you can met us at: