|
| 1 | + |
| 2 | + |
| 3 | +Chronicle is a personal relay [Nostr](https://njump.me), built on the [Khatru](https://khatru.nostr.technology) framework, that stores complete conversations in which the owner has taken part and nothing else: pure signal. |
| 4 | +This is possible since writing is limited to the threads in which the owner has partecipated (either as an original poster or with a reply/zap/reaction), and only to his trusted network (WoT), to protect against spam. |
| 5 | + |
| 6 | +Chronicle fits well in the Outbox model, so you can use it as your read/write relay, and it also automatically becomes a space-efficient backup relay. |
| 7 | + |
| 8 | +## How it works |
| 9 | + |
| 10 | +Every incoming event is verified against some simple rules. |
| 11 | +If it's signed by the relay owner, it is automatically accepted. |
| 12 | +If it is posted by someone else it is checked if it is part of in a conversation in which the owner participated *and* if the author is in the owner's social graph (to the 2nd degree), then it is accepted, otherwise it is rejected. |
| 13 | + |
| 14 | +If an event published by the owner refers to a conversation that is not yet known by the relay, it tries to fetch it. |
| 15 | + |
| 16 | +## How to run |
| 17 | + |
| 18 | +After cloning the repo create an `.env` file based on the example provided in the repository and personalize it: |
| 19 | + |
| 20 | + |
| 21 | +```bash |
| 22 | +# Your pubkey, in hex format |
| 23 | +OWNER_PUBKEY="xxxxxxxxxxxxxxxxxxxxxxxxxxx...xxx" |
| 24 | + |
| 25 | +# Relay info, for NIP-11 |
| 26 | +RELAY_NAME="YourRelayName" |
| 27 | +RELAY_DESCRIPTION="Your relay description" |
| 28 | +RELAY_URL="wss://chronicle.xxxxxxxx.com" |
| 29 | +RELAY_ICON="https://chronicle.xxxxxxxx.com/web/icon.png" |
| 30 | +RELAY_CONTACT="your_email_or_website" |
| 31 | + |
| 32 | +# The relay pubkey, in hex format |
| 33 | +RELAY_PUBKEY="RelayPublicKey" |
| 34 | + |
| 35 | +# The path you would like the database to be saved |
| 36 | +# The path can be relative to the binary, or absolute |
| 37 | +DB_PATH="db/" |
| 38 | + |
| 39 | +# Where we should store the index.html and static files |
| 40 | +# The path can be relative to the binary, or absolute |
| 41 | +WEB_PATH="web/" |
| 42 | + |
| 43 | +# Interval in hours to refresh the web of trust |
| 44 | +REFRESH_INTERVAL_HOURS=24 |
| 45 | + |
| 46 | +# How many followers before they're allowed in the WoT |
| 47 | +MINIMUM_FOLLOWERS=3 |
| 48 | + |
| 49 | +# Periodically try fetch notes from other relays |
| 50 | +FETCH_SYNC="FALSE" |
| 51 | +``` |
| 52 | + |
| 53 | +Build it with `go install` or `go build`, then run it. |
| 54 | + |
| 55 | +## Credits |
| 56 | + |
| 57 | +Chronicle uses some code from the great [wot-relay](https://github.com/bitvora/wot-relay). |
| 58 | + |
| 59 | +## License |
| 60 | + |
| 61 | +This project is licensed under the MIT License. |
0 commit comments