Skip to content
ZooDB Object Database
Branch: master
Clone or download
Latest commit 058d0ff Jan 3, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.settings Issue 111/112 Aug 26, 2018
doc Fixed some concurrency bugs. Sep 19, 2017
examples/org/zoodb/jdo Merge branch 'master' into devTZ Mar 15, 2016
resources/META-INF/services Merge branch 'master' into devTZ Mar 15, 2016
src/org/zoodb Fixed issue #54 schema auto-creation failed to roll back on failed co… Dec 18, 2018
tst/org/zoodb Fixed issue #111 and #112, partially reverting #75. This handles reat… Sep 17, 2018
tstresources Added slf4j logging. This resolves issue #47 May 26, 2017
.classpath Issue 111/112 Aug 26, 2018
.gitignore Merge branch 'master' into devTZ Mar 15, 2016
.project Merge branch 'master' into devTZ Mar 15, 2016
.travis.yml Updated .travis.yml for Java 8 Apr 25, 2017
CHANGELOG Fixed issue #54 schema auto-creation failed to roll back on failed co… Dec 18, 2018
COPYING Merge branch 'master' into devTZ Mar 15, 2016 Update Jan 3, 2019
VERSION Readme update Sep 19, 2017 Merge branch 'master' into devTZ Mar 15, 2016
pom.xml [maven-release-plugin] prepare for next development iteration Jan 3, 2019


ZooDB logo

Build Status codecov

ZooDB is an object oriented database based on the JDO 3.0 standard. It is written by Tilmann Zäschke since 2008, since 2011 with friendly support by the GlobIS Group at ETH Zurich. ZooDB is currently licensed under GPLv3 (GNU Public License), see file COPYING.

ZooDB is also available via maven:


There are two ZooDB plug-in projects:


2019-01-03 - Release of ZooDB 0.5.2. Bug fixes:

  • Fixed Issues #109 and #110 : Inconsistency after removing attribute index..
  • Fixed issue #54 : schema auto-creation fails to roll back properly when commit fails.

2018-09-17 - Release of ZooDB 0.5.1. Bug fixes:

  • Issue #111: Support for serialization of persistent objects outside ZooDB
  • Issue #112: Proper handling of reattaching detached objects

2017-07-18 - Release of ZooDB 0.5.0. New features:

  • Java 8
  • JDO 3.1
  • Migrated logging to slf4j
  • Various bugs fixed

Bug Bounty #2

Starting March 3rd 2017, until May 31st 2017, there is a bug bounty for severe bugs concerning indexing and database consistency. Five bugs were accepted for the bug bounty.

Bug Bounty

The first bug hunt started June 11 2016 and ended June 30 2016. The hunt was for severe bugs concerning indexing and database consistency. No bugs were reported.

Current Status

Under development, but already in use by some university projects.

Current Features

  • Works as normal database or as in-memory database.
  • Fast (4x faster than db4o using db4o's PolePosition benchmark suite).
  • Reasonably scalable, has been used successfully with 60,000,000+ objects in a 30+ GB database.
  • Maximum object count: 2^63.
  • Maximum database size depends on (configurable) cluster size: 2^31 * CLUSTER_SIZE. With default cluster size: 2^31 * 4KB = 8TB.
  • Crash-recovery/immunity (dual flush, no log-file required).
  • Standard stuff: commit/rollback, query, indexing, lazy-loading, transitive persistence & updates (persistence by reachability), automatic schema definition, embedded object support (second class objects).
  • Queries support standard operators, indexing, path queries, parameters, aggregation (avg, max, min), projection, uniqueness, ORDER BY, setting result classes (partial), methods (partial).
  • Multi-user/-session capability (optimistic TX), THIS IS NOT WELL TESTED!
  • Thread-safe.
  • XML export/import (currently only binary attributes).
  • Some examples are available in the 'examples' folder.
  • Open source (GPLv3).

Note that some features may be available in the latest snapshot only.

Current Limitations

  • Schema evolution is ~90% complete (updating OIDs is not properly supported, no low level queries). --> Queries don't work with lazy evolution.
  • No backup (except copying the DB file).
  • Single process usage only (No stand-alone server).
  • JDO only partially supported:
    • Some query features not supported: group by, range, variables, imports, setting result classes (partial).
    • No XML config or Annotations; configuration only via Java API.
    • Manual enhancement of classes required (insert activateRead()/activateWrite() & extend provided super-class).
  • Little documentation (some example code), but follows JDO 3.0 spec.


  • JDO 3.1 (Java Data Objects):
  • JTA (Java Transaction API):
  • JUnit (currently use 4.12, but should work with newer and older versions as well):
  • Java 8
  • SLF4J (Logging API)




You can’t perform that action at this time.