- No sentral server
- Connections are direct between machines (Peer to Peer)
- Encrypted end-to-end.
Run npx p2p-socket --help for usage instuctions. Currently only supports TCP, but UDP can/will be added later.
A p2p-socket is just an easy way to connect to another machine over the internet. Here is a step-by-step guide on how Alice can share localhost:3000 with Bob.
For Alice to share localhost:3000 with Bob, she would run:
# Alice
npx p2p-socket share --port 3000This will print the connection information that Alice will have to share with Bob. Note that nobody on the network will find Alice unless she shares her public key with them.
To connect, Bob will run:
# Bob
npx p2p-socket connect --port 3000 --remote-key <alice-public-key>Bob can now access localhost:3000 and reach Alice.
You can use p2p-socket programmatically from Node.js. The package exports two helpers: share and connect.
Example: share a local TCP service:
import { share, createKeyPair } from 'p2p-socket';
const keyPair = createKeyPair();
const proxy = await share({
tcp: { host: 'localhost', port: 3000 },
keyPair,
});
// Remote key for others to connect
const remoteKey = proxy.hostAndKeyPair.publicKey.toString('hex');
// call proxy.unshare() to stop sharing
proxy.unshare();Example: connect and expose a local port that forwards to a remote share:
import { connect } from 'p2p-socket';
const { tcpServer, disconnect } = await connect({
tcp: { host: 'localhost', port: 4000 },
remotePublicKey: Buffer.from('<alice-public-key-hex>', 'hex')
});
// call disconnect() to stop the local proxy
disconnect();To avoid having to reshare your connection information each time you restart your server, run npx p2p-socket create-id. This will create an identity.json file locally. This will enable a consistent remote-key.
Note: The key will still change if you change
hostandport
Inspired by hyperswarm-http-server and made possible by 🕳🥊Holepunch tech.
