The elastic database system. A database designed for P2P-like scenarios, where potentially millions of computers send database updates around.
Python Shell
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
diff Moved diff files into seperate directory Apr 19, 2016
discovery Drop similarity-response messages with duplicate identifiers Feb 7, 2017
docs Fixed errors in usage.rst Mar 10, 2017
scripts Logging stderr to log file now Mar 9, 2018
tests Made n-hop-sync backwards compatible Jun 14, 2017
tool minor defects in createkey tool Apr 24, 2017
tracker Fixed custom IR/IRSP messages Feb 26, 2018
twisted/plugins Logging stderr to log file now Mar 9, 2018
utils Added yappi profiler as twistd profiler Jul 7, 2016
.gitignore Added exceptions for sphinx in the .gitignore Apr 1, 2016
.gitmodules Removed libnacl submodule Jan 30, 2018
.pylintrc Added pylintrc file Jun 3, 2017
CONTRIBUTING.rst Added contributing section for the documentation Apr 1, 2016
README.rst Fixed issues in the documentation May 20, 2016 moved revision stuff into file, importing from __init__ is not always… Jun 25, 2012 Merge pull request #455 from snorberhuis/nZeilemaker/append_double_me… Oct 9, 2015 Removed some unneccesary debug prints Jan 5, 2015 Added keep-alive option to WCandidates Jun 9, 2017 Made n-hop-sync backwards compatible Jun 14, 2017 Fixed custom IR/IRSP messages Feb 26, 2018 Removed libnacl submodule Jan 30, 2018 Fixed transaction error Jan 10, 2017 Made n-hop-sync backwards compatible Jun 14, 2017 Lowered logging of statement Mar 21, 2018 Removed support for version < 16 to match Tribler's Unsupported versi… Jul 13, 2016 Refactored distribution batch checking into Apr 5, 2017 Added endpoint for IPv8 handoff Jan 25, 2018 some cleanup Jul 24, 2014 Implemented a split_function which allow you to append to a double Jul 20, 2015 More logging when message is not decodable Mar 16, 2015 convert to use per-class logger Jul 24, 2014 Actually fix the duplicated undo, we don't know why the test was pass… Apr 14, 2014 add per-community walk statistics May 19, 2015 Fixed #414 and #413 Mar 23, 2015 add per-community walk statistics May 19, 2015 Implement TaskManager.wait_for_deferred_tasks() Sep 29, 2016 Fixed #414 and #413 Mar 23, 2015 Fixed crash when packet with invalid IP comes in Jan 10, 2017



The Distributed Permission System, or Dispersy, is a platform to simplify the design of distributed communities. At the heart of Dispersy lies a simple identity and message handling system where each community and each user is uniquely and securely identified using elliptic curve cryptography.

Integrated NAT Puncturing

Nowadays almost all devices have a network connection, with a lot of them running in challenged network environments. Challenging conditions can be found in a wide range of networks, i.e. Peer-to-Peer networks (P2P), and delay tolerant networks (DTNs). These networks have several limitations, like having long communication delays, very low data rates, and unstable links.

P2P networks are particularly challenging due to nodes not always being online, NAT-firewall constrained Internet connections, and frequent interaction with potentially malicious nodes. Smartphones pose another challenge due to their limited processing capability and battery lifetime.

Dispersy was designed to be capable of running in challenged network environments. It does this by minimizing the needed resources by using optimized algorithms and protocols.


Dispersy is fully decentralized. It does not require any server infrastructure and can run on systems consisting of a large number of nodes. Each node runs the same algorithm and performs the same tasks. All nodes are equally important, resulting in increased robustness. Dispersy offers distributed system developers both one-to-many and many-to-many data dissemination capabilities. Data is forwarded between nodes. All injected data will eventually reach all nodes, overcoming challenging network conditions.

Dispersy uses elliptic curve cryptography to identify the different nodes in a secure and anonymous way.


Dispersy is designed as a building block for implementing fully decentralized versions of, for instance Facebook, Wikipedia, Twitter, or Youtube. These Web 2.0 applications often require on a direct Internet connection to their central servers, but can now be implemented in a distributed way

Key Features

Key features of Dispersy are:

  • stateless synchronization using Bloomfilters
  • decentralized NAT traversal
  • performance that can scale to over 100,000 bundles

Dispersy is intergated in the BitTorrent client Tribler and show that it is performing very well in various real-time challenged network scenario’s (3G and WIFI).


The documentation for this project can be found at ReadTheDocs