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>.

Manage addresses after deploy

v6ctl nodes addresses <pay-id>                  # existing list shorthand
v6ctl nodes addresses add <pay-id> dedicated_ipv4
v6ctl nodes addresses add <pay-id> public_ipv6
v6ctl nodes addresses add <pay-id> routed_ipv6
v6ctl nodes addresses delete <pay-id> <address-id>

dedicated_ipv4 is billable. Routed IPv6 allocation is asynchronous; use v6ctl nodes addresses <pay-id> or the address.created / address.allocation_failed webhook events to observe the outcome. Shared IPv4 is not offered. If an add or delete returns HYPERVISOR_ERROR, list the addresses before doing anything else—the allocation or release may already be committed.

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.6.1

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.6.1
File Size Uploaded
v6ctl-0.6.1.tar.gz 20.2 kB Details

Built distribution (wheel)

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

Total release size: 39.1 kB

Release files / v6ctl-0.6.1.tar.gz

Download URL v6ctl-0.6.1.tar.gz
Size 20.2 kB
Tags Source
SHA-256 checksum
How to use checksums
342d3f26f64d14e7887b95e81f8d159fc70530a657418f2d02f448b2426bfb4a
BLAKE2b-256 checksum
How to use checksums
e5e3b198680eb201fa20a11b12428804d7a3685e3851953d9bb724180c568633
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

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

Download URL v6ctl-0.6.1-py3-none-any.whl
Size 18.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0cd84e4d1c6056808d738789d6cdb2e47993f0fcc05b19fe0fa6b7c27dca76a2
BLAKE2b-256 checksum
How to use checksums
950d6861d358e4e78291228c8d90163aa98a672e004f7d815c709bb6c6ef528c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.3

Release history Release notifications | RSS feed

0.8.0

2 release files

0.7.0

2 release files

This release

0.6.1 This release

2 release files

0.6.0

2 release files

0.5.0

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