jvm-libp2p
a libp2p implementation for the JVM, written in Kotlin 🔥
Roadmap
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
- noise security protocol
- MDNS
- Gossip 1.1 pubsub
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.
Gossip simulator
Deterministic Gossip simulator which may simulate networks as large as 10000 of peers
Please check the Simulator README for more details
Adding as a dependency to your project
Hosting of artefacts is graciously provided by Cloudsmith.
As an alternative, artefacts are also available on JitPack.
Using Gradle
Add the Cloudsmith repository to the repositories
section of your Gradle file.
repositories {
// ...
maven { url "https://dl.cloudsmith.io/public/libp2p/jvm-libp2p/maven/" }
}
Add the library to the implementation
part of your Gradle file.
dependencies {
// ...
implementation 'io.libp2p:jvm-libp2p-minimal:X.Y.Z-RELEASE'
}
Using Maven
Add the repository to the dependencyManagement
section of the pom file:
<repositories>
<repository>
<id>libp2p-jvm-libp2p</id>
<url>https://dl.cloudsmith.io/public/libp2p/jvm-libp2p/maven/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
And then add jvm-libp2p as a dependency:
<dependency>
<groupId>io.libp2p</groupId>
<artifactId>jvm-libp2p-minimal</artifactId>
<version>X.Y.Z-RELEASE</version>
<type>pom</type>
</dependency>
Building the project
To build the library you will need just
- JDK (Java Development Kit) of version 11 or higher
For building a stable release version clone the master
branch:
git clone https://github.com/libp2p/jvm-libp2p -b master
For building a version with the latest updates clone the develop
(default) branch:
git clone https://github.com/libp2p/jvm-libp2p
To build the library from the jvm-libp2p
folder, run:
./gradlew build
After the build is complete you may find the library .jar
file here: jvm-libp2p/build/libs/jvm-libp2p-minimal-0.x.y-RELEASE.jar
License
Dual-licensed under MIT and ASLv2, by way of the Permissive License Stack.