# Secure Scuttlebutt from Scratch [Back to index](#index) This aims to be the missing reference for those who wish to create a Secure Scuttlebutt client from scratch. ## Discovery A good way to get started is to participate in local network discovery with a known working client on the same network. The [Scuttlebutt Programming Guide](https://ssbc.github.io/scuttlebutt-protocol-guide/#local-network) is a good start, here, with a few things to note: 1. Some clients advertise multiple addresses separated by semicolons (`;`). 2. Some clients advertise alternative protocols than `shs` and use hostnames instead of IPv4 addresses. So be prepared to accept variations. There also an undocumented "new" style of discovery message. ## Secret Handshake, Box Stream, and RPC Protocol Now that two clients are aware of eachother, they need to complete a secret handshake. The [programming guide](https://ssbc.github.io/scuttlebutt-protocol-guide/#handshake) is once again a good reference. The box stream and RPC protocol can both be implemented from the [same documentation](https://ssbc.github.io/scuttlebutt-protocol-guide/#box-stream) without surprises. ## Synchronizing Data ... `ebt.replicate` or `createHistoryStream` ... ## Rooms TODO ## References * [https://ssbc.github.io/scuttlebutt-protocol-guide/](https://ssbc.github.io/scuttlebutt-protocol-guide/) * [https://dev.planetary.social/](https://dev.planetary.social/) * [https://dev.scuttlebutt.nz/#/golang/?id=muxrpc-endpoints](https://dev.scuttlebutt.nz/#/golang/?id=muxrpc-endpoints)