# Awesome JavaScript Network [![Awesome](https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg)](https://github.com/Kikobeats/awesome-network-js) [![Build Status](https://img.shields.io/travis/Kikobeats/awesome-network-js/master.svg?style=flat-square)](https://travis-ci.org/Kikobeats/awesome-network-js) [![Donate](https://img.shields.io/badge/donate-paypal-blue.svg?style=flat-square)](https://paypal.me/kikobeats)

> A 🎩 list of network layer resources written pure JS.

## High level

> Based, at least, in a CLI interface.

* [airpaste](https://github.com/mafintosh/airpaste) – 1-1 network pipe that auto discovers other peers using mdns.
* [blecat](https://github.com/mafintosh/blecat) – 1-1 pipe over bluetooth low energy.
* [deejay](https://github.com/mafintosh/deejay) – Music player that broadcasts to everyone on the same network.
* [dhtkv](https://github.com/maxogden/dhtkv) – CLI for storing arbitrary key/value data in the bittorrent mainline DHT.
* [gun](https://github.com/amark/gun) – A realtime, decentralized, offline-first, graph database engine.
* [hyperpipe](https://github.com/mafintosh/hyperpipe) – Distributed input/output pipe.
* [hypervision](https://github.com/mafintosh/hypervision) – P2P Television.
* [instant.io](https://github.com/webtorrent/instant.io) – Streaming file transfer over WebTorrent.
* [ipp-printer](https://github.com/watson/ipp-printer) – Create a printer on your network.
* [peercast](https://github.com/mafintosh/peercast) – Like peerflix but for Chromecast.
* [peerflix](https://github.com/mafintosh/peerflix) – Streaming torrent client.
* [peervisionary](https://github.com/mafintosh/peervisionary) – Stream p2p content over your local network.
* [peerwiki](https://github.com/mafintosh/peerwiki) – browse all of wikipedia using bittorrent.
* [screencat](https://github.com/maxogden/screencat) – WebRTC screensharing app.
* [signalhub](https://github.com/mafintosh/signalhub) – Simple signalling server that can be used to coordinate handshaking with webrtc or other fun stuff.
* [torrent-mount](https://github.com/mafintosh/torrent-mount) – Mount a torrent (or magnet link) as a filesystem in real time using torrent-stream and fuse.
* [webcat](https://github.com/mafintosh/webcat) – pipe across the web using WebRTC.
* [websocketd](https://github.com/joewalnes/websocketd) – Turn any program that uses stdin/stdout into a WebSocket server.
* [webtorrent](https://github.com/webtorrent/webtorrent) – BitTorrent over WebRTC.
* [wifi-triangulate](https://github.com/watson/wifi-triangulate) – Finds your current position on planet earth using the wifi access point.

## Modules

> Do one thing well.

* [airplay-server](https://github.com/watson/airplay-server) – A low level AirPlay server.
* [castnow](https://github.com/xat/chromecast-player) – simple chromecast player.
* [discovery-swarm](https://github.com/mafintosh/discovery-swarm) – A network swarm that uses [discovery-channel](https://github.com/maxogden/discovery-channel) to find peers. Also check [webrtc-swarm](https://github.com/mafintosh/webrtc-swarm).
* [dns-packet](https://github.com/mafintosh/dns-packet) – Abstract-encoding compliant module for encoding / decoding DNS packets. Also see [dns-socket](https://github.com/mafintosh/dns-socket).
* [etcdjs](https://github.com/mafintosh/etcdjs) – Low level etcd v2 client written in Javascript with failover support.
* [geocode-wifi](https://github.com/watson/geocode-wifi) – Get yours latitude/longitude based on your wifi access point.
* [hash-to-port](https://github.com/mafintosh/hash-to-port) – Hash a value to a valid port.
* [hyperdb](https://github.com/mafintosh/hyperdb) – Distributed scalable database.
* [ip-packet](https://github.com/mafintosh/ip-packet) – Encode/decode raw ip packets.
* [magnet-uri](https://github.com/webtorrent/magnet-uri) – Parse a magnet URI and return an object of keys/values.
* [mutex-server](https://github.com/samchon/mutex-server) - Critical section controllers, like mutex and semaphore, in the network level.
* [network-address](https://github.com/mafintosh/network-address) – Get the local network address of your machine.
* [network-simulator](https://github.com/substack/network-simulator) – Simulate a low-level computer network.
* [rtsp-stream](https://github.com/watson/rtsp-stream) - A transport agnostic RTSP serial multiplexer module for Node.
* [simple-peer](https://github.com/feross/simple-peer) – Simple WebRTC video/voice and data channels.
* [simple-websocket](https://github.com/feross/simple-websocket) – Simple, EventEmitter API for WebSockets.
* [torrent-discovery](https://github.com/webtorrent/torrent-discovery) – Discover BitTorrent and WebTorrent peers.
* [torrent-stream](https://github.com/mafintosh/torrent-stream) – The low level streaming torrent engine that peerflix uses.
* [udp-packet](https://github.com/substack/udp-packet) – Encode/decode raw udp packets.
* [rpc-websockets](https://github.com/elpheria/rpc-websockets) - JSON-RPC 2.0 implementation over WebSockets for Node.js and JavaScript.

## Protocols

> Implementation of protocols specs in pure javascript.

* [airswarm](https://github.com/mafintosh/airswarm) – Network swarm that automagically discovers other peers on the network using multicast dns.
* [bittorrent-dht](https://github.com/webtorrent/bittorrent-dht) – BitTorrent DHT protocol implementation.
* [bittorrent-protocol](https://github.com/webtorrent/bittorrent-protocol) – BitTorrent peer wire protocol implementation.
* [bittorrent-tracker](https://github.com/webtorrent/bittorrent-tracker) – BitTorrent tracker (client & server) implementation
* [bonjour](https://github.com/watson/bonjour) – A Bonjour/Zeroconf protocol implementation.
* [castv2](https://github.com/thibauts/node-castv2) – An implementation of the Chromecast CASTV2 protocol.
* [dht-rpc](https://github.com/mafintosh/dht-rpc) – Make RPC calls over a [Kademlia](https://pdos.csail.mit.edu/~petar/papers/maymounkov-kademlia-lncs.pdf) based DHT.
* [dns-discovery](https://github.com/mafintosh/dns-discovery) – Discovery peers in a distributed system using regular dns and multicast dns.
* [hypercore](https://github.com/mafintosh/hypercore) – A p2p network for distributing and replicating static feeds of binary data.
* [ipfs](https://github.com/ipfs/js-ipfs-api) – The InterPlanetary File System, a new peer-to-peer hypermedia protocol.
* [k-bucket](https://github.com/tristanls/k-bucket) – Kademlia DHT K-bucket implementation as a binary tree.
* [k-rpc](https://github.com/mafintosh/k-rpc) – Implementation of the k-rpc protocol used the BitTorrent DHT. Also see [k-rpc-socket](https://github.com/mafintosh/k-rpc-socket).
* [mdns](https://github.com/agnat/node_mdns) – mdns/zeroconf/bonjour service discovery.
* [multicast-dns](https://github.com/mafintosh/multicast-dns) – Low level multicast-dns implementation.
* [peervision](https://github.com/mafintosh/peervision) – Live p2p streaming protocol.
* [polo](https://github.com/mafintosh/polo) – A zero configuration service discovery module.
* [rtsp-server](https://github.com/watson/rtsp-server) – A low level module for creating RTSP servers.
* [utp-native](https://github.com/mafintosh/utp-native) – micro transport protocol, a network protocol similar to tcp that runs on top of udp.
