GSoC/GCI Archive
Google Summer of Code 2013

Monkey Project

Web Page:

Mailing List:

Monkey project produces an open source and high quality HTTP Server Stack for GNU/Linux with focus in embedded devices. Project goals are performance, scalability and Linux Kernel dependent. In technical terms, Monkey has been designed with a flexible architecture, it is based in a core which only supports HTTP/1.1 and an API interface to extends the server functionality through plugins. Some remarkable Monkey features are:

    - ARM, x86 & x64
    - Binary size (core) < 60KB
    - IPv6 - C API interface
    - Extensions/Plugins:
           - Basic Auth
           - SSL
           - Security
           - Rules per URI and subnetworks
           - Log Writer
           - Directory Listing
           - Cheetah! Shell: command line interface through Unix sockets
           - Duda: Web Services Framework


  • Add MySQL/MariaDB and PostgreSQL extensions to Duda I/O Duda I/O is an event driven web service framework based on Monkey web server with very low resource consumption. The web services framework already support the following databases extensions: Redis, Memcache and SQLite. Due to the heavily used of MySQL/MariaDB and PostgreSQL in real world products, it is urgent to implement the corresponding extensions for Duda I/O. This project focus on implementing extensions (packages) for Duda I/O to incorporate with native C API to connect to MySQL/MariaDB and PostgreSQL relational databases in asynchronous mode .
  • Caching Filesystem Add a smart file caching layer based on various heuristics specialized for web servers. The service will be based on a virtual filesystem using FUSE completely in userspace.
  • Future-proof Monkey for new Protocols. This proposal aims at changing the plugin api to be less protocol dependent, add support for compression and also serve encrypted and non-encrypted content in the same process.
  • Proxy Reverse Plugin I would like to create proxy-reverse plugin using the Monkey API. The proxy firstly will parse the HTTP request and depending on rules and of load balancing techniques will get forwarding decision. The forwarding rules will be get from configuration file. The configuration file must be flexible enough, so it will support also perl regular expressions for creating custom rules. Other than rules, there will have possibilities for different load balancing methods. I want to make the proxy to be really lightweight and fast, so I will try to use as less memory as possible and no locks if possible.