{"id":13750720,"url":"https://github.com/semaphore-protocol/semaphore","last_synced_at":"2026-02-17T20:01:53.626Z","repository":{"id":37686266,"uuid":"179699830","full_name":"semaphore-protocol/semaphore","owner":"semaphore-protocol","description":"A zero-knowledge protocol for anonymous interactions.","archived":false,"fork":false,"pushed_at":"2026-01-26T16:12:58.000Z","size":13360,"stargazers_count":1038,"open_issues_count":58,"forks_count":295,"subscribers_count":18,"default_branch":"main","last_synced_at":"2026-01-27T04:43:02.187Z","etag":null,"topics":["circom","ethereum","hacktoberfest","javascript","monorepo","proof-of-membership","semaphore","solidity","typescript","zero-knowledge","zero-knowledge-proofs","zk-snarks"],"latest_commit_sha":null,"homepage":"https://semaphore.pse.dev","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/semaphore-protocol.png","metadata":{"files":{"readme":"README.md","changelog":"changelogithub.config.json","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-04-05T14:42:26.000Z","updated_at":"2026-01-26T16:11:21.000Z","dependencies_parsed_at":"2023-12-20T06:35:01.937Z","dependency_job_id":"aed0a595-0b1c-46c1-9052-26401481af3c","html_url":"https://github.com/semaphore-protocol/semaphore","commit_stats":{"total_commits":1514,"total_committers":52,"mean_commits":"29.115384615384617","dds":"0.36063408190224566","last_synced_commit":"7e183f3d2c159ff6ad47517bd45482e7545f7646"},"previous_names":["kobigurk/semaphore","appliedzkp/semaphore"],"tags_count":107,"template":false,"template_full_name":null,"purl":"pkg:github/semaphore-protocol/semaphore","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semaphore-protocol%2Fsemaphore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semaphore-protocol%2Fsemaphore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semaphore-protocol%2Fsemaphore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semaphore-protocol%2Fsemaphore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/semaphore-protocol","download_url":"https://codeload.github.com/semaphore-protocol/semaphore/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/semaphore-protocol%2Fsemaphore/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29556411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T18:16:07.221Z","status":"ssl_error","status_checked_at":"2026-02-17T18:16:04.782Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["circom","ethereum","hacktoberfest","javascript","monorepo","proof-of-membership","semaphore","solidity","typescript","zero-knowledge","zero-knowledge-proofs","zk-snarks"],"created_at":"2024-08-03T08:00:44.985Z","updated_at":"2026-02-17T20:01:53.607Z","avatar_url":"https://github.com/semaphore-protocol.png","language":"TypeScript","readme":"\u003cp align=\"center\"\u003e\n    \u003ch1 align=\"center\"\u003e\n      \u003cpicture\u003e\n        \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/semaphore-protocol/.github/main/assets/semaphore-logo-light.svg\"\u003e\n        \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/semaphore-protocol/.github/main/assets/semaphore-logo-dark.svg\"\u003e\n        \u003cimg width=\"250\" alt=\"Semaphore icon\" src=\"https://raw.githubusercontent.com/semaphore-protocol/.github/main/assets/semaphore-logo-dark.svg\"\u003e\n      \u003c/picture\u003e\n    \u003c/h1\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/semaphore-protocol\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/project-Semaphore-blue.svg?style=flat-square\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"/LICENSE\"\u003e\n        \u003cimg alt=\"Github license\" src=\"https://img.shields.io/github/license/semaphore-protocol/semaphore.svg?style=flat-square\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/semaphore-protocol/semaphore/actions?query=workflow%3Aproduction\"\u003e\n        \u003cimg alt=\"GitHub Workflow test\" src=\"https://img.shields.io/github/actions/workflow/status/semaphore-protocol/semaphore/production.yml?branch=main\u0026label=test\u0026style=flat-square\u0026logo=github\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://coveralls.io/github/semaphore-protocol/semaphore\"\u003e\n        \u003cimg alt=\"Coveralls\" src=\"https://img.shields.io/coveralls/github/semaphore-protocol/semaphore?style=flat-square\u0026logo=coveralls\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://deepscan.io/dashboard#view=project\u0026tid=16502\u0026pid=22324\u0026bid=657461\"\u003e\n        \u003cimg src=\"https://deepscan.io/api/teams/16502/projects/22324/branches/657461/badge/grade.svg\" alt=\"DeepScan grade\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://eslint.org/\"\u003e\n        \u003cimg alt=\"Linter eslint\" src=\"https://img.shields.io/badge/linter-eslint-8080f2?style=flat-square\u0026logo=eslint\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://prettier.io/\"\u003e\n        \u003cimg alt=\"Code style prettier\" src=\"https://img.shields.io/badge/code%20style-prettier-f8bc45?style=flat-square\u0026logo=prettier\"\u003e\n    \u003c/a\u003e\n    \u003cimg alt=\"Repository top language\" src=\"https://img.shields.io/github/languages/top/semaphore-protocol/semaphore?style=flat-square\"\u003e\n    \u003ca href=\"https://www.gitpoap.io/gh/semaphore-protocol/semaphore\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://public-api.gitpoap.io/v1/repo/semaphore-protocol/semaphore/badge\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"http://commitizen.github.io/cz-cli/\"\u003e\n        \u003cimg alt=\"Commitizen friendly\" src=\"https://img.shields.io/badge/commitizen-friendly-586D76?style=flat-square\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch4\u003e\n        \u003ca href=\"/CONTRIBUTING.md\"\u003e\n            👥 Contributing\n        \u003c/a\u003e\n        \u003cspan\u003e\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n        \u003ca href=\"/CODE_OF_CONDUCT.md\"\u003e\n            🤝 Code of conduct\n        \u003c/a\u003e\n        \u003cspan\u003e\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n        \u003ca href=\"https://github.com/semaphore-protocol/semaphore/contribute\"\u003e\n            🔎 Issues\n        \u003c/a\u003e\n        \u003cspan\u003e\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n        \u003ca href=\"https://semaphore.pse.dev/telegram\"\u003e\n            🗣️ Chat \u0026amp; Support\n        \u003c/a\u003e\n        \u003cspan\u003e\u0026nbsp;\u0026nbsp;|\u0026nbsp;\u0026nbsp;\u003c/span\u003e\n        \u003ca href=\"https://js.semaphore.pse.dev\"\u003e\n            💻 API Reference\n        \u003c/a\u003e\n    \u003c/h4\u003e\n\u003c/div\u003e\n\n| Semaphore is a generic privacy layer. Leveraging zero-knowledge technology, users can prove their membership in groups and send messages (extending from votes to endorsements) off-chain or across EVM-compatible blockchains, all without revealing their personal identity. |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n\nThe core of the Semaphore protocol is in the [circuit logic](/packages/circuits/scheme.png). However, Semaphore also provides [Solidity contracts](/packages/contracts) and JavaScript libraries to make the steps for offchain proof creation and onchain/offchain verification easier. To learn more about Semaphore visit [semaphore.pse.dev](https://semaphore.pse.dev).\n\n\u003e [!IMPORTANT]  \n\u003e Help Semaphore prosper by sharing your ideas with the PSE [acceleration program](https://github.com/privacy-scaling-explorations/acceleration-program).\n\n## 📦 Packages\n\n\u003ctable\u003e\n    \u003cth\u003ePackage\u003c/th\u003e\n    \u003cth\u003eVersion\u003c/th\u003e\n    \u003cth\u003eDownloads\u003c/th\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/core\"\u003e\n                    @semaphore-protocol/core\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/core\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/core.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/core\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/core.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/contracts\"\u003e\n                    @semaphore-protocol/contracts\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/contracts\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/contracts.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/contracts\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/contracts.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/identity\"\u003e\n                    @semaphore-protocol/identity\n                \u003c/a\u003e\n                \u003ca href=\"https://js.semaphore.pse.dev/modules/_semaphore_protocol_identity\"\u003e\n                    (docs)\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/identity\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/identity.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/identity\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/identity.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/group\"\u003e\n                    @semaphore-protocol/group\n                \u003c/a\u003e\n                \u003ca href=\"https://js.semaphore.pse.dev/modules/_semaphore_protocol_group\"\u003e\n                    (docs)\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/group\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/group.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/group\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/group.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/proof\"\u003e\n                    @semaphore-protocol/proof\n                \u003c/a\u003e\n                \u003ca href=\"https://js.semaphore.pse.dev/modules/_semaphore_protocol_proof\"\u003e\n                    (docs)\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/proof\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/proof.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/proof\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/proof.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/data\"\u003e\n                    @semaphore-protocol/data\n                \u003c/a\u003e\n                \u003ca href=\"https://js.semaphore.pse.dev/modules/_semaphore_protocol_data\"\u003e\n                    (docs)\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/data\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/data.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/data\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/data.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/hardhat\"\u003e\n                    @semaphore-protocol/hardhat\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/hardhat\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/hardhat.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/hardhat\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/hardhat.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/cli\"\u003e\n                    @semaphore-protocol/cli\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/cli\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/cli.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/cli\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/cli.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                \u003ca href=\"/packages/utils\"\u003e\n                    @semaphore-protocol/utils\n                \u003c/a\u003e\n                \u003ca href=\"https://js.semaphore.pse.dev/modules/_semaphore_protocol_utils\"\u003e\n                    (docs)\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- NPM version --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/utils\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/v/@semaphore-protocol/utils.svg?style=flat-square\" alt=\"NPM version\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                \u003c!-- Downloads --\u003e\n                \u003ca href=\"https://npmjs.org/package/@semaphore-protocol/utils\"\u003e\n                    \u003cimg src=\"https://img.shields.io/npm/dm/@semaphore-protocol/utils.svg?style=flat-square\" alt=\"Downloads\" /\u003e\n                \u003c/a\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n## 🛠 Install\n\nClone this repository:\n\n```bash\ngit clone https://github.com/semaphore-protocol/semaphore.git\n```\n\nInstall the dependencies:\n\n```bash\ncd semaphore \u0026\u0026 yarn\n```\n\nAnd build the repository:\n\n```bash\nyarn build\n```\n\n## 📜 Usage\n\nCopy the `.env.example` file as `.env`:\n\n```bash\ncp .env.example .env\n```\n\nAnd add your environment variables.\n\n### Code quality and formatting\n\nRun [ESLint](https://eslint.org/) to analyze the code and catch bugs:\n\n```bash\nyarn lint\n```\n\nRun [Prettier](https://prettier.io/) to check formatting rules:\n\n```bash\nyarn format\n```\n\nOr to automatically format the code:\n\n```bash\nyarn format:write\n```\n\n### Conventional commits\n\nSemaphore uses [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/). A [command line utility](https://github.com/commitizen/cz-cli) to commit using the correct syntax can be used by running:\n\n```bash\ngit commit\n```\n\nIt will also automatically check that the modified files comply with ESLint and Prettier rules.\n\n### Testing\n\nRun [Jest](https://jestjs.io/) to test the JS libraries:\n\n```bash\nyarn test:libraries\n```\n\nRun [Mocha](https://mochajs.org/) to test the contracts:\n\n```bash\nyarn test:contracts\n```\n\nOr test everything with:\n\n```bash\nyarn test\n```\n\n### Build libraries \u0026 compile contracts\n\nRun [Rollup](https://www.rollupjs.org) and [TheGraph](https://www.npmjs.com/package/@graphprotocol/graph-cli) to build all the packages and the subgraph:\n\n```bash\nyarn build\n```\n\nCompile the smart contracts with [Hardhat](https://hardhat.org/):\n\n```bash\nyarn compile:contracts\n```\n\n### Documentation (JS libraries)\n\nRun [TypeDoc](https://typedoc.org/) to generate a documentation website for each package:\n\n```bash\nyarn docs\n```\n\nThe output will be placed on the `docs` folder.\n\n### Releases\n\nSteps:\n\n1. Bump a new version with:\n\n```bash\nyarn version:bump \u003cversion\u003e\n# e.g. yarn version:bump 2.0.0\n```\n\nThis step creates a commit and a git tag.\n\n2. Push the changes to main:\n\n```bash\ngit push origin main\n```\n\n3. Push the new git tag:\n\n```bash\ngit push origin \u003cversion\u003e\n# e.g. git push origin v2.0.0\n```\n\nAfter pushing the new git tag, a workflow will be triggered to publish the Semaphore packages on [npm](https://www.npmjs.com/) and release a new version on GitHub with its changelogs automatically.\n","funding_links":[],"categories":["Projects using Circom","TypeScript","typescript","Applications"],"sub_categories":["Cryptographic primitives in other languages","Non-blockchain"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemaphore-protocol%2Fsemaphore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsemaphore-protocol%2Fsemaphore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsemaphore-protocol%2Fsemaphore/lists"}