a libp2p implementation for the JVM, written in Kotlin 🔥 [WIP]
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
mbaxter e7acb51a53
Merge pull request #172 from libp2p/0.6.4
2 weeks ago
examples Remove inadvertent import 1 year ago
gradle/wrapper Upgrade gradle to 6.6.1 (#140) 4 months ago
src Update comment 1 month ago
.gitignore Move ChatNode into a jar of its own. cli-chatter now pulls in the jar 1 year ago
.travis.yml Upgrade gradle to 6.6.1 (#140) 4 months ago
LICENSE-APACHE dual-license under ASLv2 and MIT. 1 year ago
LICENSE-MIT dual-license under ASLv2 and MIT. 1 year ago
README.md Update version 1 month ago
build.gradle.kts Update version 1 month ago
gradle.properties jumpstart this project (+). 1 year ago
gradlew jumpstart this project (+). 1 year ago
gradlew.bat Secio implementation (#10) 1 year ago
settings.gradle Fix dependencies. (#150) 2 months ago

README.md

jvm-libp2p

Gitter Build Status Discourse posts

a libp2p implementation for the JVM, written in Kotlin 🔥

⚠️ This is heavy work in progress! ⚠

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.

Adding as a dependency to your project:

Builds are published to JCenter. Maven Central mirrors JCenter, but updates can take some time to appear so if possible, pull directly from JCenter.

Using Gradle

   repositories {
       jcenter()
   }

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

Using Maven

  <dependency>
    <groupId>io.libp2p</groupId>
    <artifactId>jvm-libp2p-minimal</artifactId>
    <version>0.6.4-RELEASE</version>
    <type>pom</type>
  </dependency>

Building the project

To build the library you will need just

  • JDK (Java Development Kit) of version 8 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:

> cd jvm-libp2p
> ./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.