44
55** Bifrost** is a peer-to-peer communications engine with pluggable transports:
66
7- - ** Cross-platform** : supports web browsers, servers, desktop, mobile, ...
8- - ** Efficient** : multiplex many simultaneous streams over a single Link.
9- - ** Encryption** : identify, authenticate, and encrypt each Link between peers.
10- - ** Flexible** : use multiple transports, protocols, simultaneously.
11- - ** Meshing** : supports multi-hop routing to a desired target peer w/ circuits.
12- - ** PubSub** : publish/subscribe channels with pluggable implementations.
13- - ** Robust** : uses Quic for lossless links over lossy transports.
7+ - ** Cross-platform** : supports web browsers, servers, desktop, mobile, ...
8+ - ** Efficient** : multiplex many simultaneous streams over a single Link.
9+ - ** Encryption** : identify, authenticate, and encrypt each Link between peers.
10+ - ** Flexible** : use multiple transports, protocols, simultaneously.
11+ - ** Meshing** : supports multi-hop routing to a desired target peer w/ circuits.
12+ - ** PubSub** : publish/subscribe channels with pluggable implementations.
13+ - ** Robust** : uses Quic for lossless links over lossy transports.
1414
1515Bifrost uses [ ControllerBus] controllers and directives to send any protocol
1616over any transport with extensive and flexible configuration.
@@ -22,21 +22,21 @@ over any transport with extensive and flexible configuration.
2222[ ![ Go Reference Widget]] [ Go Reference ] [ ![ Go Report Card Widget]] [ Go Report Card ] [ ![ DeepWiki Widget]] [ DeepWiki ]
2323
2424[ Go Reference ] : https://pkg.go.dev/github.com/aperturerobotics/bifrost
25- [ Go Reference Widget ] :https://pkg.go.dev/badge/github.com/aperturerobotics/bifrost.svg
25+ [ Go Reference Widget ] : https://pkg.go.dev/badge/github.com/aperturerobotics/bifrost.svg
2626[ Go Report Card Widget ] : https://goreportcard.com/badge/github.com/aperturerobotics/bifrost
2727[ Go Report Card ] : https://goreportcard.com/report/github.com/aperturerobotics/bifrost
2828[DeepWiki Widget]: https://img.shields.io/badge/DeepWiki-aperturerobotics%2Fbifrost-blue.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAyCAYAAAAnWDnqAAAAAXNSR0IArs4c6QAAA05JREFUaEPtmUtyEzEQhtWTQyQLHNak2AB7ZnyXZMEjXMGeK/AIi+QuHrMnbChYY7MIh8g01fJoopFb0uhhEqqcbWTp06/uv1saEDv4O3n3dV60RfP947Mm9/SQc0ICFQgzfc4CYZoTPAswgSJCCUJUnAAoRHOAUOcATwbmVLWdGoH//PB8mnKqScAhsD0kYP3j/Yt5LPQe2KvcXmGvRHcDnpxfL2zOYJ1mFwrryWTz0advv1Ut4CJgf5uhDuDj5eUcAUoahrdY/56ebRWeraTjMt/00Sh3UDtjgHtQNHwcRGOC98BJEAEymycmYcWwOprTgcB6VZ5JK5TAJ+fXGLBm3FDAmn6oPPjR4rKCAoJCal2eAiQp2x0vxTPB3ALO2CRkwmDy5WohzBDwSEFKRwPbknEggCPB/imwrycgxX2NzoMCHhPkDwqYMr9tRcP5qNrMZHkVnOjRMWwLCcr8ohBVb1OMjxLwGCvjTikrsBOiA6fNyCrm8V1rP93iVPpwaE+gO0SsWmPiXB+jikdf6SizrT5qKasx5j8ABbHpFTx+vFXp9EnYQmLx02h1QTTrl6eDqxLnGjporxl3NL3agEvXdT0WmEost648sQOYAeJS9Q7bfUVoMGnjo4AZdUMQku50McDcMWcBPvr0SzbTAFDfvJqwLzgxwATnCgnp4wDl6Aa+Ax283gghmj+vj7feE2KBBRMW3FzOpLOADl0Isb5587h/U4gGvkt5v60Z1VLG8BhYjbzRwyQZemwAd6cCR5/XFWLYZRIMpX39AR0tjaGGiGzLVyhse5C9RKC6ai42ppWPKiBagOvaYk8lO7DajerabOZP46Lby5wKjw1HCRx7p9sVMOWGzb/vA1hwiWc6jm3MvQDTogQkiqIhJV0nBQBTU+3okKCFDy9WwferkHjtxib7t3xIUQtHxnIwtx4mpg26/HfwVNVDb4oI9RHmx5WGelRVlrtiw43zboCLaxv46AZeB3IlTkwouebTr1y2NjSpHz68WNFjHvupy3q8TFn3Hos2IAk4Ju5dCo8B3wP7VPr/FGaKiG+T+v+TQqIrOqMTL1VdWV1DdmcbO8KXBz6esmYWYKPwDL5b5FA1a0hwapHiom0r/cKaoqr+27/XcrS5UwSMbQAAAABJRU5ErkJggg==
2929[ DeepWiki ] : https://deepwiki.com/aperturerobotics/bifrost
3030
3131Bifrost is designed around the following core concepts:
3232
33- - ** Peer** : a routable process or device with a keypair.
34- - ** Transport** : a protocol which can create Links with other peers.
35- - ** Link** : a connection between two peers over a Transport.
36- - ** Stream** : channel of data between two Peer with a protocol type.
37- - ** RPC** : request/reply and bidirectional streaming remote calls.
38- - ** PubSub** : at-least-once delivery of messages to named topics.
39- - ** Signaling** : exchanging messages between peers via a relay server.
33+ - ** Peer** : a routable process or device with a keypair.
34+ - ** Transport** : a protocol which can create Links with other peers.
35+ - ** Link** : a connection between two peers over a Transport.
36+ - ** Stream** : channel of data between two Peer with a protocol type.
37+ - ** RPC** : request/reply and bidirectional streaming remote calls.
38+ - ** PubSub** : at-least-once delivery of messages to named topics.
39+ - ** Signaling** : exchanging messages between peers via a relay server.
4040
4141Integrates with networking, pubsub, and RPC libraries like [ libp2p] , [ starpc] ,
4242and [ pion webrtc] .
@@ -137,11 +137,11 @@ which are not yet exposed via these flags.
137137
138138Most Bifrost functionality is exposed on the client CLI and RPC API:
139139
140- - Mount a peer by loading a private key into the daemon.
141- - Forward incoming streams with a protocol ID to a multiaddress
142- - Proxy incoming connections to a listener to a remote peer
143- - Open a stream with a remote peer and a given protocol ID
144- - Accept a stream for a local peer with a given protocol ID
140+ - Mount a peer by loading a private key into the daemon.
141+ - Forward incoming streams with a protocol ID to a multiaddress
142+ - Proxy incoming connections to a listener to a remote peer
143+ - Open a stream with a remote peer and a given protocol ID
144+ - Accept a stream for a local peer with a given protocol ID
145145
146146The client CLI has the following help output:
147147
@@ -194,7 +194,7 @@ is exposed to the API and command line. Some examples:
194194 # Standard error is used for logging.
195195 bifrost client accept \
196196 --local-peer-id < peer-id> \
197- --protocol-id /x/myproto
197+ --protocol-id /x/myproto
198198
199199 # Establish a stream.
200200 # Standard output is the incoming data stream, standard input is the outgoing data stream.
@@ -259,7 +259,7 @@ between a local port and a remote peer port, similar to SSH port forwarding:
259259
260260This example shows how to run two daemons with information on how to contact
261261each other, and then "tell" the second daemon to listen on port 8002 and forward
262- any incoming connections to the remote peer with the given peer ID.
262+ any incoming connections to the remote peer with the given peer ID.
263263
264264When someone connects to port 8002 the EstablishLinkWithPeer directive is added
265265and the UDP transport opens the connection with the peer (on-demand.) The stream
@@ -330,19 +330,19 @@ Floodsub is currently supported as a PubSub protocol.
330330
331331## Developing
332332
333- If using Go only, you don't need ` yarn ` or ` Node.JS ` .
333+ If using Go only, you don't need ` bun ` or ` Node.JS ` .
334334
335335Bifrost uses [ Protobuf] ( https://protobuf.dev/ ) for message encoding.
336336
337337You can re-generate the protobufs after changing any ` .proto ` file:
338338
339339```
340- # stage the .proto file so yarn gen sees it
340+ # stage the .proto file so bun gen sees it
341341git add .
342342# install deps
343- yarn
343+ bun install
344344# generate the protobufs
345- yarn gen
345+ bun run gen
346346```
347347
348348To run the test suite:
@@ -351,28 +351,15 @@ To run the test suite:
351351# Go tests only
352352go test ./...
353353# All tests
354- yarn test
354+ bun run test
355355# Lint
356- yarn lint
356+ bun run lint
357357```
358358
359359### Developing on MacOS
360360
361- On MacOS, some homebrew packages are required for ` yarn gen ` :
362-
363- ```
364- brew install bash make coreutils gnu-sed findutils protobuf
365- brew link --overwrite protobuf
366- ```
367-
368- Add to your .bashrc or .zshrc:
369-
370- ```
371- export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
372- export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"
373- export PATH="/opt/homebrew/opt/findutils/libexec/gnubin:$PATH"
374- export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"
375- ```
361+ On MacOS, the ` aptre ` CLI handles all protobuf generation without requiring
362+ additional homebrew packages. Just run ` bun run gen ` after installing bun.
376363
377364## Support
378365
0 commit comments