{"id":46527549,"url":"https://github.com/archetech/archon","last_synced_at":"2026-04-03T18:01:39.555Z","repository":{"id":332189340,"uuid":"1130619240","full_name":"archetech/archon","owner":"archetech","description":"Reference implementation for the did:cid DID method","archived":false,"fork":false,"pushed_at":"2026-03-28T19:09:04.000Z","size":29555,"stargazers_count":4,"open_issues_count":25,"forks_count":3,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-28T20:20:52.054Z","etag":null,"topics":["agents","btc","credentials","decentralized","did","encryption","identity","ipfs","lightning","reputation"],"latest_commit_sha":null,"homepage":"","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/archetech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY_AUDIT.md","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":"2026-01-08T19:03:41.000Z","updated_at":"2026-03-28T19:09:05.000Z","dependencies_parsed_at":null,"dependency_job_id":"e3fef0bf-4eb2-48e6-bba4-42ed71087424","html_url":"https://github.com/archetech/archon","commit_stats":null,"previous_names":["archetech/archon"],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/archetech/archon","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archetech%2Farchon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archetech%2Farchon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archetech%2Farchon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archetech%2Farchon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/archetech","download_url":"https://codeload.github.com/archetech/archon/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/archetech%2Farchon/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31368156,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T17:53:18.093Z","status":"ssl_error","status_checked_at":"2026-04-03T17:53:17.617Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["agents","btc","credentials","decentralized","did","encryption","identity","ipfs","lightning","reputation"],"created_at":"2026-03-06T21:09:29.240Z","updated_at":"2026-04-03T18:01:39.543Z","avatar_url":"https://github.com/archetech.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![unit-test](https://github.com/archetech/archon/actions/workflows/unit-test.yml/badge.svg)](https://github.com/archetech/archon/actions/workflows/unit-test.yml) [![Coverage Status](https://coveralls.io/repos/github/archetech/archon/badge.svg?branch=main)](https://coveralls.io/github/archetech/archon?branch=main)\n\n# Archon\n\nArchon is a decentralized identity (DID) protocol implementation. Visit our website [archetech.github.io/archon](https://archetech.github.io/archon) for additional documentation and details.\n\n## Quick start\n\nRecommended system requirements:\n\n- GNU/Linux OS with [docker](https://www.docker.com/) for containerized operation\n- node 22.15.0 and npm 10.9.2 for manual and local operation\n- minimum of 8Gb RAM if operating a full trustless node\n\n```\n$ git clone https://github.com/archetech/archon\n$ cd archon\n$ cp sample.env .env\n$ ./start-node\n```\n\n### Keymaster Onboarding\n\nFor a local Keymaster wallet and identity without running a full node, use the hosted installer:\n\n```bash\ncurl -fsSL https://archon.technology/install | bash\n```\n\nThe installer:\n\n- checks for Node.js and npm before prompting\n- installs `@didcid/keymaster` if needed\n- prompts for an ID name\n- prompts for a Keymaster passphrase with no default\n- prompts for a Node URL with default `https://archon.technology`\n- uses `ARCHON_PASSPHRASE` and `ARCHON_NODE_URL` during setup\n- runs `keymaster create-id`\n\nAfter setup it prints optional `.bashrc` and `.zshrc` snippets so users can persist the Node URL and, if they choose, the passphrase for future shells.\n\n### Local Development (for developers)\n\nIf you're developing or working on Archon follow these additional steps after cloning.\n\n```bash\nnpm install\nnpm run build\n```\n\n## Overview\n\nAn Archon node includes several interoperating microservices. If you follow the dependency arrows on the diagram below, you will end up at the central core service, the [Gatekeeper service](https://github.com/archetech/archon/blob/main/services/gatekeeper/server/README.md) responsible for maintaining the integrity of the local DID database. The mediators are responsible for connecting the Gatekeeper to various networks such as [Hyperswarm](https://github.com/archetech/archon/blob/main/services/mediators/hyperswarm/README.md). The BTC:testnet4 (Bitcoin testnet) and BTC:signet (another Bitcoin testnet) mediators are both instances of the [Satoshi mediator](https://github.com/archetech/archon/blob/main/services/mediators/satoshi/README.md) since they are derived from Bitcoin core (they differ only in how they are configured). [Keymaster](https://github.com/archetech/archon/blob/main/packages/keymaster/README.md) is the Archon client responsible for holding the private keys and signing DID operations (create, update, delete) sent to Gatekeeper. The [Gatekeeper client app](https://github.com/archetech/archon/blob/main/apps/gatekeeper-client), [browser extension](https://github.com/archetech/archon/blob/main/apps/browser-extension/README.md), [React wallet](https://github.com/archetech/archon/blob/main/apps/react-wallet/README.md), and [Keymaster service](https://github.com/archetech/archon/blob/main/services/keymaster/server/README.md) all use the [Keymaster library](https://github.com/archetech/archon/blob/main/packages/keymaster/README.md). The [Keymaster client app](https://github.com/archetech/archon/blob/main/apps/keymaster-client) is configured to talk to the Keymaster service instead of hosting its own wallet. It uses the same [KeymasterClient](https://github.com/archetech/archon/blob/main/packages/keymaster/src/keymaster-client.ts) as the Archon CLI. There are two CLI (command line interface) components: [archon](scripts/archon-cli.js) for talking to the Keymaster service, and [admin](scripts/admin-cli.js) for talking to the Gatekeeper service. The admin script uses the same [GatekeeperClient](https://github.com/archetech/archon/blob/main/packages/gatekeeper/README.md) as the Keymaster service and the mediators.\n\n\n![alt text](archon-node.png)\n\n## Node configuration\n\nCustomize your node in the archon/.env file. Environment variables are documented for each service in the READMEs linked in the Overview above.\n\n```\nARCHON_UID=1000                                        # Docker host UID\nARCHON_GID=1002                                        # Docker host GID\nARCHON_NODE_NAME=anon                                  # Hyperswarm node name\nARCHON_NODE_ID=anon                                    # Node Keymaster DID name\nARCHON_GATEKEEPER_REGISTRIES=hyperswarm,BTC:testnet4,BTC:signet      # Supported DID Registries\n...\n{adjust registry details for advanced users only}\n```\n\nOnce your node is operational (start-node), you can setup local dependencies and manage your server using local CLI wallet and other command line tools:\n\n```\n$ npm ci                                     # Installs all node package dependencies\n$ ./archon -h                                # Displays archon CLI help\n$ ./archon create-id anon BTC:testnet4               # Creates Node Keymaster DID name (set as ARCHON_NODE_ID in .env)\n$ ./scripts/tbtc-cli createwallet archon             # Creates Archon wallet for Bitcoin Testnet registry\n$ ./scripts/tbtc-cli getnewaddress                   # Get a new address to fund Bitcoin Testnet wallet\n$ ./scripts/tbtc-cli getwalletinfo                   # Get a general status of confirmed and incoming funds\n```\n\n## Command line interface wallet\n\nUse the CLI `./archon` or the Keymaster client at `http://localhost:4226` to access the server-side wallet.\nUse the Gatekeeper client at `http://localhost:4224` to access the local Gatekeeper API.\nUse the React wallet at `http://localhost:4228` for the client-side browser wallet.\n\n```\n$ ./archon\nUsage: archon-cli [options] [command]\n\nArchon CLI tool\n\nOptions:\n  -V, --version                              output the version number\n  -h, --help                                 display help for command\n\nCommands:\n  accept-credential [options] \u003cdid\u003e        Save verifiable credential for current ID\n  add-group-member \u003cgroup\u003e \u003cmember\u003e        Add a member to a group\n  add-vault-item \u003cid\u003e \u003cfile\u003e         Add an item (file) to a vault\n  add-vault-member \u003cid\u003e \u003cmember\u003e     Add a member to a vault\n  add-alias \u003calias\u003e \u003cdid\u003e                  Add an alias for a DID\n  backup-id                                Backup the current ID to its registry\n  backup-wallet-did                        Backup wallet to encrypted DID and seed bank\n  backup-wallet-file \u003cfile\u003e                Backup wallet to file\n  bind-credential \u003cschema\u003e \u003csubject\u003e       Create bound credential for a user\n  check-wallet                             Validate DIDs in wallet\n  clone-asset [options] \u003cid\u003e               Clone an asset\n  create-asset [options]                   Create an empty asset\n  create-asset-file [options] \u003cfile\u003e       Create an asset from a file\n  create-asset-image [options] \u003cfile\u003e      Create an asset from an image file\n  create-asset-json [options] \u003cfile\u003e       Create an asset from a JSON file\n  create-challenge [options] [file]        Create a challenge (optionally from a file)\n  create-challenge-cc [options] \u003cdid\u003e      Create a challenge from a credential DID\n  create-group [options] \u003cgroupName\u003e       Create a new group\n  create-vault [options]             Create a vault\n  create-id [options] \u003cname\u003e               Create a new decentralized ID\n  create-poll [options] \u003cfile\u003e             Create a poll\n  create-poll-template                     Create a poll template\n  create-response \u003cchallenge\u003e              Create a response to a challenge\n  create-schema [options] \u003cfile\u003e           Create a schema from a file\n  create-schema-template \u003cschema\u003e          Create a template from a schema\n  create-wallet                            Create a new wallet (or show existing wallet)\n  decrypt-did \u003cdid\u003e                        Decrypt an encrypted message DID\n  decrypt-json \u003cdid\u003e                       Decrypt an encrypted JSON DID\n  encrypt-file \u003cfile\u003e \u003cdid\u003e                Encrypt a file for a DID\n  encrypt-message \u003cmessage\u003e \u003cdid\u003e          Encrypt a message for a DID\n  encrypt-wallet                           Encrypt wallet\n  fix-wallet                               Remove invalid DIDs from the wallet\n  get-asset \u003cid\u003e                           Get asset by name or DID\n  get-credential \u003cdid\u003e                     Get credential by DID\n  get-group \u003cdid\u003e                          Get group by DID\n  get-vault-item \u003cid\u003e \u003citem\u003e \u003cfile\u003e  Save an item from a vault to a file\n  get-alias \u003calias\u003e                        Get DID assigned to alias\n  get-schema \u003cdid\u003e                         Get schema by DID\n  help [command]                           display help for command\n  import-wallet \u003crecovery-phrase\u003e          Create new wallet from a recovery phrase\n  issue-credential [options] \u003cfile\u003e        Sign and encrypt a bound credential file\n  list-assets                              List assets owned by current ID\n  list-credentials                         List credentials by current ID\n  list-vault-items \u003cid\u003e              List items in the vault\n  list-vault-members \u003cid\u003e            List members of a vault\n  list-groups                              List groups owned by current ID\n  list-ids                                 List IDs and show current ID\n  list-issued                              List issued credentials\n  list-aliases                             List DID aliases\n  list-schemas                             List schemas owned by current ID\n  perf-test [N]                            Performance test to create N credentials\n  publish-credential \u003cdid\u003e                 Publish the existence of a credential to the current user manifest\n  publish-poll \u003cpoll\u003e                      Publish results to poll, hiding ballots\n  recover-id \u003cdid\u003e                         Recovers the ID from the DID\n  recover-wallet-did [did]                 Recover wallet from seed bank or encrypted DID\n  remove-group-member \u003cgroup\u003e \u003cmember\u003e     Remove a member from a group\n  remove-vault-item \u003cid\u003e \u003citem\u003e      Remove an item from a vault\n  remove-vault-member \u003cid\u003e \u003cmember\u003e  Remove a member from a vault\n  remove-id \u003cname\u003e                         Deletes named ID\n  remove-alias \u003calias\u003e                     Removes an alias for a DID\n  rename-id \u003coldName\u003e \u003cnewName\u003e            Renames the ID\n  resolve-did \u003cdid\u003e [confirm]              Return document associated with DID\n  resolve-did-version \u003cdid\u003e \u003cversion\u003e      Return specified version of document associated with DID\n  resolve-id                               Resolves the current ID\n  restore-wallet-file \u003cfile\u003e               Restore wallet from backup file\n  reveal-credential \u003cdid\u003e                  Reveal a credential to the current user manifest\n  reveal-poll \u003cpoll\u003e                       Publish results to poll, revealing ballots\n  revoke-credential \u003cdid\u003e                  Revokes a verifiable credential\n  revoke-did \u003cdid\u003e                         Permanently revoke a DID\n  rotate-keys                              Generates new set of keys for current ID\n  set-property \u003cid\u003e \u003ckey\u003e [value]          Assign a key-value pair to an asset\n  show-mnemonic                            Show recovery phrase for wallet\n  show-wallet                              Show wallet\n  sign-file \u003cfile\u003e                         Sign a JSON file\n  test-group \u003cgroup\u003e [member]              Determine if a member is in a group\n  transfer-asset \u003cid\u003e \u003ccontroller\u003e         Transfer asset to a new controller\n  unpublish-credential \u003cdid\u003e               Remove a credential from the current user manifest\n  unpublish-poll \u003cpoll\u003e                    Remove results from poll\n  update-asset-file \u003cid\u003e \u003cfile\u003e            Update an asset from a file\n  update-asset-image \u003cid\u003e \u003cfile\u003e           Update an asset from an image file\n  update-asset-json \u003cid\u003e \u003cfile\u003e            Update an asset from a JSON file\n  update-poll \u003cballot\u003e                     Add a ballot to the poll\n  use-id \u003cname\u003e                            Set the current ID\n  verify-file \u003cfile\u003e                       Verify the signature in a JSON file\n  verify-response \u003cresponse\u003e               Decrypt and validate a response to a challenge\n  view-poll \u003cpoll\u003e                         View poll details\n  vote-poll \u003cpoll\u003e \u003cvote\u003e [spoil]          Vote in a poll\n```\n\n## admin-cli\n\nUse the admin CLI to manage and view status of your server's DID registry operations.\n\n```\n$ ./admin\nUsage: admin-cli [options] [command]\n\nAdmin CLI tool\n\nOptions:\n  -V, --version                                                output the version number\n  -h, --help                                                   display help for command\n\nCommands:\n  ipfs-add-file \u003cfile\u003e                                         Add a file to IPFS\n  ipfs-add-json \u003cfile\u003e                                         Add JSON file to IPFS\n  ipfs-add-text \u003ctext\u003e                                         Add text to IPFS\n  ipfs-get-file \u003ccid\u003e \u003cfile\u003e                                   Get a file from IPFS\n  ipfs-get-json \u003ccid\u003e                                          Get JSON from IPFS\n  ipfs-get-text \u003ccid\u003e                                          Get text from IPFS\n  export-batch                                                 Export all events in a batch\n  export-did \u003cdid\u003e                                             Export DID to file\n  export-dids                                                  Export all DIDs\n  get-block \u003cregistry\u003e [blockHeightOrHash]                     Get block info for registry\n  get-dids [updatedAfter] [updatedBefore] [confirm] [resolve]  Fetch all DIDs\n  get-status                                                   Report gatekeeper status\n  hash-dids \u003cfile\u003e                                             Compute hash of batch\n  help [command]                                               display help for command\n  import-batch-file \u003cfile\u003e [registry]                          Import batch of events\n  import-did \u003cfile\u003e                                            Import DID from file\n  import-dids \u003cfile\u003e                                           Import DIDs from file\n  list-registries                                              List supported registries\n  perf-test [full]                                             DID resolution performance test\n  process-events                                               Process events queue\n  reset-db                                                     Reset the database to empty\n  resolve-did \u003cdid\u003e [confirm]                                  Return document associated with DID\n  show-queue \u003cregistry\u003e                                        Show queue for a registry\n  verify-db                                                    Verify all the DIDs in the db\n  verify-did \u003cdid\u003e                                             Return verified document associated with DID\n```\n\n## Upgrade\n\nTo upgrade to the latest version:\n\n```\n$ ./stop-node\n$ git pull\n$ ./start-node\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farchetech%2Farchon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farchetech%2Farchon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farchetech%2Farchon/lists"}