Skip to Content
ReferenceCLI Arguments

CLI Arguments Reference

Complete reference for all svmgov CLI command-line arguments and configuration.

Global Arguments (All Commands)

OptionShortEnv VarDescription
--keypair <PATH>-kSVMGOV_KEYSigner keypair JSON file or Ledger URI
--rpc-url <URL>-rSVMGOV_RPCSolana 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 value

Settable Keys

KeyDescription
networkDefault network (mainnet, testnet, devnet)
rpc-urlDefault Solana RPC URL
operator-api-urlVerifier 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-keypairValidator identity keypair path
staker-keypairStaker keypair path

Basis Points

All vote allocations use basis points (bp):

Basis PointsPercentage
10,000100%
7,00070%
5,00050%
1,00010%
10.01%

When voting, for_votes + against_votes + abstain_votes must equal exactly 10,000.

Validator Command Arguments

create-proposal

ArgumentTypeRequiredDefaultDescription
--titleStringYes—Proposal title; byte length must be ≤ configured max_title_length and ≤ 200
--descriptionStringYes—URL in https://github.com/solana-foundation/solana-governance-proposals/... without ..; byte length must be ≤ configured max_description_length and ≤ 500
--networkStringNoConfig valueNetwork for proof fetching
--seedu64NoRandomPDA derivation seed

support-proposal

ArgumentTypeRequiredDescription
--proposal-idStringYesProposal PDA (base58)
--networkStringNoNetwork override

cast-vote / modify-vote

ArgumentTypeRequiredDescription
--proposal-idStringYesProposal PDA (base58)
--for-votesu64YesBasis points For (0–10,000)
--against-votesu64YesBasis points Against (0–10,000)
--abstain-votesu64YesBasis points Abstain (0–10,000)
--networkStringNoNetwork override
--close-timestampi64No(cast-vote only) Unix timestamp after which the MetaMerkleProof PDA may be closed permissionlessly. Defaults to the proposal’s vote-expiry time

finalize-proposal

ArgumentTypeRequiredDescription
--proposal-idStringYesProposal PDA (base58)

list-proposals

ArgumentTypeRequiredDefaultDescription
--statusStringNo—Filter: active, support, finalized
--limitusizeNo—Max results
--jsonflagNofalseOutput JSON

proposal

ArgumentTypeRequiredDescription
<PROPOSAL_ID>StringYesProposal PDA (base58, positional)

Staker Command Arguments

cast-vote-override / modify-vote-override

ArgumentTypeRequiredDescription
--proposal-idStringYesProposal PDA (base58)
--for-votesu64YesBasis points For (0–10,000)
--against-votesu64YesBasis points Against (0–10,000)
--abstain-votesu64YesBasis points Abstain (0–10,000)
--stake-accountStringYesStake account pubkey (base58)
--vote-accountStringYesValidator vote account pubkey (base58)
--networkStringNoNetwork override
--staker-keypairStringYesStaker keypair JSON file or Ledger URI
--close-timestampi64No(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

ArgumentTypeRequiredDescription
--max-title-lengthu16YesMaximum proposal title bytes
--max-description-lengthu16YesMaximum proposal description bytes
--max-support-epochsu64YesMaximum support phase epochs
--min-proposal-stake-lamportsu64YesMinimum stake required to create a proposal
--cluster-support-pct-min-bpsu64YesSupport threshold in basis points
--discussion-epochsu64YesDiscussion phase epochs
--voting-epochsu64YesVoting phase epochs
--snapshot-epoch-extensionu64YesEpoch extension used when computing the snapshot slot
--snapshot-slot-offseti64YesSlot 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

CommandArgumentRequiredDescription
nominate-admin--new-admin <PUBKEY>YesPending admin that must later accept
accept-admin——Must be signed by the pending admin
Last updated on