{"id":36517529,"url":"https://github.com/hubmakerlabs/replicatr","last_synced_at":"2026-01-14T23:39:45.633Z","repository":{"id":208222583,"uuid":"721091102","full_name":"Hubmakerlabs/replicatr","owner":"Hubmakerlabs","description":"Nostr relay with Internet Computer integration for inter-relay synchronization","archived":false,"fork":false,"pushed_at":"2024-12-04T10:56:56.000Z","size":74127,"stargazers_count":13,"open_issues_count":3,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-01-12T05:23:18.355Z","etag":null,"topics":["badgerdb","cryptography","customizable","decentralized","dfinity","distributed-database","distributed-systems","golang","internet-computer","internet-computer-protocol","modular","nip-42","nostr","pubsub","rust","scalability","social-network"],"latest_commit_sha":null,"homepage":"https://mleku.dev/git/replicatr","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Hubmakerlabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-20T10:39:25.000Z","updated_at":"2025-11-17T00:04:25.000Z","dependencies_parsed_at":"2024-01-21T04:38:20.081Z","dependency_job_id":"140e2792-c4c3-4aa0-b88e-7b59dfeef983","html_url":"https://github.com/Hubmakerlabs/replicatr","commit_stats":null,"previous_names":["mleku/replicatr","hubmakerlabs/replicatr","nostric/replicatr"],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/Hubmakerlabs/replicatr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hubmakerlabs%2Freplicatr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hubmakerlabs%2Freplicatr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hubmakerlabs%2Freplicatr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hubmakerlabs%2Freplicatr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Hubmakerlabs","download_url":"https://codeload.github.com/Hubmakerlabs/replicatr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Hubmakerlabs%2Freplicatr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28439308,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T22:37:52.437Z","status":"ssl_error","status_checked_at":"2026-01-14T22:37:31.496Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["badgerdb","cryptography","customizable","decentralized","dfinity","distributed-database","distributed-systems","golang","internet-computer","internet-computer-protocol","modular","nip-42","nostr","pubsub","rust","scalability","social-network"],"created_at":"2026-01-12T02:45:42.691Z","updated_at":"2026-01-14T23:39:45.626Z","avatar_url":"https://github.com/Hubmakerlabs.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Replicatr\n\n![logo](doc/logo.png)\n\n`replicatr` is a relay for the [nostr protocol](https://github.com/nostr-protocol/nostr):\n\n* Supports most applicable NIPs: 1, 2, 4, 9, 11, 12, 15, 16, 20, 22, 28, 33, 40, 42\n* Websocket compression: permessage-deflate with optional sliding window, when supported by clients\n* Extremely configurable making it seamlessly customizable across several parameters for relay operators\n* No external database required: All data is stored first locally on the filesystem in BadgerDB and optionally on the\n  Internet Computer for inter-relay synchronization.\n* The local badgerDB has been additionally equipped with a nostr-specific, highly configurable garbage collection scheme and a\n  nostr-specific prefix-indexing scheme for seamless data management and rapid querying\n* Supports optionally mandating nip-42 authorization upon initial connection for enhanced security\n* [Internet Computer](https://internetcomputer.org/docs/current/home)-integration for efficient syncing with remote\n  relays\n\n## Syncing\n\nThe most original feature of replicatr is its  [Internet Computer](https://internetcomputer.org/docs/current/home)\nintegration allowing for quick and seamless inter-relay synchronization. This is achieved by defining relay clusters, an\ninterconnected group of relays that're given authorization by a replicatr [canister](https://internetcomputer.org/docs/current/concepts/canisters-code) owner to utilize the canister's\nsynchronization tooling to achieve consistency across the cluster.\n\n\u003e [Click here](doc/problem.md) to learn more about the nostrific problem this addresses.\n\n\u003e [Click here](doc/arch.md) to learn more about the synchronization architecture.\n\n## Usage\n\n### Setup\n\nWorks with Linux, MacOS, and WSL2\n\n#### Install Go and Clone Repo\n\nGo 1.2+ is recommended - Click [here](doc/golang.md) for installation instructions and specifications.\n\nThen, run to the following to clone the repo:\n\n```bash\ngit clone https://github.com/Hubmakerlabs/replicatr.git \u0026\u0026 cd replicatr\n```\n\n\n#### To setup an Owner relay (and start your own cluster):\n\n\n1. Ensure [dfx](https://internetcomputer.org/docs/current/developer-docs/getting-started/install/) and all corresponding dependencies are installed in the\n   repo root directory. Ensure a valid [dfx identity](https://internetcomputer.org/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-identity) with an [initialized wallet](https://internetcomputer.org/docs/current/developer-docs/developer-tools/cli-tools/cli-reference/dfx-quickstart) is created and is being used.\n2. Use [NNS](https://nns.ic0.app/) to [create a canister](https://internetcomputer.org/docs/current/developer-docs/daos/nns/nns-app-quickstart) and [top it up](https://internetcomputer.org/docs/current/developer-docs/smart-contracts/topping-up/topping-up-canister) with at least half an ICP worth of cycles (or more depending on your intended bandwidth usage).\n3. From the root directory, run the initialization script:\n\n```bash\nchmod +x pkg/ic/setup/owner.sh\n./pkg/ic/setup/owner.sh\n```\nInput the canister-id for the previously created canister when prompted:\n\n```bash\nPlease enter the canister ID: \u003ccanister-id\u003e\n```\n\n\u003e This will generate a relay secret key, initialize your relay and deploy a replicatr canister on the Internet Computer with your relay as the\n\u003e specified owner. Click [here](pkg/config/base/README.md) to see where the secret key as well other settings are stored.\n\n\u003e If you have any issues with the owner setup, [here](/pkg/ic/setup/troubleshooting.md) is some troubleshooting help.\n\n#### To setup as a Minion/Secondary-Owner  relay (and join a preexisting cluster):\n\n1. Identify the a relay cluster you would like to join and ask the owner for their canister-id and if you can join.\n2. Run the following command from the root directory to initialize the relay with the previously obtained canister-id:\n\n   ```bash\n   go run . initcfg -e ic -I \u003ccanister-id\u003e \n   ```\n   \n3. Run the following command to obtain your canister-facing relay pubkey:\n   ```bash\n   go run . pubkey\n   ```\n   \n4. Send the resulting pubkey to the canister owner and wait for them to grant you user/owner level access\n\n\u003e To learn more about canister permissions, [click here](doc/canister.md).\n\n### Building and Running\n\nYou can run the relay directly from the root of the repository:\n\n```bash\ngo run . \u003cflags\u003e \u003cargs\u003e\n```\n\u003e add flags to configure the relay as needed or run without any flags to use defaults. Click [here](pkg/config/base/README.md) to view customizable parameters, configuration, and subcommand details\n\nOr you can build it and place it in the location `GOBIN` as defined [here](doc/golang.md):\n\n```bash\ngo install\n```\n\n\n## Additional Features and Documentation\n\n|Package Name|Links |Description|\n|-----------------|-------|-----|\n|`config`|[![README](https://img.shields.io/badge/-README-green)](pkg/config/base/README.md)|Parameters and commands to configure the relay|\n|`blowr`|[![README](https://img.shields.io/badge/-README-green)](cmd/blower/README.md)|CLI tool that facilitates the uploading of Nostr events from a JSONL file to a specified Nostr relay|\n|`loggr`|[![README](https://img.shields.io/badge/-README-green)](doc/logger.md) [![DOC](https://img.shields.io/badge/-DOC-blue)](https://pkg.go.dev/mleku.dev/git/slog@v1.0.16)|highly-informative, configurable logger to monitor relay activity|\n|`agent`| [![DOC](https://img.shields.io/badge/-DOC-blue)](https://pkg.go.dev/github.com/Hubmakerlabs/replicatr/pkg/ic/agent)|IC-tooling for Nostr data|\n|`IC-ACL`|[![README](https://img.shields.io/badge/-README-green)](doc/canister.md) [![DOC](https://img.shields.io/badge/-DOC-blue)](https://pkg.go.dev/github.com/Hubmakerlabs/replicatr/pkg/ic/agent)|Commands for managing relays' canister access|\n|`testr`|[![README](https://img.shields.io/badge/-README-green)](cmd/testr/README.md)|builds and executes highly customizable and exhaustive test cases for the relay|\n\n\n\n\n## Credits\n\nThis project would not be possible without the significant contributions and support from the following organizations and projects:\n\n1. **DFINITY** - For funding our project and enabling us to build on their cutting-edge [blockchain technology](https://internetcomputer.org/docs/current/home).\n2. **[Hubmaker Labs](https://github.com/Hubmakerlabs)** - For their funding and ongoing support throughout the development process.\n3. **nbd-wtf** - We forked their [`go-nostr`](https://github.com/nbd-wtf/go-nostr) package, which forms a substantial part of our Nostr tooling.\n4. **fiatjaf** - We based our project on his [`khatru`](https://github.com/fiatjaf/khatru) relay, using it as the foundational structure for our development.\n5. **Aviate Labs** - Their [`agent-go`](https://github.com/aviate-labs/agent-go) tooling has been instrumental in facilitating our interaction with Internet Computer canisters.\n\nWe extend our deepest gratitude to all our contributors and supporters, as their efforts and resources have been vital to the success of this project.\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhubmakerlabs%2Freplicatr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhubmakerlabs%2Freplicatr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhubmakerlabs%2Freplicatr/lists"}