All Projects → status-im → Nim Libp2p

status-im / Nim Libp2p

Licence: other
libp2p implementation in Nim

Programming Languages

nim
578 projects

Labels

Projects that are alternatives of or similar to Nim Libp2p

Decsynccc
Android app to sync contacts, calendars and tasks without a server using DecSync
Stars: ✭ 101 (-12.93%)
Mutual labels:  p2p
Airdcpp Webclient
Communal peer-to-peer file sharing application for file servers/NAS devices
Stars: ✭ 106 (-8.62%)
Mutual labels:  p2p
Dino
Modern XMPP ("Jabber") Chat Client using GTK+/Vala
Stars: ✭ 1,637 (+1311.21%)
Mutual labels:  p2p
Smargate
内网穿透,c++实现,无需公网IP,小巧,易用,快速,安全,最好的多链路聚合(p2p+proxy)模式,不做之一...这才是你真正想要的内网穿透工具!
Stars: ✭ 1,378 (+1087.93%)
Mutual labels:  p2p
Wikipediap2p
WikipediaP2P.org Chrome Extension
Stars: ✭ 105 (-9.48%)
Mutual labels:  p2p
Planetary Ios
An IOS app that doesn't keep your data in the cloud
Stars: ✭ 108 (-6.9%)
Mutual labels:  p2p
Hypercloud
A hosting server for Dat. [ARCHIVED - Use Hashbase instead!]
Stars: ✭ 96 (-17.24%)
Mutual labels:  p2p
Canvas
Peer-to-peer canvas app for Urbit
Stars: ✭ 114 (-1.72%)
Mutual labels:  p2p
Ipfs Wormhole
Get things from one computer to another, safely. Over IPFS (which not even required to receive those things).
Stars: ✭ 107 (-7.76%)
Mutual labels:  p2p
Js Libp2p
The JavaScript Implementation of libp2p networking stack.
Stars: ✭ 1,686 (+1353.45%)
Mutual labels:  p2p
Videop2proxy
Proxy to enable P2P only cameras to work with standard protocols.
Stars: ✭ 102 (-12.07%)
Mutual labels:  p2p
Rust Ipfs Api
Rust crate for interfacing with the IPFS API
Stars: ✭ 105 (-9.48%)
Mutual labels:  p2p
Bitchatclient
Technitium Bit Chat, a secure, peer-to-peer, instant messenger!
Stars: ✭ 111 (-4.31%)
Mutual labels:  p2p
Covenantforum
CovenantForum is a simple Decentralized forum powered by CovenantSQL.
Stars: ✭ 102 (-12.07%)
Mutual labels:  p2p
Cli
A CLI for peer-to-peer file sharing using the Hypercore Protocol.
Stars: ✭ 114 (-1.72%)
Mutual labels:  p2p
U2web
stream video with p2p
Stars: ✭ 97 (-16.38%)
Mutual labels:  p2p
Syncthing
Open Source Continuous File Synchronization
Stars: ✭ 41,904 (+36024.14%)
Mutual labels:  p2p
Orion
[Moved to Gitlab] Easy to Use, Inter Planetary File System (IPFS) desktop client
Stars: ✭ 115 (-0.86%)
Mutual labels:  p2p
Bitwrk
Bitcoin-fueled Peer-to-Peer Blender Rendering (and more)
Stars: ✭ 114 (-1.72%)
Mutual labels:  p2p
Catapult Server
Catapult server
Stars: ✭ 111 (-4.31%)
Mutual labels:  p2p

libp2p hex logo

The Nim implementation of the libp2p Networking Stack.

Introduction

An implementation of libp2p in Nim. Also provides a Nim wrapper of the Libp2p Go daemon.

Project Status

The current native Nim libp2p implementation support is experimental and shouldn't be relied on for production use. It is under active development and contributions are highly welcomed. :)

Check our examples folder to get started!

Table of Contents

Background

libp2p is a networking stack and library modularized out of The IPFS Project, and bundled separately for other tools to use.

libp2p is the product of a long and arduous quest of understanding; a deep dive into the internet's network stack and the peer-to-peer protocols from the past. Building large scale peer-to-peer systems has been complex and difficult in the last 15 years and libp2p is a way to fix that. It is a "network stack", a suite of networking protocols that cleanly separates concerns and enables sophisticated applications to only use the protocols they absolutely need, without giving up interoperability and upgradeability.

libp2p grew out of IPFS, but it is built so that lots of people can use it, for lots of different projects.

  • Learn more about libp2p at libp2p.io and follow our evolving documentation efforts at docs.libp2p.io.
  • Here is an overview of libp2p and its implementations in other programming languages.

Install

nimble install libp2p

Prerequisite

Usage

API

The specification is available in the docs/api folder.

Getting Started

Please read the GETTING_STARTED.md guide.

Tutorials and Examples

Example code can be found in the examples folder.

Direct Chat Tutorial

  • Part I: Set up the main function and use multi-thread for processing IO.
  • Part II: Dial remote peer and allow customized user input commands.
  • Part III: Configure and establish a libp2p node.

Using the Go Daemon

Please find the installation and usage intructions in daemonapi.md.

Examples can be found in the examples/go-daemon folder;

Development

Clone and Install dependencies:

git clone https://github.com/status-im/nim-libp2p
cd nim-libp2p
nimble install

Tests

Prerequisite

Run unit tests

# run all the unit tests
nimble test

Packages

List of packages currently in existence for nim-libp2p:

Libp2p

Transports

Secure Channels

Stream Multiplexers

Utilities

Data Types

Pubsub

Packages that exist in the original libp2p specs and are under active development:

  • libp2p-daemon
  • libp2p-webrtc-direct
  • libp2p-webrtc-star
  • libp2p-websockets
  • libp2p-spdy
  • libp2p-bootstrap
  • libp2p-kad-dht
  • libp2p-mdns
  • libp2p-webrtc-star
  • libp2p-delegated-content-routing
  • libp2p-delegated-peer-routing
  • libp2p-nat-mgnr
  • libp2p-utils

** Note that the current stack reflects the minimal requirements for the upcoming Eth2 implementation.

Tips and tricks

enable expensive metrics:

nim c -d:libp2p_expensive_metrics some_file.nim

use identify metrics

nim c -d:libp2p_agents_metrics -d:KnownLibP2PAgents=nimbus,lighthouse,prysm,teku some_file.nim

specify gossipsub specific topics to measure

nim c -d:KnownLibP2PTopics=topic1,topic2,topic3 some_file.nim

Contribute

The libp2p implementation in Nim is a work in progress. We welcome contributors to help out! Specifically, you can:

  • Go through the modules and check out existing issues. This would be especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it.
  • Perform code reviews. Feel free to let us know if you found anything that can a) speed up the project development b) ensure better quality and c) reduce possible future bugs.
  • Add tests. Help nim-libp2p to be more robust by adding more tests to the tests folder.

Core Developers

@cheatfate, Dmitriy Ryajov, Giovanni Petrantoni, Zahary Karadjov

License

Licensed and distributed under either of

or

at your option. These files may not be copied, modified, or distributed except according to those terms.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].