Skip to content
A multiplexed p2p network framework that supports custom protocols
Branch: master
Clone or download
Latest commit f5596e9 May 23, 2019


Build Status image


This is a minimal implementation for a multiplexed p2p network based on yamux that supports mounting custom protocols.


  1. Data stream transmission
+----+      +----------------+      +-----------+      +-------------+      +----------+      +------+
|user| <--> | custom streams | <--> |Yamux frame| <--> |Secure stream| <--> |TCP stream| <--> |remote|
+----+      +----------------+      +-----------+      +-------------+      +----------+      +------+
  1. Code implementation

All data is passed through the futures channel, yamux splits the actual tcp stream into multiple substreams, and the service layer wraps the yamux substream into a protocol stream.

At the same time, support for other protocol(such as websocket) is also planned, but will delay a lot.

Detailed introduction: 中文/English

Note: It is not compatible with libp2p.


The API of this project is basically usable. However we still need more tests. PR is welcome.


From cargo

tentacle = "0.2"


  1. Clone
$ git clone
  1. On one terminal:

Listen on

$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple -- server
  1. On another terminal:
$ RUST_LOG=simple=info,tentacle=debug cargo run --example simple
  1. Now you can see some data interaction information on the terminal.

You can see more detailed example in these two repos: ckb/cita.


Because when I use rust-libp2p, I have encountered some difficult problems, and it is difficult to locate whether it is my problem or the library itself, it is better to implement one myself.

You can’t perform that action at this time.