forgot to add previous to protocol spec
send permalinks until user has identified and opted-in to syncing feed
add left border to blockquotes
*Please note that the only topic banned on Bogbook is COVID (pro and anti). I am currently working on a way to ban people who talk about COVID, including myself. Pull-requests needed.
Bogbook is a distributed news network made up of feeds signed by ed25519 keypairs, and then replicated between bogbook clients in the browser and bogbook pubs.
On bogbook you can post images with filters and posts that are rendered in markdown. You can identify your ed25519 pubkey with a name, an image, a bio, and a background.
The bogbook protocol is secure (no one can modify your posts) and the data exists in your browser, as well as any bogbook pubs you have replicated to, and all of the clients who have replicated your posts from bogbook pubs.
type: name
post via your profile page. Once you've added a name, consider introducing yourself here: http://bogbook.com/#M1jR2wBtUO2v+3HIa4xypc3f0+Z6YvYY2wKn/hEe/QQ=ws://bogbook.com/ws
. To add more pubs navigate to your keys page where there is a section for adding more pubs. Try adding ws://bogbook.com/ws
, ws://evbogue.com/ws
, and ws://gwenbell.com/ws
. If you're running bogbook on your localhost, then your default pub will probably be ws://localhost:8081/ws/
This adds some degree of resilience to the bogbook network, because if your default pub server goes down you can create your own or choose a new pub server.Toggle between light and dark modes using the brightness emoji in the top right of the navbar.
<del>
data never replicated into browsers</del>
-- actually, some progress has been made with ssb-browser-demo repo by arjgit clone https://git.sr.ht/~ev/bogbook
cd bogbook
npm install
node bin
Navigate to http://localhost:8081/ to view your local bogbook
The first argument passed to node will specify a different folder to save bogs, stats, the server keypair, and config options.
node bin testbognet
Will use the .testbognet/
folder instead of the default.
Save a config.json
file to your .bogbookv2
folder in order to configure your local bogbook.
{"url": "yoururl.com"}
fortify your bogs by only accepting replication requests from existing boggers. Bogbook will only respond to messages from public keys that have already published bogs to the server. This means all lurkers and new boggers will be unable to publish or replicate from the bogbook while the bog is fortified. This could be useful for a private bogging group, or for handling possible abuse cases.
{"fort": "true"}
announcement
messages are sent to boggers who have existing feeds on the server. welcome
messages are sent to lurkers.
{
"welcome": "Hey, thanks for lurking on Bogbook",
"announcement": "Hey, thanks for syncing your bogs to this bogbook server!"
}
you can change your bogbook port with
{"port": "1337"}
The aim of bogbook is to be a public gossiped news and photo sharing network where you can apply filters to images. There are no private messages on the log (that became a security issue with ssb). We only encrypt/decrypt messages in transit during replication.
keypairs are ed25519 keypairs, encoded in base64, concatenating the public key to private key
<publickey><privatekey>
There can be no '/' characters in the public key, because file systems do not like slashes, so we will throw them out when generating new keypairs. If there is a '/' in an imported keypair, we should error out on import.
signed messages exist on a single line, and consist of a hash of the signature, the public key of an author, and the signature
<sha2hash><ed25519 public key><ed25519 signature>
when opened, it could look this way:
{
text: <text>,
seq: <sequence number>,
previous: <hash of author's previous post>,
author: <ed25519 public key>,
timestamp: <Date.now()>,
raw: <unopened message>
}
timestamp
is not optional, because we need it to sort the log.
seq
is not optional, because we need it to sync the log.
previous
is not optional, because we need it to verify the log is correct before adding new posts.
Everything else is optional, but we should have at least text
or an image
. The reason we crop images to 680x680 pixels is we want the image size to be manageable for replication.
servers and clients all have ed25519 keypairs.
opened logs are stored as 'log' and are sorted periodically by timestamp.
signed logs written by unique authors are saved as public keys. Since we're using fs on the server, we shouldn't allow public keys with a '/' because that confuses fs.
gossip requests can contain either:
{
feed: <ed25519 public key>,
sequence: <latest sequence number we possess>
}
the response to this message will be to send one message every time the server sends us a sequence number. If we have a higher sequence number than the requester we respond with the next message in our sequence. If the server has a lower sequence number, then we respond with a gossip message sharing our latest sequence number, so that the client can instead respond to us with a replication message.
MIT