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.
- 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.
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.