symisc/unqlite
symisc/unqlite has 2,320 GitHub stars and 184 forks. GitHot measured +1 in 7 days and +3 in 15 days. Last checked 2026-11-10 01:29 UTC. Last push 2026-10-23.
An Embedded NoSQL, Transactional Database Engine
Crecimiento de estrellas medido
- in 24h
- Actualización retrasada
- in 7 days
- +1
- in 15 days
- +3
- in 1 month
- Actualización retrasada
Cambios netos en períodos que se solapan, no totales diarios. Los datos no disponibles se dejan en blanco. Las estrellas indican interés, no calidad.
README.md
OriginalUnQLite
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:
- a raw key/value store for binary-safe records
- a document store powered by the Jx9 embedded scripting language
Official website: https://unqlite.symisc.net/
Current public release: 1.2.1
Why UnQLite
- Embedded: no separate daemon, no socket protocol, no service to deploy
- Transactional: ACID semantics for local storage workloads
- Simple distribution: a database is typically one file on disk
- Portable: the file format is cross-platform
- Flexible: use key/value APIs directly, or use the document store and Jx9 layer
- Small integration surface: the recommended embed path is the amalgamation
- Optional threading support: enable it at compile time with
UNQLITE_ENABLE_THREADS
Recommended Integration Path
If you want the simplest and most stable embed story, use the amalgamation files at the repository root:
unqlite.cunqlite.h
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
unqlite.c: amalgamated implementationunqlite.h: public header for the amalgamation buildsrc/: split source tree and internal headerssamples/: small example programsCHANGELOG.md: release notesLICENSE: 2-Clause BSD license
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
- On-disk and in-memory databases
- Key/value CRUD APIs
- Cursor APIs for linear traversal
- A pluggable storage engine model
- A document store built on Jx9
- Foreign function and constant binding for Jx9 code
- A virtual file system abstraction for portability
Samples
The samples/ directory contains small, focused examples for common integration paths.
Useful starting points:
samples/1.c: key/value introductionsamples/2.cthroughsamples/6.c: broader API usagesamples/unqlite_huge.c: large-value handlingsamples/unqlite_tar.c: archive-oriented examplesamples/unqlite_mp3.c: metadata-oriented example
Documentation
The official documentation lives on the new site:
- Homepage: https://unqlite.symisc.net/
- Downloads: https://unqlite.symisc.net/downloads.html
- UnQLite in 5 Minutes or Less: https://unqlite.symisc.net/intro.html
- C/C++ API introduction: https://unqlite.symisc.net/api_intro.html
- C/C++ API reference: https://unqlite.symisc.net/c_api.html
- Cursor reference: https://unqlite.symisc.net/c_api/unqlite_kv_cursor.html
- Architecture overview: https://unqlite.symisc.net/arch.html
- Jx9 overview: https://unqlite.symisc.net/jx9.html
- FAQ: https://unqlite.symisc.net/faq.html
Notes
- UnQLite is not a client/server database.
- The amalgamation is the easiest way to consume the library.
- If you are evaluating the engine for a KV-only use case, start with
samples/1.c. - If you need document-oriented scripting, move next to the Jx9 documentation and samples.
License
UnQLite is distributed under the 2-Clause BSD license.
- License text in this repository: LICENSE
- Official licensing page: https://unqlite.symisc.net/licensing.html
Explorar proyectos relacionados
Asabeneh/30-Days-Of-Python
El reto de programación 30 Days of Python es una guía paso a paso para aprender el lenguaje de programación Python en 30 días. Este reto puede llevar más de 100 días. Sigue tu propio ritmo. Estos vídeos también pueden ayudarte: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 estrellasgrafana/grafana
Plataforma abierta y componible de observabilidad y visualización de datos. Visualiza métricas, registros y trazas de múltiples fuentes, como Prometheus, Loki, Elasticsearch, InfluxDB, Postgres y muchas más.
77,830 estrellasredis/redis
Para los desarrolladores que crean aplicaciones en tiempo real basadas en datos, Redis es la opción preferida, la más rápida y la de más funciones como caché, servidor de estructuras de datos y motor de consultas de documentos y vectores.
77,395 estrellasapache/superset
Apache Superset es una plataforma de visualización y exploración de datos.
75,473 estrellas