CLI Arguments Reference
Complete reference for all svmgov CLI command-line arguments and configuration.
Global Arguments (All Commands)
| Option | Short | Env Var | Description |
|---|---|---|---|
--keypair <PATH> | -k | SVMGOV_KEY | Signer keypair JSON file or Ledger URI |
--rpc-url <URL> | -r | SVMGOV_RPC | Solana RPC endpoint |
--network <NETWORK> | -n | — | Network for verifier/proof fetching; overrides config |
--squads <PUBKEY> | — | — | Squads vault address for supported transactions; multisig state addresses are also accepted |
--squads-vault-index <U8> | — | — | Squads vault index; defaults to 0 and must match the supplied vault |
--squads-memo <TEXT> | — | — | Optional memo for the Squads vault transaction |
--squads-program-id <PUBKEY> | — | — | Override the canonical Squads program ID |
Resolution order: explicit flags → env vars → config file → built-in defaults
--squads accepts the vault address shown in the Squads app. The CLI looks up its
multisig on the selected RPC and verifies the vault derivation before loading the
signer. Vault lookup requires an RPC that supports getProgramAccounts; it can
take several seconds on mainnet. Existing multisig state addresses skip the lookup.
For a sub-account, also supply its index with --squads-vault-index.
Ledger
Pass a Solana Ledger URI to --keypair (or --staker-keypair):
svmgov update-global-config \
--max-support-epochs 10 --discussion-epochs 10 --voting-epochs 4 \
--keypair 'usb://ledger?key=0/0' \
--squads "$SQUADS" --rpc-url "$MAINNET_RPC"Use the derivation path for your account: ?key=0/0 selects m/44'/501'/0'/0';
omitting ?key= uses Solana’s default m/44'/501'. A device can be selected with
usb://ledger/<PUBKEY>?key=0/0, where <PUBKEY> is its default-path public key.
Unlock the Ledger, open the Solana app, and enable blind signing for governance
and Squads instructions. Approve each transaction on the device. In Squads mode,
the Ledger signs the proposal creation transaction as a multisig member and fee payer.
Ledger URIs also work in SVMGOV_KEY and the existing keypair config values.
Building from source on Debian/Ubuntu additionally requires libudev-dev.
Configuration File
Path: ~/.svmgov/config.toml
user_type = "Validator" # or "Staker"
identity_keypair_path = "/path/to/validator.json"
network = "mainnet"
rpc_url = "https://api.mainnet-beta.solana.com"
operator_api_url = "https://ncn-governance.solana.com"The default operator_api_url is the main NCN router.
Config Commands
svmgov config show # Show entire config
svmgov config get <key> # Get one value
svmgov config set <key> <value> # Set one valueSettable Keys
| Key | Description |
|---|---|
network | Default network (mainnet, testnet, devnet) |
rpc-url | Default Solana RPC URL |
operator-api-url | Verifier service or router URL for proof fetching. Defaults to the main NCN router, https://ncn-governance.solana.com; override only if you run a different verifier/router. |
identity-keypair | Validator identity keypair path |
staker-keypair | Staker keypair path |
Basis Points
All vote allocations use basis points (bp):
| Basis Points | Percentage |
|---|---|
10,000 | 100% |
7,000 | 70% |
5,000 | 50% |
1,000 | 10% |
1 | 0.01% |
When voting, for_votes + against_votes + abstain_votes must equal exactly 10,000.
Validator Command Arguments
create-proposal
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
--title | String | Yes | — | Proposal title; byte length must be ≤ configured max_title_length and ≤ 200 |
--description | String | Yes | — | URL in https://github.com/solana-foundation/solana-governance-proposals/... without ..; byte length must be ≤ configured max_description_length and ≤ 500 |
--network | String | No | Config value | Network for proof fetching |
--seed | u64 | No | Random | PDA derivation seed |
support-proposal
| Argument | Type | Required | Description |
|---|---|---|---|
--proposal-id | String | Yes | Proposal PDA (base58) |
--network | String | No | Network override |
cast-vote / modify-vote
| Argument | Type | Required | Description |
|---|---|---|---|
--proposal-id | String | Yes | Proposal PDA (base58) |
--for-votes | u64 | Yes | Basis points For (0–10,000) |
--against-votes | u64 | Yes | Basis points Against (0–10,000) |
--abstain-votes | u64 | Yes | Basis points Abstain (0–10,000) |
--network | String | No | Network override |
--close-timestamp | i64 | No | (cast-vote only) Unix timestamp after which the MetaMerkleProof PDA may be closed permissionlessly. Defaults to the proposal’s vote-expiry time |
finalize-proposal
| Argument | Type | Required | Description |
|---|---|---|---|
--proposal-id | String | Yes | Proposal PDA (base58) |
list-proposals
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
--status | String | No | — | Filter: active, support, finalized |
--limit | usize | No | — | Max results |
--json | flag | No | false | Output JSON |
proposal
| Argument | Type | Required | Description |
|---|---|---|---|
<PROPOSAL_ID> | String | Yes | Proposal PDA (base58, positional) |
Staker Command Arguments
cast-vote-override / modify-vote-override
| Argument | Type | Required | Description |
|---|---|---|---|
--proposal-id | String | Yes | Proposal PDA (base58) |
--for-votes | u64 | Yes | Basis points For (0–10,000) |
--against-votes | u64 | Yes | Basis points Against (0–10,000) |
--abstain-votes | u64 | Yes | Basis points Abstain (0–10,000) |
--stake-account | String | Yes | Stake account pubkey (base58) |
--vote-account | String | Yes | Validator vote account pubkey (base58) |
--network | String | No | Network override |
--staker-keypair | String | Yes | Staker keypair JSON file or Ledger URI |
--close-timestamp | i64 | No | (cast-vote-override only) Unix timestamp after which the MetaMerkleProof PDA may be closed permissionlessly. Defaults to the proposal’s vote-expiry time |
Admin Command Arguments
init-global-config
| Argument | Type | Required | Description |
|---|---|---|---|
--max-title-length | u16 | Yes | Maximum proposal title bytes |
--max-description-length | u16 | Yes | Maximum proposal description bytes |
--max-support-epochs | u64 | Yes | Maximum support phase epochs |
--min-proposal-stake-lamports | u64 | Yes | Minimum stake required to create a proposal |
--cluster-support-pct-min-bps | u64 | Yes | Support threshold in basis points |
--discussion-epochs | u64 | Yes | Discussion phase epochs |
--voting-epochs | u64 | Yes | Voting phase epochs |
--snapshot-epoch-extension | u64 | Yes | Epoch extension used when computing the snapshot slot |
--snapshot-slot-offset | i64 | Yes | Slot offset from the target epoch start slot |
update-global-config
Same fields as init-global-config, but every field is optional and only supplied values are changed.
nominate-admin / accept-admin
| Command | Argument | Required | Description |
|---|---|---|---|
nominate-admin | --new-admin <PUBKEY> | Yes | Pending admin that must later accept |
accept-admin | — | — | Must be signed by the pending admin |