The Principal Dev – Masterclass for Tech Leads

The Principal Dev – Masterclass for Tech Leads28-29 May

Join

UnQLite

UnQLite

UnQLite is a self-contained, serverless, transactional database engine for C and C++ applications.

It runs in-process, stores data in a single portable file, and ships as a small embed-friendly codebase with no external runtime dependency. UnQLite exposes two layers:

Official website: https://unqlite.symisc.net/

Current public release: 1.2.1

Why UnQLite

If you want the simplest and most stable embed story, use the amalgamation files at the repository root:

That is the intended drop-in path for production embedding.

The src/ directory contains the split source tree used to build and maintain the amalgamation.

Repository Layout

Quick Start

The fastest way to embed UnQLite is to compile your application together with unqlite.c.

GCC or Clang

cc -O2 -std=c99 -I. your_app.c unqlite.c -o your_app

Compile the bundled key/value intro sample:

cc -O2 -std=c99 -I. samples/1.c unqlite.c -o unqlite_kv_intro

MSVC

cl /nologo /TC /I. your_app.c unqlite.c

Compile the bundled key/value intro sample:

cl /nologo /TC /I. samples\1.c unqlite.c /link /OUT:unqlite_kv_intro.exe

Threading Support

If your application needs UnQLite compiled with thread support, define UNQLITE_ENABLE_THREADS when building:

cc -O2 -std=c99 -DUNQLITE_ENABLE_THREADS -I. your_app.c unqlite.c -o your_app
cl /nologo /TC /DUNQLITE_ENABLE_THREADS /I. your_app.c unqlite.c

Minimal Example

#include "unqlite.h"
#include <stdio.h>

static int print_value(const void *data, unsigned int len, void *user_data) {
    (void)user_data;
    fwrite(data, 1, len, stdout);
    return UNQLITE_OK;
}

int main(void) {
    unqlite *db = 0;

    if (unqlite_open(&db, ":mem:", UNQLITE_OPEN_CREATE) != UNQLITE_OK) {
        return 1;
    }

    if (unqlite_kv_store(db, "hello", -1, "world", 5) != UNQLITE_OK) {
        unqlite_close(db);
        return 1;
    }

    if (unqlite_kv_fetch_callback(db, "hello", -1, print_value, 0) != UNQLITE_OK) {
        unqlite_close(db);
        return 1;
    }

    putchar('\n');
    return unqlite_close(db) == UNQLITE_OK ? 0 : 1;
}

If you only need embedded key/value storage, you can stay entirely within the unqlite_kv_* API family and ignore the document-store layer.

What UnQLite Includes

Samples

The samples/ directory contains small, focused examples for common integration paths.

Useful starting points:

Documentation

The official documentation lives on the new site:

Notes

License

UnQLite is distributed under the 2-Clause BSD license.

Join libs.tech

...and unlock some superpowers

GitHub

We won't share your data with anyone else.