Skip to main content



DefraDB v0.2 is a major pre-production release. Until the stable version 1.0 is reached, the SemVer minor patch number will denote notable releases, which will give the project freedom to experiment and explore potentially breaking changes.

This release is jam-packed with new features and a small number of breaking changes. Read the full changelog for a detailed description. Most notable features include a new Peer-to-Peer (P2P) data synchronization system, an expanded query system to support GroupBy & Aggregate operations, and lastly TimeTraveling queries allowing to query previous states of a document.

Much more than just that has been added to ensure we're building reliable software expected of any database, such as expanded test & benchmark suites, automated bug detection, performance gains, and more.

This release does include a Breaking Change to existing v0.1 databases regarding the internal data model, which affects the "Content Identifiers" we use to generate DocKeys and VersionIDs. If you need help migrating an existing deployment, reach out at [email protected] or join our Discord at


  • Added Peer-to-Peer networking data synchronization (#177)
  • TimeTraveling (History Traversing) query engine and doc fetcher (#59)
  • Add Document Deletion with a Key (#150)
  • Add support for sum aggregate (#121)
  • Add support for lwwr scalar arrays (full replace on update) (#115)
  • Add count aggregate support (#102)
  • Add support for named relationships (#108)
  • Add multi doc key lookup support (#76)
  • Add basic group by functionality (#43)
  • Update datastore packages to allow use of context (#48)

Bug fixes

  • Only add join if aggregating child object collection (#188)
  • Handle errors generated during input object thunks (#123)
  • Remove new types from in-memory cache on generate error (#122)
  • Support relationships where both fields have the same name (#109)
  • Handle errors generated in fields thunk (#66)
  • Ensure OperationDefinition case has at least one selection(#24)
  • Close datastore iterator on scan close (#56) (resulted in a panic when using limit)
  • Close superseded iterators before orphaning (#56) (fixes a panic in the join code)
  • Move discard to after error check (#88) (did result in panic if transaction creation fails)
  • Check for nil iterator before closing document fetcher (#108)


  • Added benchmark suite (#160)


  • Correcting comment typos (#142)
  • Correcting README typos (#140)


  • Add transaction integration tests (#175)
  • Allow running of tests using badger-file as well as IM options (#128)
  • Add test datastore selection support (#88)


  • Datatype modification protection (#138)
  • Cleanup Linter Complaints and Setup Makefile (#63)
  • Rework document rendering to avoid data duplication and mutation (#68)
  • Remove dependency on concrete datastore implementations from db package (#51)
  • Remove all errors.Wrap and update them with fmt.Errorf. (#41)
  • Restructure integration tests to provide better visibility (#15)
  • Remove schemaless code branches (#23)


  • Add badger multi scan support (#85)
  • Add support for range spans (#86)

Continous integration

  • Use more accurate test coverage. (#134)
  • Disable Codecov's Patch Check
  • Make codcov less strict for now to unblock development (#125)
  • Add codecov config file. (#118)
  • Add workflow that runs a job on AWS EC2 instance. (#110)
  • Add Code Test Coverage with CodeCov (#116)
  • Integrate GitHub Action for golangci-lint Annotations (#106)
  • Add Linter Check to CircleCi (#92)


  • Remove the S1038 rule of the gosimple linter. (#129)
  • Update to badger v3, and use badger as default in memory store (#56)
  • Make Cid versions consistent (#57)