Metakit embedded database library

Metakit is an efficient embedded database library with a small footprint. It fills the gap between flat-file, relational, object-oriented, and tree-structured databases, supporting relational joins, serialization, nested structures, and instant schema evolution. There is a C++ API, a Python binding called Mk4py, and a Tcl binding called Mk4tcl. You can manipulate and exchange data between any of these.

Data files are portable. The library has been used on Unix, Windows, Macintosh, VMS, and others, spanning a range of 16- to 64-bit architectures, from PDA's to S390's.

Metakit is in use in various commercial projects and products on millions of desktops.

News

2011-08-19 Metakit source code now on GitHub The Metakit source code (including older releases) have been moved to GitHub. The subversion repository will be kept around for a while, but is now read-only.

For the latest changes, check on GitHub.

2007-06-18 Fix threading problems in Mk4tcl A change is needed to make the thread fix work with mk::loop, because the _ws pointer could be null in FreeCursorInternalRep. Fixed by no longer clearing _ws and changing a test for that case. - This fix is in SVN.

2007-06-16 Metakit 2.4.9.7 released This is the latest stable release, see the download page.

Overview

Use your data on any platform

Both the code and datafiles are portable. All byte-ordering managed by the library.

Complex datastructures in one file

Store multiple nested data structures, to create document-centric applications.

Restructure datafiles, instantly

You'll have to see this to believe it: restructure files on-the-fly, while open.

Serialize all data for transport

Complementing commit/rollback of changes, data can also be serialized.

Recover from system-failures

The use of Stable Storage ensures that files cannot be corrupted by crashes.

Load on-demand, quick startup

Files are opened without reading data. Memory-mapped files if O/S supports it.

Behaves like containers

The API mimics container classes. Quickly get sizes and iterate over rows.

Wide range of operators built-in

Sorting, relational join / group by, set operations, permutations, hashing.

1-32 bits per int (or 64), variable-sized data

The largest int defines storage format. String/binary data is stored as var-sized.

Create fully self-contained applications

Can be linked shared or statically, for hassle-free deployment of components.

Tiny code (125 Kb as Win32 DLL)

The library is extremely small, unused functions are stripped off in static links.

Simple API, just 6 core classes

Only a small interface is exposed. One header file lists all the classes you need.

Also use from Python and Tcl

These language bindings are coded to take advantage of the respective idioms.