Web Services Stack for Linux

a High Performance Stack made for x86/x86_64 and ARM


Duda I/O is a high performant framework which provides a complete software stack for the development and deployment of Web Services primary written in C language. It provides a friendly API based on pseudo-objects, full documentation is always available.

The stack is optimized to be used on Linux distributions where it tries to take the most of the Linux Kernel. High Performance is always one of our main objectives.


The complete Stack is based in non-blocking I/O operations, this means that it works on top of asynchronous events. Each working thread can scale to thousands of active connections. Is good to mention that a non-blocking model will not reduce the computing time or delays caused by the blocking calls used in your web service.

Service Oriented

One of the main features of Duda, is that it allow to register multiple web services under the same Server instance, as well each service can be assigned to a different Virtual Host. A Virtual Host can hold multiple web services.

Each service can map static URLs to specific callback functions or use the Map interfaces provided by Duda, this last one is pretty much similar to REST and provides a very useful set of methods to handle each request resources such as: methods, parameters and body content.


For a common running Web Service, the global size of the running components in memory can be around of 500KB. The memory used will depends of your web service implementation and packages loaded. The stack components as Duda and Monkey aims to be lightweight and optimize the resources used.

API Objects

When using the core API, several objects are exposed on runtime to perform different kind of operations, mostly to deal with the incoming requests, set responses, handle specific socket events, log to a console within others. All these objects are created per service and are the fundament for any workflow inside your code logic.

API Packages

A Package, is a set of features that needs to be explicit loaded on runtime. Packages resides in a different stack source and may depend of third party libraries, some packages examples are WebSockets, SQLite, Redis, MariaDB, etc.

Following the philosophy of a small and extensible core, a Package provides the interface to extend Duda without compromise resources from unused features on runtime.