• Stars
    star
    117
  • Rank 292,299 (Top 6 %)
  • Language
    JavaScript
  • Created about 7 years ago
  • Updated almost 7 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ Publish and install node packages from the swarm.

peer-npm

an npm-compatible registry backed by peer-to-peer networks

NOTE: Very unstable and mad science-y. Use at your own discretion.

WHY would someone want something like this?

  • I want an easy way to use/publish/install packages when I'm offline
  • I want to be able to install/share packages /w my friends over LAN
  • I want my packages to be available & resistant to censorship & network failure
  • I want a fail-safe in case npm Inc ever goes away or is seized by the government
  • I want a package manager whose backend is 100% permissively open source

Usage

To be used just like vanilla npm, but with a subset of commands: install, remove, and publish.

USAGE:

  peer-npm i, install [-S] [-D]

    Works like `npm install`. Accepts a peer-npm package name to install from
    the swarm.

  peer-npm publish

    Works like `npm publish`. Publish the current package to the swarm.
    Generates a new keypair if one is not already present.

Getting started

Install

With npm installed, run

$ npm install --global peer-npm

Join the swarm

In another window run

$ peer-npm daemon

so that you can download packages from others and share the ones you publish.

Publish a module to the swarm

Let's grab a package from github and try to publish it:

$ cd /tmp

$ git clone https://github.com/noffle/resync-srt

$ cd resync-srt

$ npm install

$ peer-npm publish
+ resync-srt_hyperdrive_c5abee5fd496620499c3d203f15c95d24a51d16ec05dea4a8ab2c88368c296b9
Published 3.1.0

resync-srt is now in the swarm! The name of the package is made of three parts, concatenated by underscores: the package name, the peer network its shared on, and the public key of the publisher.

Install a swarm dependency

Let's make a new package that depends on resync-srt:

$ cd /tmp
$ mkdir foobar
$ cd foobar

$ npm init

# you'll want to use the package name generated from the last step
$ peer-npm install --save resync-srt_hyperdrive_c5abee5fd496620499c3d203f15c95d24a51d16ec05dea4a8ab2c88368c296b9

If you look in your package.json you'll see a new section called swarmDependencies. This lets peer-npm know what packages you depend on in the swarm, but in a way that keeps vanilla npm working.

In fact, you can have a package in both swarmDependencies and regular dependencies. Using peer-npm won't break your package for non-peer-npm users.

How does it work?

peer-npm pretends to be an npm registry, but running on your local machine. When you run peer-npm daemon it runs this registry (and also does the peering logic).

peer-npm install is mostly a wrapper for something like npm install --registry=http://localhost:9000.

When you publish or try to install a package, peer-npm looks at its name to decide whether it is a package from the central npm registry, or from the swarm.

npm packages have a name like field-trip, whereas swarm packages have a name like field-trip_hyperdrive_79cf7ecc9baf627642099542b3714bbef. The part after the name is the public key of the author. This makes packages resiliant against impersonation or malicious peers.

peer-npm can work with different peer networks; right now there is only a hyperdrive driver, which is the default.

When you run peer-npm install it will find other peers with the packages you want and download them, recursively down the dependency tree. Similarly, when you run peer-npm publish, the new package's key is shared amongst other peer-npm peers for future discovery.

IRC

Come hang out in #peer-npm on Freenode to help test and develop!

License

ISC

More Repositories

1

art-of-readme

๐Ÿ’Œ Things I've learned about writing good READMEs.
7,000
star
2

common-readme

๐ŸŒŸ ยซ a common readme for node ยป
JavaScript
378
star
3

git-ssb-intro

๐Ÿ”ง Learn git-ssb: a decentralized GitHub alternative.
372
star
4

hypergit

Manage and clone peer-to-peer git repositories.
JavaScript
205
star
5

hyperpad

๐ŸŽ A peer-to-peer collaborative text editor for people and their communities.
JavaScript
196
star
6

electron-speech

๐ŸŽค Easy speech recognition in Node!
JavaScript
170
star
7

wisdom

๐Ÿ“œ My little collection of personal wisdom.
132
star
8

p2p-handbook

๐Ÿด Let's learn how to peer-to-peer!
129
star
9

web-udp

Experiment for a web standard for creating and using UDP sockets in the browser
79
star
10

airpipe

Create a stdin/stdout pipe easily over wifi or internet.
JavaScript
79
star
11

nano-ecs

๐Ÿ”น A nano-sized Entity-Component-System library.
JavaScript
59
star
12

p2p-faq

โ“ Commonly asked questions about peer-to-peer networks & programs.
59
star
13

ipfs-hyperlog

๐Ÿ”— IPFS Merkle DAG that replicates based on append-only logs and causal linking.
JavaScript
58
star
14

gitverse

local offline p2p social git frontend
JavaScript
56
star
15

ice-box

โ„๏ธ Create immutable directory pipelines.
JavaScript
52
star
16

ipfs-blog

๐ŸŒ Host a blog ..without the hosting!
JavaScript
47
star
17

hyperpad-desktop

๐ŸŽ A peer-to-peer collaborative text editor for people and their communities.
CSS
45
star
18

airfile

๐Ÿ“ค Painlessly transfer files from a web browser to your local machine
JavaScript
44
star
19

friendpm

๐Ÿ‘ญ Share, publish, and install node packages from your cache over the local network.
JavaScript
42
star
20

secure-gossip

๐Ÿ“ž Secure, transport agnostic, message gossip protocol.
JavaScript
40
star
21

ssb-npm-101

Installing & using npm with secure scuttlebutt.
38
star
22

hyper-string

conflict-free p2p string data structure powered by a hyperlog of operations
JavaScript
38
star
23

pubsub-swarm

๐Ÿ Form a p2p swarm of nodes around a topic and exchange messages.
JavaScript
34
star
24

sailing-patchfoo

Sail the high seas of scuttlebutt with Patchfoo! โ›ต
34
star
25

txt-blit

Draw lines of text onto other lines of text. Cooler than it sounds.
JavaScript
28
star
26

hyperdb-index

Build a realtime index over a hyperdb.
JavaScript
28
star
27

voicetube

๐ŸŽต Voice controlled YouTube music player in the browser, ideal for hands-free environments.
JavaScript
25
star
28

recs

๐Ÿ”” functional entity-component-system experiment
JavaScript
23
star
29

ssb-webify

publish a local directory into a scuttlebutt website
JavaScript
22
star
30

kappa-chat

p2p anarchist real-time communication protocol using append-only logs
JavaScript
22
star
31

screen-stream

๐Ÿ“น Get a video stream of your computer's display.
JavaScript
22
star
32

mic-stream

[UNMAINTAINED] ๐ŸŽค Get a stream of audio data from the microphone on the browser or with Node!
JavaScript
22
star
33

exrot

๐Ÿ“ท Snap webcam photos from the command line.
JavaScript
21
star
34

noffle-business-card

JavaScript
21
star
35

ipcat

๐Ÿˆ Retrieve IPFS object data and send it to stdout.
Go
19
star
36

textarea-op-stream

readable stream of a textarea's inserts and deletes
JavaScript
18
star
37

hyper-textarea

Back a textarea with a hyper-string for conflict-free p2p replication!
JavaScript
18
star
38

binary-fsk

encode & decode binary frequency-shift keyed signals to/from data
JavaScript
18
star
39

github-dependency-crawl

๐Ÿชฒ Crawl GitHub issues to build a dependency graph
JavaScript
18
star
40

hypercore-private-box

Encrypt messages that only members from a set of hypercores can decrypt.
JavaScript
16
star
41

phaser-capture

Phaser (http://www.phaser.io) plugin for easily capturing screenshots (PNG, JPEG) and videos (GIF, WebM).
JavaScript
16
star
42

tdag

Plaintext task management for graph nerds.
JavaScript
15
star
43

git-remote-hypergit

git remote for hypergit
JavaScript
15
star
44

ssb-exchange

Fully sync two secure-scuttlebutt databases over a duplex stream.
JavaScript
15
star
45

docstrings

Interpret a string literal at the beginning of a function as its documentation.
JavaScript
15
star
46

latest-tweets

๐Ÿฆ Get a JSON array of a Twitter user's latest tweets -- no Twitter API required!
JavaScript
15
star
47

hyperdb-git-repo

p2p git repo primitive
JavaScript
14
star
48

dotfiles

๐Ÿ”ฉ Most of my *nix-y configuration files.
Vim Script
13
star
49

picast

๐Ÿ“บ Play media from your computer on a Raspberry Pi.
JavaScript
13
star
50

twitter-kv

๐Ÿฆ Key-value store over twitter user feeds
JavaScript
13
star
51

agenda-cli

๐Ÿ“† Keep track of things in the future.
JavaScript
12
star
52

internet-of-buckets

http wrapper for controlling The Internet of Buckets art installation
JavaScript
11
star
53

bisecting-between

๐Ÿ”ช Produces a unique value that sorts between two other given values.
JavaScript
11
star
54

osm-tty

Interactive offline OpenStreetMap viewer in the terminal.
JavaScript
11
star
55

raycast-2d-tilemap

๐Ÿ”ณ Test a ray for intersections against a 2D tile map.
JavaScript
11
star
56

grid-point-store

Fast 2D point insertions and spatial querying over grid of fixed size cells.
JavaScript
11
star
57

hyperdb-git

JavaScript
10
star
58

goertzel

๐ŸŽค Fast frequency detection using the Goertzel algorithm.
JavaScript
10
star
59

hpad

๐Ÿ“„ Peer-to-peer documents from the command line.
JavaScript
9
star
60

hyperswarm

๐Ÿœ Create a p2p webrtc swarm around a hyperlog.
JavaScript
9
star
61

danceparty

๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ ๐Ÿ‘ฏ
JavaScript
9
star
62

rotating_8bit_wallpapers

A little script that sets up rotating wallpapers on your desktop based on the time of day. Hooray!
Shell
9
star
63

mapbox-style-downloader

JavaScript
8
star
64

twitter-rss-noauth

๐Ÿฆ Retrieves a Twitter timeline and outputs an RSS feed -- without the Twitter API!
JavaScript
8
star
65

p2p-db

An open-ended peer-to-peer database.
JavaScript
8
star
66

hypercore-progress

Track upload/download progress of a hypercore replication stream.
JavaScript
7
star
67

collide-2d-aabb-aabb

๐Ÿ’ฅ Determines whether a moving axis-aligned bounding box (AABB) collides with other AABBs.
JavaScript
7
star
68

tile-dl

JavaScript
7
star
69

ssb-web-resolver

JavaScript
7
star
70

goertzel-stream

๐ŸŽต Detects the presence of a single frequency in a stream of signal samples.
JavaScript
7
star
71

argv-or-stdin

use the 1st argument, or, if none is present, standard input
JavaScript
7
star
72

gdx-immediate-gui

๐ŸŽฎ Immediate-style GUI for Java and libgdx, inspired by imgui.
Java
7
star
73

hyperlog-doctor

๐Ÿ’Š cli tool for checking and repairing hyperlogs
JavaScript
6
star
74

geohash-point-store

๐ŸŒ Store and query spatial points using geohashes and LevelDB.
JavaScript
6
star
75

chacha-stream

Encryption and decryption streams of libsodium's chacha20 implementation.
JavaScript
6
star
76

hyperlog-reduce

Implement an async reduce function over a hyperlog.
JavaScript
6
star
77

collide-2d-aabb-tilemap

๐Ÿ’ฅ Collision handling for bounding boxes and a tile map.
JavaScript
6
star
78

handshake-stream

wrap a duplex stream in a two-way handshake
JavaScript
6
star
79

fallback-ipfs-shell

Provides access to either a running or new IPFS node, in that order of preference.
Go
6
star
80

web-ready

CLI to not exit until a button is pressed on a local website.
JavaScript
5
star
81

sort-subset

sort a subset of an array in-place
JavaScript
5
star
82

ipfs-twitter-resolver

resolve /twitter/user/key to an IPFS address
JavaScript
5
star
83

behaviortree-sexp

A S-expression parser for behaviour trees.
JavaScript
5
star
84

pi-voice-command-google

Recognize a single voice command on a Raspberry Pi using the Google Speech API.
JavaScript
5
star
85

p2p-file-store

Filesystem-based blob store that syncs to other fs-based blob stores.
JavaScript
5
star
86

geo-cli

๐ŸŒ Output your device's current longitude/latitude geolocation to stdout.
JavaScript
4
star
87

strapdown-cli

โœจ Produce pretty web pages from markdown.
JavaScript
4
star
88

CHAIN_SWORD

JavaScript
4
star
89

parallel

(Go) โฉ Run many functions in parallel, but fast-bail on errors.
Go
4
star
90

abstract-point-store

Test suite & interface to implement a geographic point storage backend.
JavaScript
4
star
91

talks

๐ŸŽค Talks that I've given.
HTML
4
star
92

patchfoo

github mirror of patchfoo (from git-ssb). maybe not quite so up-to-date
JavaScript
4
star
93

bisecting-numbers

โœ‚๏ธ Integer-like number system where any number can be bisected to form infinite integer subsystems.
JavaScript
4
star
94

ssb-clientkit

TypeScript
4
star
95

tone-cli

Generate a tone from the command line.
JavaScript
4
star
96

geo-legacy

๐Ÿ“ฆ ๐ŸŒ Get the geo-coordinates of every package at every version an author has published.
JavaScript
4
star
97

field-trip

๐Ÿšฉ Walk an unknown directed graph async
JavaScript
4
star
98

merkle-treehouse

experiment
3
star
99

mapeo-protocol

JavaScript
3
star
100

append-only-log

๐Ÿš‹ ๐Ÿš‹ ๐Ÿš‹ Test suite & interface for append-only log modules.
JavaScript
3
star