A Go implementation of the Secure Scuttlebutt protocol. This implementation was designed to be used by the Planetary client and attempts to be efficient, stable and keep a relatively low memory footprint. As scuttlego is under active development the exposed interfaces may undergo some changes as its API stabilizes.
- Transport (handshake, box stream, RPC layer)
- Support for the default feed format
- Tracking the social graph
- Connection manager (local peers, predefined pubs)
- Replicating messages using
createHistoryStream
and Epidemic Broadcast Trees - Replication scheduler (prioritise closer feeds, avoid replicating the same messages simultaneously from various peers etc.)
- Replicating and creating blobs
- Pushing blobs
- Tunneling via rooms
- Some commands and queries for managing room aliases
- Connection manager (dynamic discovery of pubs from feeds)
- Handling blob wants received from remote peers
- Cleaning up old blobs and messages
- Private messages
- Private groups
- Support for other feed formats
- Metafeeds
If you want to talk about scuttlego feel free to post on Secure Scuttlebutt using the #scuttlego
channel.
Also check out Matrix channels such as #golang-ssb-general:autonomic.zone
and #planetary:matrix.org
.
To get an overview of the technical aspects of the Secure Scuttlebutt protocol check out the following resources:
Check out our contributing documentation.
If you find an issue, please report it on the issue tracker.
This implementation depends on go-ssb and associated libraries under the hood. The elements which didn't have to be reimplemented from scratch thanks to that are mainly:
- the handshake mechanism
- the box stream protocol
- the verification and signing of messages
- broadcasting and receiving local UDP advertisements
We are ever grateful for the work done by the authors and contributors of go-ssb and associated libraries as without them scuttlego most likely wouldn't have been completed.