Skip to content

A Go implementation of the Secure Scuttlebutt protocol.

License

Notifications You must be signed in to change notification settings

planetary-social/scuttlego

Repository files navigation

scuttlego CI Go Reference

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.

Features

Supported

  • 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

Planned

  • 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

Community

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.

Protocol

To get an overview of the technical aspects of the Secure Scuttlebutt protocol check out the following resources:

Contributing

Check out our contributing documentation.

If you find an issue, please report it on the issue tracker.

Acknowledgements

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.