WE did it

After years of development we have reached Monkey v1.0, codename Monkey I/O.  Monkey have been a pretty stable web server for years, each release cycle have shown a mature in terms of fixes and improvements, as well the community have grown and we have more eyes over the code, as well different visions to achieve the goals. So far i am very pleased  about this new major release and i feel comfortable how it arrives in a very good year for the project.

This have been an exciting development cycle where many performance improvements have been made, as well code cleanup and general fixes. We have reach this new release keeping our focus of hit a great performance and be lightweight.

Being a well funded project and persistent community, Monkey project joined this year to the Google Summer of Code program as a mentoring organization. Currently we are guiding three students who are working hard in a few exciting implementations for our incoming versions.

Looking back...

Years ago people often complained about why to dedicate too much time in a new web server, when some open and reliable options were available such as Apache or NginX, we always looked for a real lightweight solution, and that is Monkey. Also when we started to do a major re-write of the core on 2008, we changed our mind about where the project is going so our new focus was always embedded: where the penguin (Linux) goes.. Monkey goes behind it. So it's not a surprise that we are really focus on ARM based platforms.

What can Monkey offer to an embedded device ?

Nowadays HTTP is one of the widely used communication protocol by different application layers (obviously running on top of TCP/IP). We are not in the age of just serve static content, even generate a full dynamic content page through scripting it's looking like old school, or it will be in less than five years. We are in the service-oriented models age, where unique resources perform a specific job and expose that functionality through a common communication application layer: HTTP.

Imagine different nodes around your local network sharing signal information from sensors or inclusive waiting for incoming commands to execute a specific task in the device, you have a few workarounds depending of the transport layer, but if you choose HTTP you need a flexible and lightweight solution.

Monkey is more than a common web server, is a complete event-driven HTTP stack with a flexible API which allow you to take full control over the incoming request and at any later stage of the cycle.

Making web services easy: Duda

Even for who is implementing web services in C have to deal with not-so-friendly concepts such as concurrency, thread keys, lock free, memory management, asynchronous events, etc. This generate and extra learning curve that can bring some delays in the project implementation where straightforward solutions are critical.

Due to the problem recently described, a  new solution and sub-project have born: Duda, a web services framework. Duda it's build on top of Monkey and expose a friendly C API for the web services implementation. Weeks ago we have publish an blog post about it:


As described in the article, Duda is hitting a great performance in terms of speed and resource usage:

Due to the nature of Duda and it's new dependencies, we have decided to separate the project from the Monkey sources and handle it in a different scenario, you can find the new Duda home here: http://duda.io . The project is under active development and we will post more about it in the incoming weeks.

Final words

Thanks to everyone who have dedicated some time to take part of this, all work have been done in community with motivated people behind it, we will keep pushing hard in innovation and improvements. Just keep being part of it 🙂

If you are interested into participate in one of our projects or get involved in the community, don't hesitate to contact us on irc.freenode.net #monkey or through our mailing list.