diff --git a/README.md b/README.md
index 0fa5b21858d34fd4a3d0657e6ea336f27d1de781..8d9cf4f898edd71c547a46f491796aaff4183b6d 100644
--- a/README.md
+++ b/README.md
@@ -14,8 +14,6 @@
-
-
@@ -109,21 +107,87 @@ $ gx test ./p2p/
### Packages
-> **WIP**
+> This table is generated using the module [`package-table`](https://github.com/ipfs-shipyard/package-table) with `package-table --data=package-list.json`.
List of packages currently in existence for libp2p:
-| Package | Version | CI |
-|--------------------|---------|---------------------|
-| **Transports** |
-| **Connection Upgrades** |
-| **Stream Muxers** |
-| **Discovery** |
-| **Crypto Channels** |
-| **Peer Routing** |
-| **Content Routing** |
-| **Miscellaneous** |
-| **Data Types** |
+| Name | CI/Travis | CI/Jenkins | Coverage | Description |
+| ---------|---------|---------|---------|--------- |
+| **Libp2p** |
+| [`go-libp2p`](//github.com/libp2p/go-libp2p) | [](https://travis-ci.org/libp2p/go-libp2p) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p) | go-libp2p entry point |
+| [`go-libp2p-host`](//github.com/libp2p/go-libp2p-host) | [](https://travis-ci.org/libp2p/go-libp2p-host) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-host) | libp2p "host" interface |
+| [`minimal implementation of the "host" interface`](//github.com/libp2p/go-libp2p-blankhost) | [](https://travis-ci.org/libp2p/go-libp2p-blankhost) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-blankhost) | |
+| **Network** |
+| [`go-libp2p-net`](//github.com/libp2p/go-libp2p-net) | [](https://travis-ci.org/libp2p/go-libp2p-net) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-net) | libp2p connection and "network" interfaces |
+| [`go-libp2p-swarm`](//github.com/libp2p/go-libp2p-swarm) | [](https://travis-ci.org/libp2p/go-libp2p-swarm) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p-swarm/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p-swarm) | reference implementation |
+| **Transport** |
+| [`go-libp2p-transport`](//github.com/libp2p/go-libp2p-transport) | [](https://travis-ci.org/libp2p/go-libp2p-transport) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-transport) | interfaces |
+| [`go-ws-transport`](//github.com/libp2p/go-ws-transport) | [](https://travis-ci.org/libp2p/go-ws-transport) | N/A | [](https://codecov.io/gh/libp2p/go-ws-transport) | WebSocket transport |
+| [`go-tcp-transport`](//github.com/libp2p/go-tcp-transport) | [](https://travis-ci.org/libp2p/go-tcp-transport) | N/A | [](https://codecov.io/gh/libp2p/go-tcp-transport) | TCP transport |
+| [`go-libp2p-quic-transport`](//github.com/libp2p/go-libp2p-quic-transport) | [](https://travis-ci.org/libp2p/go-libp2p-quic-transport) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-quic-transport) | QUIC transport |
+| [`go-udp-transport`](//github.com/libp2p/go-udp-transport) | [](https://travis-ci.org/libp2p/go-udp-transport) | N/A | [](https://codecov.io/gh/libp2p/go-udp-transport) | UDP transport |
+| [`go-utp-transport`](//github.com/libp2p/go-utp-transport) | [](https://travis-ci.org/libp2p/go-utp-transport) | N/A | [](https://codecov.io/gh/libp2p/go-utp-transport) | uTorrent transport (UTP) |
+| [`go-libp2p-circuit`](//github.com/libp2p/go-libp2p-circuit) | [](https://travis-ci.org/libp2p/go-libp2p-circuit) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p-circuit/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p-circuit) | relay transport |
+| [`go-libp2p-transport-upgrader`](//github.com/libp2p/go-libp2p-transport-upgrader) | [](https://travis-ci.org/libp2p/go-libp2p-transport-upgrader) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-transport-upgrader) | upgrades multiaddr-net connections into full libp2p transports |
+| [`go-libp2p-reuseport-transport`](//github.com/libp2p/go-libp2p-reuseport-transport) | [](https://travis-ci.org/libp2p/go-libp2p-reuseport-transport) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-reuseport-transport) | partial transport for building transports that reuse ports |
+| **Encrypted Channels** |
+| [`go-conn-security`](//github.com/libp2p/go-conn-security) | [](https://travis-ci.org/libp2p/go-conn-security) | N/A | [](https://codecov.io/gh/libp2p/go-conn-security) | interfaces |
+| [`go-libp2p-secio`](//github.com/libp2p/go-libp2p-secio) | [](https://travis-ci.org/libp2p/go-libp2p-secio) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-secio) | SecIO crypto channel |
+| [`go-conn-security-multistream`](//github.com/libp2p/go-conn-security-multistream) | [](https://travis-ci.org/libp2p/go-conn-security-multistream) | N/A | [](https://codecov.io/gh/libp2p/go-conn-security-multistream) | multistream multiplexed meta crypto channel |
+| **Private Network** |
+| [`go-libp2p-interface-pnet`](//github.com/libp2p/go-libp2p-interface-pnet) | [](https://travis-ci.org/libp2p/go-libp2p-interface-pnet) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-interface-pnet) | interfaces |
+| [`go-libp2p-pnet`](//github.com/libp2p/go-libp2p-pnet) | [](https://travis-ci.org/libp2p/go-libp2p-pnet) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-pnet) | reference implementation |
+| **Stream Muxers** |
+| [`go-stream-muxer`](//github.com/libp2p/go-stream-muxer) | [](https://travis-ci.org/libp2p/go-stream-muxer) | N/A | [](https://codecov.io/gh/libp2p/go-stream-muxer) | interfaces |
+| [`go-smux-yamux`](//github.com/whyrusleeping/go-smux-yamux) | [](https://travis-ci.org/whyrusleeping/go-smux-yamux) | N/A | [](https://codecov.io/gh/whyrusleeping/go-smux-yamux) | YAMUX stream multiplexer |
+| [`go-smux-mplex`](//github.com/whyrusleeping/go-smux-mplex) | [](https://travis-ci.org/whyrusleeping/go-smux-mplex) | N/A | [](https://codecov.io/gh/whyrusleeping/go-smux-mplex) | MPLEX stream multiplexer |
+| **NAT Traversal** |
+| [`go-libp2p-nat`](//github.com/libp2p/go-libp2p-nat) | [](https://travis-ci.org/libp2p/go-libp2p-nat) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-nat) | |
+| **Peerstore** |
+| [`go-libp2p-peerstore`](//github.com/libp2p/go-libp2p-peerstore) | [](https://travis-ci.org/libp2p/go-libp2p-peerstore) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-peerstore) | interfaces and reference implementation |
+| **Connection Manager** |
+| [`go-libp2p-interface-connmgr`](//github.com/libp2p/go-libp2p-interface-connmgr) | [](https://travis-ci.org/libp2p/go-libp2p-interface-connmgr) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-interface-connmgr) | interface |
+| [`go-libp2p-connmgr`](//github.com/libp2p/go-libp2p-connmgr) | [](https://travis-ci.org/libp2p/go-libp2p-connmgr) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-connmgr) | reference implementation |
+| **Routing** |
+| [`go-libp2p-routing`](//github.com/libp2p/go-libp2p-routing) | [](https://travis-ci.org/libp2p/go-libp2p-routing) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-routing) | routing interfaces |
+| [`go-libp2p-record`](//github.com/libp2p/go-libp2p-record) | [](https://travis-ci.org/libp2p/go-libp2p-record) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-record) | record type and validator logic |
+| [`go-libp2p-routing-helpers`](//github.com/libp2p/go-libp2p-routing-helpers) | [](https://travis-ci.org/libp2p/go-libp2p-routing-helpers) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-routing-helpers) | helpers for composing routers |
+| [`go-libp2p-kad-dht`](//github.com/libp2p/go-libp2p-kad-dht) | [](https://travis-ci.org/libp2p/go-libp2p-kad-dht) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p-kad-dht/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p-kad-dht) | Kademlia-like router |
+| [`go-libp2p-pubsub-router`](//github.com/libp2p/go-libp2p-pubsub-router) | [](https://travis-ci.org/libp2p/go-libp2p-pubsub-router) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-pubsub-router) | record-store over pubsub adapter |
+| [`go-libp2p-coral-dht`](//github.com/libp2p/go-libp2p-coral-dht) | [](https://travis-ci.org/libp2p/go-libp2p-coral-dht) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-coral-dht) | CoralDHT implementation of the routing interfaces |
+| **Consensus** |
+| [`go-libp2p-consensus`](//github.com/libp2p/go-libp2p-consensus) | [](https://travis-ci.org/libp2p/go-libp2p-consensus) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-consensus) | consensus protocols interfaces |
+| [`go-libp2p-raft`](//github.com/libp2p/go-libp2p-raft) | [](https://travis-ci.org/libp2p/go-libp2p-raft) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p-raft/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p-raft) | consensus implementation over raft |
+| **Pubsub** |
+| [`go-libp2p-pubsub`](//github.com/libp2p/go-libp2p-pubsub) | [](https://travis-ci.org/libp2p/go-libp2p-pubsub) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-pubsub) | pubsub interfaces |
+| [`go-floodsub`](//github.com/libp2p/go-floodsub) | [](https://travis-ci.org/libp2p/go-floodsub) | [](https://ci.ipfs.team/job/libp2p/job/go-floodsub/job/master/) | [](https://codecov.io/gh/libp2p/go-floodsub) | basic implementation of pubsub driven by flooding |
+| **Protocols** |
+| [`go-libp2p-ping`](//github.com/libp2p/go-libp2p-ping) | [](https://travis-ci.org/libp2p/go-libp2p-ping) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-ping) | a ping-pong protocol implementation |
+| **Metrics** |
+| [`go-libp2p-metrics`](//github.com/libp2p/go-libp2p-metrics) | [](https://travis-ci.org/libp2p/go-libp2p-metrics) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-metrics) | libp2p metrics interfaces/collectors |
+| **Data Types** |
+| [`go-libp2p-peer`](//github.com/libp2p/go-libp2p-peer) | [](https://travis-ci.org/libp2p/go-libp2p-peer) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-peer) | libp2p peer-ID datatype |
+| [`go-libp2p-crypto`](//github.com/libp2p/go-libp2p-crypto) | [](https://travis-ci.org/libp2p/go-libp2p-crypto) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-crypto) | libp2p key types |
+| [`go-libp2p-protocol`](//github.com/libp2p/go-libp2p-protocol) | [](https://travis-ci.org/libp2p/go-libp2p-protocol) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-protocol) | libp2p protocol datatype |
+| [`go-libp2p-kbucket`](//github.com/libp2p/go-libp2p-kbucket) | [](https://travis-ci.org/libp2p/go-libp2p-kbucket) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-kbucket) | Kademila routing table helper types |
+| **Utilities/miscellaneous** |
+| [`go-libp2p-loggables`](//github.com/libp2p/go-libp2p-loggables) | [](https://travis-ci.org/libp2p/go-libp2p-loggables) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-loggables) | logging helpers |
+| [`go-maddr-filter`](//github.com/libp2p/go-maddr-filter) | [](https://travis-ci.org/libp2p/go-maddr-filter) | N/A | [](https://codecov.io/gh/libp2p/go-maddr-filter) | multiaddr filtering helpers |
+| [`go-libp2p-netutil`](//github.com/libp2p/go-libp2p-netutil) | [](https://travis-ci.org/libp2p/go-libp2p-netutil) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-netutil) | misc utilities |
+| [`go-msgio`](//github.com/libp2p/go-msgio) | [](https://travis-ci.org/libp2p/go-msgio) | N/A | [](https://codecov.io/gh/libp2p/go-msgio) | length prefixed data channel |
+| [`go-addr-util`](//github.com/libp2p/go-addr-util) | [](https://travis-ci.org/libp2p/go-addr-util) | N/A | [](https://codecov.io/gh/libp2p/go-addr-util) | address utilities for libp2p swarm |
+| [`go-buffer-pool`](//github.com/libp2p/go-buffer-pool) | [](https://travis-ci.org/libp2p/go-buffer-pool) | N/A | [](https://codecov.io/gh/libp2p/go-buffer-pool) | a variable size buffer pool for go |
+| [`go-libp2p-loggables`](//github.com/libp2p/go-libp2p-loggables) | [](https://travis-ci.org/libp2p/go-libp2p-loggables) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-loggables) | logging helpers |
+| [`go-libp2p-routing-helpers`](//github.com/libp2p/go-libp2p-routing-helpers) | [](https://travis-ci.org/libp2p/go-libp2p-routing-helpers) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-routing-helpers) | routing helpers |
+| [`go-maddr-filter`](//github.com/libp2p/go-maddr-filter) | [](https://travis-ci.org/libp2p/go-maddr-filter) | N/A | [](https://codecov.io/gh/libp2p/go-maddr-filter) | a library to perform filtering of multiaddrs. |
+| [`go-reuseport`](//github.com/libp2p/go-reuseport) | [](https://travis-ci.org/libp2p/go-reuseport) | N/A | [](https://codecov.io/gh/libp2p/go-reuseport) | enables reuse of addresses |
+| [`go-sockaddr`](//github.com/libp2p/go-sockaddr) | [](https://travis-ci.org/libp2p/go-sockaddr) | N/A | [](https://codecov.io/gh/libp2p/go-sockaddr) | utils for sockaddr conversions |
+| [`go-flow-metrics`](//github.com/libp2p/go-flow-metrics) | [](https://travis-ci.org/libp2p/go-flow-metrics) | N/A | [](https://codecov.io/gh/libp2p/go-flow-metrics) | metrics library |
+| **Testing and examples** |
+| [`go-testutil`](//github.com/libp2p/go-testutil) | [](https://travis-ci.org/libp2p/go-testutil) | N/A | [](https://codecov.io/gh/libp2p/go-testutil) | a collection of testing utilities for ipfs and libp2p |
+| [`go-libp2p-dummy-conn`](//github.com/libp2p/go-libp2p-dummy-conn) | [](https://travis-ci.org/libp2p/go-libp2p-dummy-conn) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-dummy-conn) | a dummy libp2p connection for testing |
+| [`go-libp2p-examples`](//github.com/libp2p/go-libp2p-examples) | [](https://travis-ci.org/libp2p/go-libp2p-examples) | [](https://ci.ipfs.team/job/libp2p/job/go-libp2p-examples/job/master/) | [](https://codecov.io/gh/libp2p/go-libp2p-examples) | go-libp2p examples and tutorials |
+| [`go-libp2p-circuit-progs`](//github.com/libp2p/go-libp2p-circuit-progs) | [](https://travis-ci.org/libp2p/go-libp2p-circuit-progs) | N/A | [](https://codecov.io/gh/libp2p/go-libp2p-circuit-progs) | testing programs for go-libp2p-circuit |
# Contribute
diff --git a/package-list.json b/package-list.json
new file mode 100644
index 0000000000000000000000000000000000000000..7188742af439b8571a176cb4a6667461eb9aa4d9
--- /dev/null
+++ b/package-list.json
@@ -0,0 +1,103 @@
+{
+ "columns": [
+ "Name",
+ "CI/Travis",
+ "CI/Jenkins",
+ "Coverage",
+ "Description"
+ ],
+ "rows": [
+ "Libp2p",
+ ["libp2p/go-libp2p", "go-libp2p", "go-libp2p entry point"],
+ ["libp2p/go-libp2p-host", "go-libp2p-host", "libp2p \"host\" interface"],
+ ["libp2p/go-libp2p-blankhost", "go-libp2p-blankhost", "minimal implementation of the \"host\" interface"],
+
+ "Network",
+ ["libp2p/go-libp2p-net", "go-libp2p-net", "libp2p connection and \"network\" interfaces"],
+ ["libp2p/go-libp2p-swarm", "go-libp2p-swarm", "reference implementation"],
+
+ "Transport",
+ ["libp2p/go-libp2p-transport", "go-libp2p-transport", "interfaces"],
+ ["libp2p/go-ws-transport", "go-ws-transport", "WebSocket transport"],
+ ["libp2p/go-tcp-transport", "go-tcp-transport", "TCP transport"],
+ ["libp2p/go-libp2p-quic-transport", "go-libp2p-quic-transport", "QUIC transport"],
+ ["libp2p/go-udp-transport", "go-udp-transport", "UDP transport"],
+ ["libp2p/go-utp-transport", "go-utp-transport", "uTorrent transport (UTP)"],
+ ["libp2p/go-libp2p-circuit", "go-libp2p-circuit", "relay transport"],
+ ["libp2p/go-libp2p-transport-upgrader", "go-libp2p-transport-upgrader", "upgrades multiaddr-net connections into full libp2p transports"],
+ ["libp2p/go-libp2p-reuseport-transport", "go-libp2p-reuseport-transport", "partial transport for building transports that reuse ports"],
+
+ "Encrypted Channels",
+ ["libp2p/go-conn-security", "go-conn-security", "interfaces"],
+ ["libp2p/go-libp2p-secio", "go-libp2p-secio", "SecIO crypto channel"],
+ ["libp2p/go-conn-security-multistream", "go-conn-security-multistream", "multistream multiplexed meta crypto channel"],
+
+ "Private Network",
+ ["libp2p/go-libp2p-interface-pnet", "go-libp2p-interface-pnet", "interfaces"],
+ ["libp2p/go-libp2p-pnet", "go-libp2p-pnet", "reference implementation"],
+
+ "Stream Muxers",
+ ["libp2p/go-stream-muxer", "go-stream-muxer", "interfaces"],
+ ["whyrusleeping/go-smux-yamux", "go-smux-yamux", "YAMUX stream multiplexer"],
+ ["whyrusleeping/go-smux-mplex", "go-smux-mplex", "MPLEX stream multiplexer"],
+
+ "NAT Traversal",
+ ["libp2p/go-libp2p-nat", "go-libp2p-nat"],
+
+ "Peerstore",
+ ["libp2p/go-libp2p-peerstore", "go-libp2p-peerstore", "interfaces and reference implementation"],
+
+ "Connection Manager",
+ ["libp2p/go-libp2p-interface-connmgr", "go-libp2p-interface-connmgr", "interface"],
+ ["libp2p/go-libp2p-connmgr", "go-libp2p-connmgr", "reference implementation"],
+
+ "Routing",
+ ["libp2p/go-libp2p-routing", "go-libp2p-routing", "routing interfaces"],
+ ["libp2p/go-libp2p-record", "go-libp2p-record", "record type and validator logic"],
+ ["libp2p/go-libp2p-routing-helpers", "go-libp2p-routing-helpers", "helpers for composing routers"],
+ ["libp2p/go-libp2p-kad-dht", "go-libp2p-kad-dht", "Kademlia-like router"],
+ ["libp2p/go-libp2p-pubsub-router", "go-libp2p-pubsub-router", "record-store over pubsub adapter"],
+ ["libp2p/go-libp2p-coral-dht", "go-libp2p-coral-dht", "CoralDHT implementation of the routing interfaces"],
+
+ "Consensus",
+ ["libp2p/go-libp2p-consensus", "go-libp2p-consensus", "consensus protocols interfaces"],
+ ["libp2p/go-libp2p-raft", "go-libp2p-raft", "consensus implementation over raft"],
+
+ "Pubsub",
+ ["libp2p/go-libp2p-pubsub", "go-libp2p-pubsub", "pubsub interfaces"],
+ ["libp2p/go-floodsub", "go-floodsub", "basic implementation of pubsub driven by flooding"],
+
+ "Protocols",
+ ["libp2p/go-libp2p-ping", "go-libp2p-ping", "a ping-pong protocol implementation"],
+
+ "Metrics",
+ ["libp2p/go-libp2p-metrics", "go-libp2p-metrics", "libp2p metrics interfaces/collectors"],
+
+ "Data Types",
+ ["libp2p/go-libp2p-peer", "go-libp2p-peer", "libp2p peer-ID datatype"],
+ ["libp2p/go-libp2p-crypto", "go-libp2p-crypto", "libp2p key types"],
+ ["libp2p/go-libp2p-protocol", "go-libp2p-protocol", "libp2p protocol datatype"],
+ ["libp2p/go-libp2p-kbucket", "go-libp2p-kbucket", "Kademila routing table helper types"],
+
+ "Utilities/miscellaneous",
+ ["libp2p/go-libp2p-loggables", "go-libp2p-loggables", "logging helpers"],
+ ["libp2p/go-maddr-filter", "go-maddr-filter", "multiaddr filtering helpers"],
+ ["libp2p/go-libp2p-netutil", "go-libp2p-netutil", "misc utilities"],
+ ["libp2p/go-msgio", "go-msgio", "length prefixed data channel"],
+ ["libp2p/go-addr-util", "go-addr-util", "address utilities for libp2p swarm"],
+ ["libp2p/go-buffer-pool", "go-buffer-pool", "a variable size buffer pool for go"],
+ ["libp2p/go-libp2p-loggables", "go-libp2p-loggables", "logging helpers"],
+ ["libp2p/go-libp2p-routing-helpers", "go-libp2p-routing-helpers", "routing helpers"],
+ ["libp2p/go-maddr-filter", "go-maddr-filter", "a library to perform filtering of multiaddrs."],
+ ["libp2p/go-reuseport", "go-reuseport", "enables reuse of addresses"],
+ ["libp2p/go-sockaddr", "go-sockaddr", "utils for sockaddr conversions"],
+ ["libp2p/go-flow-metrics", "go-flow-metrics", "metrics library"],
+
+ "Testing and examples",
+ ["libp2p/go-testutil", "go-testutil", "a collection of testing utilities for ipfs and libp2p"],
+ ["libp2p/go-libp2p-dummy-conn", "go-libp2p-dummy-conn", "a dummy libp2p connection for testing"],
+ ["libp2p/go-libp2p-examples", "go-libp2p-examples", "go-libp2p examples and tutorials"],
+ ["libp2p/go-libp2p-circuit-progs", "go-libp2p-circuit-progs", "testing programs for go-libp2p-circuit"]
+
+ ]
+}