LibUtillery is a container for more or less unrelated utility libraries, providing functionality that is often required in both small and medium-sized software, which otherwise tends to be re-written over and over again.

The library provides a highly portable programmer's toolbox, either as-is or as a relatively easy to use code repository. It is designed to work on all kinds of modern and older flavors of Unix, as well as Microsoft Windows. Apart from requiring the "long long" integer type in one function, it is expected to be compatible with ISO C90.

Most of LibUtillery's sub-libraries could be considered a "class" that can be instantiated multiple times within a program. The following components are available:

A malloc(3) wrapper with security and debugging features. Read the manual.
Provides random numbers using an ARC4 cipher key stream generator (using the implementation of OpenSSH-portable, requiring OpenSSH, or the native implementation where available). Read the manual.
A simple cache that uses a hash table data structure. Read the manual.
A configurable (INI-style) configuration file parser. Read the manual.
Provides miscellaneous functions, list macros, tree macros and standard integer types for cross-platform portability. Read the manual.
Convenience library for reading files. Read the manual.
Bob Jenkins' hash functions for table lookups. Read the manual.
A versatile logging library. Read the manual.
Secure password hashing library, supporting the creation of, and checks against, $2a$ type hashes using the OpenBSD bcrypt algorithm (using the Openwall crypt_blowfish implementation). Read the manual.
A thread synchronization and debugging library. Read the manual.

LibUtillery is free software, and available under a very permissive BSD-style license. Even though it also incorporates 3rd party code, great care has been taken to not introduce additional restrictions in doing so. See the COPYING file in the source package for further details.


LibUtillery comes in two flavors — multi- and single-threaded. To build the multi-threaded variant, POSIX threads are required.

On systems that do not provide the arc4random() family of functions, the OpenSSL libraries are required.


Release tarballs can be found in the download directory here:

The latest version of LibUtillery is 1.7.0 from November 27th, 2011:
libutillery-1.7.0.tar.gz (NEWS)
SHA-256: 8dcb478274b9dec55505fa16effbc24e19d295e3545403db0892e4a92645a941
RMD-160: e8ea30841cf29ea51c073548b16e17897a904174
MD5: cf50d786c21d99bafd9fe524d4167855

Anonymous, read-only SCM access will be made available in the future again.


Please email problem reports (ideally accompanied with a patch) to mgrimm at mrsserver dot net.

Errors and omissions in the documentation are considered bugs.

Go back to the project index.