Web5 CLI
Overview
Web5 CLI is a command-line tool for interacting with Web5 infrastructure. It provides key management, CKB wallet operations, DID lifecycle management, and PDS (Personal Data Store) interactions.
install
npm install -g web5-cli
Commands
| Command |
Purpose |
Key Subcommands |
keystore |
DID signing key management |
new, import, clean, get, sign, verify |
wallet |
CKB wallet operations |
new, import, clean, get, send-tx, check-tx, balance |
did |
DID lifecycle on CKB |
build-create-tx, build-destroy-tx, build-update-didkey-tx, build-update-handle-tx, build-transfer-tx, list |
pds |
PDS server interactions |
check-username, get-did-by-username, create-account, delete-account, login, write, repo, records, blobs, export, import |
Quick Reference
Key Management
web5-cli keystore new # Create new keypair
web5-cli keystore import --sk <hex> # Import private key
web5-cli keystore get # Get DID key
web5-cli keystore sign --message <hex> # Sign message
web5-cli keystore verify --message <hex> --signature <hex> # Verify signature
Wallet Operations
web5-cli wallet new # Create CKB wallet
web5-cli wallet import --sk <hex> # Import wallet
web5-cli wallet get # Get CKB address
web5-cli wallet balance # Check balance
web5-cli wallet send-tx --tx-path <path> # Send transaction
web5-cli wallet check-tx --tx-hash <hash> # Check tx status
DID Management
web5-cli did build-create-tx --username <name> --pds <url> --didkey <key> --output-path <path>
web5-cli did build-destroy-tx --args <args> --output-path <path>
web5-cli did build-update-didkey-tx --args <args> --new-didkey <key> --output-path <path>
web5-cli did list --ckb-addr <address> # List DID cells
PDS Operations
web5-cli pds check-username --username <name>
web5-cli pds get-did-by-username --username <name>
web5-cli pds create-account --pds <domain> --username <name> --didkey <key> --did <did> --ckb-address <addr>
web5-cli pds login --pds <domain> --didkey <key> --did <did> --ckb-address <addr>
web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --rkey <key> --data <json>
web5-cli pds repo --pds <domain> --did <did>
web5-cli pds records --pds <domain> --did <did> --collection <nsid> [--limit N] [--cursor <cursor>]
web5-cli pds export --pds <domain> --did <did> --data-file <path> [--since <cid>]
web5-cli pds import --pds <domain> --did <did> --accessJwt <jwt> --data-file <path>
Configuration
- Keystore: Private key stored at
~/.web5-cli/signkey
- Wallet: Private key stored at
~/.web5-cli/ckb-sk
- Account Info: Stored at
~/.web5-cli/account.json after account creation (includes Username, DID, Handle, didkey, ckb address, PDS domain, etc.)
- Network: Set via
CKB_NETWORK environment variable (ckb_testnet or ckb)
Output Format
All commands output JSON format for easy parsing by AI agents and scripts.
Notes
- --pds arg no 'https://' or 'http://' prefix, just the hostname
- one account only and always belong to one pds
- only one did and one account in same time
- Don't modify or delete the key/wallet files directly, use the CLI commands to manage them, and need user confirmation for destructive actions like
keystore clean or wallet clean
Workflow Scripts
Use these Python scripts for common multi-step operations:
create account
- call
web5-cli wallet get check if wallet exists and get ckb address
- if no wallet, create wallet and get ckb address
- call
web5-cli wallet balance check if balance > 450 testnet CKB
- if no balance, prompt user to transfer some ckb to ckb address and wait for confirmation
- once have enough balance, call
scripts/create_account.py to complete account creation (keystore + wallet + DID + PDS)
- write account info (includes Username, DID, Handle, didkey, ckb address, PDS domain, etc) to
~/.web5-cli/account.json for later use (like posting, profile update)
destroy account
- call
scripts/destroy_account.py to complete account destruction (delete PDS Account then destory DID cell, don't delete wallet or keystore since they can be reused for new accounts)
- delete
~/.web5-cli/account.json after account destroyed
update profile
- get account info from
~/.web5-cli/account.json, if not exist, notify user to create account first and exit
- prompt user to input new profile info (like displayName, handle, etc), and construct json data for writing to pds
- call
web5-cli pds login --pds <domain> --didkey <didkey> --did <did> --ckb-address <addr> with the correct parameters to get an access jwt for PDS operations, if login failed, notify user and exit
- call
web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --rkey 'self' --data <json> to update profile record in PDS, with the correct parameters. json data should be in the format of
{
$type: 'app.actor.profile'
displayName: string;
handle: string;
[key: string]: any;
}
post to bbs
- get account info from
~/.web5-cli/account.json, if not exist, notify user to create account first and exit
- prompt user to input post info (like section_id, title, text), and construct json data for writing to pds. about section_id, you can use "3" or "4" for now.
- call
web5-cli pds login --pds <domain> --didkey <didkey> --did <did> --ckb-address <addr> with the correct parameters to get an access jwt for PDS operations, if login failed, notify user and exit
- call
web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --data <json> (--rkey is no need) to create a new post in PDS, with the correct parameters. json data should be in the format of
{
$type: 'app.bbs.post'
section_id: string;
title: string;
text: string;
}
Script Examples
# Create a complete account
python create_account.py alice web5.bbsfans.dev
# destroy the account
python destroy_account.py alice web5.bbsfans.dev
Security Notes
- Private keys are stored in plaintext for this technical validation tool
- Do NOT use in production environments
- This is a proof-of-concept for AI-agent-driven Web5 interactions
public information
avliable pds url:
- web5.bbsfans.dev
- web5.ccfdao.dev
avliable data structure for writing to pds:
{
$type: 'app.actor.profile'
displayName: string;
handle: string;
[key: string]: any;
}
{
$type: 'app.bbs.post'
section_id: string;
title: string;
text: string;
edited?: string
created?: string
is_draft?: boolean
is_announcement?: boolean
}
{
$type: 'app.bbs.comment'
post: string // 原帖uri
text: string;
section_id: string;
edited?: string;
}
{
$type: 'app.bbs.like'
to: string;
section_id: string;
}
{
$type: 'app.bbs.reply'
post: string
comment?: string
to?: string
text: string
section_id: string
edited?: string
}
{
$type: 'app.dao.reply'
proposal: string
to?: string
text: string
parent?: string
}
{
$type: 'app.dao.proposal'
[key: string]: unknown;
}
{
$type: 'app.dao.like'
to: string;
viewer: string;
}
1---2name: web5-cli3description: Use when working with Web5 CLI tool for decentralized identity, CKB wallet, DID management, PDS data operations, account creation, posting, profile updates4---5
6# Web5 CLI
7
8## Overview
9Web5 CLI is a command-line tool for interacting with Web5 infrastructure. It provides key management, CKB wallet operations, DID lifecycle management, and PDS (Personal Data Store) interactions.
10
11## install
12```bash
13npm install -g web5-cli
14```
15
16## Commands
17
18| Command | Purpose | Key Subcommands |
19|---------|---------|-----------------|
20| `keystore` | DID signing key management | new, import, clean, get, sign, verify |
21| `wallet` | CKB wallet operations | new, import, clean, get, send-tx, check-tx, balance |
22| `did` | DID lifecycle on CKB | build-create-tx, build-destroy-tx, build-update-didkey-tx, build-update-handle-tx, build-transfer-tx, list |
23| `pds` | PDS server interactions | check-username, get-did-by-username, create-account, delete-account, login, write, repo, records, blobs, export, import |
24
25## Quick Reference
26
27### Key Management
28```bash
29web5-cli keystore new # Create new keypair
30web5-cli keystore import --sk <hex> # Import private key
31web5-cli keystore get # Get DID key
32web5-cli keystore sign --message <hex> # Sign message
33web5-cli keystore verify --message <hex> --signature <hex> # Verify signature
34```
35
36### Wallet Operations
37```bash
38web5-cli wallet new # Create CKB wallet
39web5-cli wallet import --sk <hex> # Import wallet
40web5-cli wallet get # Get CKB address
41web5-cli wallet balance # Check balance
42web5-cli wallet send-tx --tx-path <path> # Send transaction
43web5-cli wallet check-tx --tx-hash <hash> # Check tx status
44```
45
46### DID Management
47```bash
48web5-cli did build-create-tx --username <name> --pds <url> --didkey <key> --output-path <path>
49web5-cli did build-destroy-tx --args <args> --output-path <path>
50web5-cli did build-update-didkey-tx --args <args> --new-didkey <key> --output-path <path>
51web5-cli did list --ckb-addr <address> # List DID cells
52```
53
54### PDS Operations
55```bash
56web5-cli pds check-username --username <name>
57web5-cli pds get-did-by-username --username <name>
58web5-cli pds create-account --pds <domain> --username <name> --didkey <key> --did <did> --ckb-address <addr>
59web5-cli pds login --pds <domain> --didkey <key> --did <did> --ckb-address <addr>
60web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --rkey <key> --data <json>
61web5-cli pds repo --pds <domain> --did <did>
62web5-cli pds records --pds <domain> --did <did> --collection <nsid> [--limit N] [--cursor <cursor>]
63web5-cli pds export --pds <domain> --did <did> --data-file <path> [--since <cid>]
64web5-cli pds import --pds <domain> --did <did> --accessJwt <jwt> --data-file <path>
65```
66
67## Configuration
68
69- **Keystore**: Private key stored at `~/.web5-cli/signkey`
70- **Wallet**: Private key stored at `~/.web5-cli/ckb-sk`
71- **Account Info**: Stored at `~/.web5-cli/account.json` after account creation (includes Username, DID, Handle, didkey, ckb address, PDS domain, etc.)
72- **Network**: Set via `CKB_NETWORK` environment variable (`ckb_testnet` or `ckb`)
73
74## Output Format
75
76All commands output JSON format for easy parsing by AI agents and scripts.
77
78## Notes
79* --pds arg no 'https://' or 'http://' prefix, just the hostname
80* one account only and always belong to one pds
81* only one did and one account in same time
82* Don't modify or delete the key/wallet files directly, use the CLI commands to manage them, and need user confirmation for destructive actions like `keystore clean` or `wallet clean`
83
84## Workflow Scripts
85
86Use these Python scripts for common multi-step operations:
87
88### create account
891. call `web5-cli wallet get` check if wallet exists and get ckb address
902. if no wallet, create wallet and get ckb address
913. call `web5-cli wallet balance` check if balance > 450 testnet CKB
924. if no balance, prompt user to transfer some ckb to ckb address and wait for confirmation
935. once have enough balance, call `scripts/create_account.py` to complete account creation (keystore + wallet + DID + PDS)
946. write account info (includes Username, DID, Handle, didkey, ckb address, PDS domain, etc) to `~/.web5-cli/account.json` for later use (like posting, profile update)
95
96### destroy account
971. call `scripts/destroy_account.py` to complete account destruction (delete PDS Account then destory DID cell, don't delete wallet or keystore since they can be reused for new accounts)
982. delete `~/.web5-cli/account.json` after account destroyed
99
100### update profile
1011. get account info from `~/.web5-cli/account.json`, if not exist, notify user to create account first and exit
1022. prompt user to input new profile info (like displayName, handle, etc), and construct json data for writing to pds
1034. call `web5-cli pds login --pds <domain> --didkey <didkey> --did <did> --ckb-address <addr>` with the correct parameters to get an access jwt for PDS operations, if login failed, notify user and exit
1045. call `web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --rkey 'self' --data <json>` to update profile record in PDS, with the correct parameters. json data should be in the format of
105```
106{
107 $type: 'app.actor.profile'
108 displayName: string;
109 handle: string;
110 [key: string]: any;
111}
112```
113
114### post to bbs
1151. get account info from `~/.web5-cli/account.json`, if not exist, notify user to create account first and exit
1162. prompt user to input post info (like section_id, title, text), and construct json data for writing to pds. about section_id, you can use "3" or "4" for now.
1173. call `web5-cli pds login --pds <domain> --didkey <didkey> --did <did> --ckb-address <addr>` with the correct parameters to get an access jwt for PDS operations, if login failed, notify user and exit
1184. call `web5-cli pds write --pds <domain> --accessJwt <jwt> --didkey <key> --did <did> --data <json>` (--rkey is no need) to create a new post in PDS, with the correct parameters. json data should be in the format of
119```
120{
121 $type: 'app.bbs.post'
122 section_id: string;
123 title: string;
124 text: string;
125}
126```
127
128
129### Script Examples
130
131```bash
132# Create a complete account
133python create_account.py alice web5.bbsfans.dev
134
135# destroy the account
136python destroy_account.py alice web5.bbsfans.dev
137```
138
139## Security Notes
140
141- Private keys are stored in plaintext for this technical validation tool
142- Do NOT use in production environments
143- This is a proof-of-concept for AI-agent-driven Web5 interactions
144
145## public information
146avliable pds url:
147* web5.bbsfans.dev
148* web5.ccfdao.dev
149
150avliable data structure for writing to pds:
151* profile of user
152```
153{
154 $type: 'app.actor.profile'
155 displayName: string;
156 handle: string;
157 [key: string]: any;
158}
159```
160* post of bbs
161```
162{
163 $type: 'app.bbs.post'
164 section_id: string;
165 title: string;
166 text: string;
167 edited?: string
168 created?: string
169 is_draft?: boolean
170 is_announcement?: boolean
171}
172```
173* comment of bbs
174```
175{
176 $type: 'app.bbs.comment'
177 post: string // 原帖uri
178 text: string;
179 section_id: string;
180 edited?: string;
181}
182```
183* like of bbs
184```
185{
186 $type: 'app.bbs.like'
187 to: string;
188 section_id: string;
189}
190```
191* reply of bbs
192```
193{
194 $type: 'app.bbs.reply'
195 post: string
196 comment?: string
197 to?: string
198 text: string
199 section_id: string
200 edited?: string
201}
202```
203* reply of dao
204```
205{
206 $type: 'app.dao.reply'
207 proposal: string
208 to?: string
209 text: string
210 parent?: string
211}
212```
213* proposal of dao
214```
215{
216 $type: 'app.dao.proposal'
217 [key: string]: unknown;
218}
219```
220* like of dao
221```
222{
223 $type: 'app.dao.like'
224 to: string;
225 viewer: string;
226}
227```