Skip to content
a libp2p implementation for the JVM, written in Kotlin 🔥 [WIP]
Kotlin Java
Branch: master
Clone or download
Nashatyrev Feature/release 0.1.0
* Update README with progress status and Gradle usage

* Add release Bintray artifact publishing Gradle task

* Add docs generation, zipping and adding to maven artifact

* The package is on JCenter now, no need to specify a separate repo

* Get rid of multiformats dependency

* Remove obsolete maven repository from readme
Latest commit 5faeed9 Oct 4, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
gradle/wrapper ⚡ jumpstart this project (+). May 30, 2019
src Feature/release 0.1.0 Oct 4, 2019
.gitignore ⚡ jumpstart this project (+). May 30, 2019
.travis.yml Feature/multistream handler (#21) Jul 24, 2019
LICENSE-APACHE dual-license under ASLv2 and MIT. May 30, 2019
LICENSE-MIT Feature/release 0.1.0 Oct 4, 2019
build.gradle.kts Feature/release 0.1.0 Oct 4, 2019 ⚡ jumpstart this project (+). May 30, 2019
gradlew ⚡ jumpstart this project (+). May 30, 2019
gradlew.bat Secio implementation (#10) Jul 3, 2019


Gitter Build Status Discourse posts

a libp2p implementation for the JVM, written in Kotlin 🔥

⚠️ This is heavy work in progress! ⚠


The endeavour to build jvm-libp2p is split in two phases:

  • minimal phase (v0.x): aims to provide the bare minimum stack that will allow JVM-based Ethereum 2.0 clients to interoperate with other clients that rely on fully-fledged libp2p stacks written in other languages.

    • To achieve this, we have to be wire-compliant, but don't need to fulfill the complete catalogue of libp2p abstractions.
    • This effort will act as a starting point to evolve this project into a fully-fledged libp2p stack for JVM environments, including Android runtimes.
    • We are shooting for Aug/early Sept 2019.
    • Only Java-friendly façade.
  • maturity phase (v1.x): upgrades the minimal version to a flexible and versatile stack adhering to the key design principles of modularity and pluggability that define the libp2p project. It adds features present in mature implementations like go-libp2p, rust-libp2p, js-libp2p.

    • will offer: pluggable peerstore, connection manager, QUIC transport, circuit relay, AutoNAT, AutoRelay, NAT traversal, etc.
    • Android-friendly.
    • Kotlin coroutine-based façade, possibly a Reactive Streams façade too.
    • work will begin after the minimal phase concludes.

minimal phase (v0.x): Definition of Done

We have identified the following components on the path to attaining a minimal implementation:

  • multistream-select 1.0
  • multiformats: multiaddr
  • crypto (RSA, ed25519, secp256k1)
  • secio
  • connection bootstrapping
  • mplex as a multiplexer
  • stream multiplexing
  • TCP transport (dialing and listening)
  • Identify protocol
  • Ping protocol
  • peer ID

We are explicitly leaving out the peerstore, DHT, pubsub, connection manager, etc. and other subsystems or concepts that are internal to implementations and do not impact the ability to hold communications with other libp2p processes.

Adding as a dependency to your Gradle project:

   repositories {

   implementation 'io.libp2p:jvm-libp2p-minimal:0.1.0-RELEASE'


Dual-licensed under MIT and ASLv2, by way of the Permissive License Stack.

You can’t perform that action at this time.