{"id":20614389,"url":"https://github.com/cnstr/arbiter","last_synced_at":"2026-06-05T10:31:39.184Z","repository":{"id":232910562,"uuid":"783388369","full_name":"cnstr/arbiter","owner":"cnstr","description":"The distributed peering orchestrator","archived":false,"fork":false,"pushed_at":"2024-04-12T02:59:22.000Z","size":51,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-02T19:46:58.999Z","etag":null,"topics":["golang","orchestration","peer"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cnstr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2024-04-07T18:49:32.000Z","updated_at":"2024-04-12T03:13:37.000Z","dependencies_parsed_at":"2024-04-12T09:14:32.087Z","dependency_job_id":"e50c110e-d414-4e72-9239-b1a2f9885638","html_url":"https://github.com/cnstr/arbiter","commit_stats":null,"previous_names":["cnstr/arbiter"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnstr%2Farbiter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnstr%2Farbiter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnstr%2Farbiter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cnstr%2Farbiter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cnstr","download_url":"https://codeload.github.com/cnstr/arbiter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242268934,"owners_count":20100069,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["golang","orchestration","peer"],"created_at":"2024-11-16T11:12:36.901Z","updated_at":"2025-12-06T10:01:24.661Z","avatar_url":"https://github.com/cnstr.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Canister Arbiter\n\u003e Dead simple orchestration for Canister workers.\n\nCanister Arbiter is a simple tool for orchestrating Canister workers.\nThese workers (also known as indexers) are responsible for building data that is consumed by the [Canister API](https://github.com/cnstr/api).\n\n## Canister Peering\nThe current iteration of the Canister indexer runs as a single process that goes through a list of manifests and builds the data.\nThe issue is that this process can take a very long time to complete, making over 20,000 requests to various sources.\nMeasures have been implemented to avoid unnecessary work, but a full index can take almost an hour to complete.\nOn top of that, the indexer tends to trigger rate limits on some sources, leading to temporary IP bans.\n\nTo address these issues, we are splitting workloads across multiple volunteered peers.\nIndividuals have agreed to run a worker on their own infrastructure that gets directed by the orchestrator.\nThe plan is to eventually make the API, database, and orchestrator decentralized.\n\n## Contributing\nWe'd appreciate anyone who is willing to host a peer for the Canister indexer.\nThis not only increases the reliability of the service, but also helps serve other regions faster.\nIn order to join the peering network, there are a few requirements that need to be met:\n\n- Around `256MB` or less of RAM available at bursts every hour.\n- Barely any CPU, it'll only occasionally burst up to half a thread.\n- Relatively stable internet connection capable of opening PostgreSQL connections.\n- You don't need to run the worker 24/7, but as much as possible is appreciated.\n- Allow WebSocket connections to `i1.peer.canister.me`, `i2.peer.canister.me`, and `i3.peer.canister.me` on port `443`.\n\nCanister's Peering Network is secured by a custom certificate authority to ensure that only approved peers can participate.\nIn order to join, you'll need to follow the steps below to generate a certificate signing request which you can send to us.\nTo generate a certificate signing request, you'll need `openssl` and the following `config.conf` file:\n\n```conf\n[req]\ndefault_bits = 4096\nprompt = no\nencrypt_key = no\ndefault_md = sha512\ndistinguished_name = req_distinguished_name\n\n[req_distinguished_name]\nC = US\nST = New York\nO = Canister\nOU = Indexer\nCN = \u003cname\u003e\n```\n\nRemember to replace `\u003cname\u003e` with the name of the peer. And then run the following command:\n```sh\nopenssl req -new -keyout \u003cname\u003e.key -out \u003cname\u003e.csr -config config.conf\n```\n\nOnce you've generated the files, keep the `.key` file safe and send the `.csr` file to us.\nEmail [support@canister.me](mailto:support@canister.me) with the subject: `[PEER REQUEST] Indexer: \u003cname\u003e`.\nAttach the `.csr` file, an explanation of your infrastructure and your relevance within the community.\nWe'll get back to you with a `.crt` file that you can use with the instructions below.\n\n## Running a Peer\nTODO\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnstr%2Farbiter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcnstr%2Farbiter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcnstr%2Farbiter/lists"}