Skip to main content

v6ctl

The official CLI for the v6Node API. Deploy and manage VPS nodes, SSH keys, and webhooks — interactively with Rich tables, or scripted with --json.

pipx install v6ctl
v6ctl config set token v6_...
v6ctl nodes list

Contributors: this package is published to PyPI. README.md becomes the public project description and the wheel ships v6ctl.py in full, so code comments and --help text are public too. ./release.sh verify scans the built artifacts for internal host names, site codes, CPU models and algorithms, and refuses to publish if it finds any.

Install

pipx install v6ctl     # recommended — isolated, upgradable
pip install v6ctl      # works too

No pipx? brew install pipx (macOS), sudo apt install pipx (Debian/Ubuntu), or python3 -m pip install --user pipx && python3 -m pipx ensurepath.

Configure

Get a token from the v6Node dashboard, then:

v6ctl config set token v6_...

Stored at ~/.config/v6ctl/config.json with mode 0600. Or set V6_TOKEN in your environment.

Recipes

Deploy a node in one line

v6ctl nodes create -r frankfurt-2 -p 8gb -k laptop -t debian-13

Or run v6ctl nodes create on a TTY and answer the prompts. Each of --region, --plan, --key, --template takes an ID, slug, or name — whichever you remember.

Add a dedicated IPv4 at deploy

v6ctl nodes create -r frankfurt-2 -p 8gb -k laptop -t debian-13 \
  --address dedicated_ipv4

Pin a specific image build with --flavor <id>.

Choose the host (operator tokens only)

Placement is normally chosen for you. Tokens that have been granted the capability can name a host instead:

v6ctl regions list --json      # lists selectable hosts, if your token may see them
v6ctl nodes create -r <region> -p 8gb -k laptop -t debian-13 --host <host>

Host names are only unique within a region, so --host always goes together with --region. Use --server-id instead if you want to be unambiguous.

--ignore-quota allows a host that is reported as full. It is a diagnostic option and needs its own capability.

These are per-token capabilities an account admin grants explicitly; without them the API returns 403. Placement is never silently downgraded, so if the command succeeds the node is on the host you asked for.

Inspect a node, including every IP

v6ctl nodes show <pay-id>
v6ctl nodes list -A          # show all IPs (default truncates to 2)

Manage SSH keys

v6ctl keys list
v6ctl keys create -d "laptop" -k "ssh-ed25519 AAAA..."

Subscribe a webhook to deploy events

v6ctl webhooks create -u https://example.com/hook -e node.deployed

Browse the catalog

v6ctl plans          # plans + pricing
v6ctl regions        # available regions
v6ctl templates      # OS templates and flavors

Script it

v6ctl --json nodes list | jq '.items[].pay_id'
v6ctl --json plans      | jq '.[] | select(.memory_mb >= 4096)'

Every command supports --json and exits non-zero on failure. In non-interactive mode (pipe, CI, or --json), prompts are disabled and missing required flags are an error — so CI fails fast instead of hanging.

v6ctl --help and v6ctl <command> --help are the source of truth for every flag.

Configuration precedence

Source Priority
--flag on the command line 1 (highest)
Env vars (V6_TOKEN, V6_API_URL) 2
Config file ~/.config/v6ctl/config.json (mode 0600) 3
Built-in defaults 4 (lowest)
v6ctl config show       # resolved config, token redacted
v6ctl config path
v6ctl config set api_url https://cloud.v6node.com/api/v1
v6ctl config unset token

Requirements

Python 3.10 or newer.

License

MIT — see LICENSE.

Metadata

Release files for v6ctl 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for v6ctl 0.5.0
File Size Uploaded
v6ctl-0.5.0.tar.gz 18.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for v6ctl 0.5.0
File Interpreter ABI Platform
v6ctl-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 36.3 kB

Release files / v6ctl-0.5.0.tar.gz

Download URL v6ctl-0.5.0.tar.gz
Size 18.0 kB
Tags Source
SHA-256 checksum
How to use checksums
2a4b9c3edebc167320e04d548fef1dfdea1732e0aa12f93e61e287c1f36c6c96
BLAKE2b-256 checksum
How to use checksums
aea2fd229a83bdc05b3534819e9f3eb42620053a2de165249a7272ab727dfa22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / v6ctl-0.5.0-py3-none-any.whl

Download URL v6ctl-0.5.0-py3-none-any.whl
Size 18.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
451966e25cb0f9e5bd70e61ae9456d4f23ab2a9d3207d277a2d01984f266b9a4
BLAKE2b-256 checksum
How to use checksums
1bba588d11fa052985a8eff1ea04bac0c7df7f2e4fd5b3318017509e89b52271
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

0.6.1

2 release files

0.6.0

2 release files

This release

0.5.0 This release

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page