Skip to main content

Official Python SDK for the vxcloud platform — provision infrastructure, deploy apps, and manage running services from Python or CI. Brand alias of vxsdk.

Project description

vxcloud · Python SDK

PyPI version Python versions License Downloads Wheel

Provision infrastructure, deploy applications, and manage running services on the vxcloud platform — straight from Python.

vxcloud is the official, brand-name distribution of the vxcloud Python SDK. It re-exports the entire vxsdk surface, so import vxcloud and import vxsdk are byte-for-byte identical — pick the name your team prefers. The sync client is stdlib-only (zero third-party dependencies); an optional async client is one extra away.

Installation · Quick start · What you can do · Async · Errors · Docs


Installation

pip install vxcloud            # sync client — stdlib only, zero dependencies
pip install vxcloud[async]     # adds httpx for the async client

Requires Python 3.9+. Tested on CPython 3.9 – 3.12.

Quick start

import vxcloud

# Reads ~/.vxcloud/credentials.json (written by `vxcli auth login`)
c = vxcloud.Client.load_from_vxcli()

# ...or pass credentials explicitly
# c = vxcloud.Client(api_key="xc_dev_...", username="alice")

# Provision a VM on AWS
vm = c.cloud.vm.provision(
    name="api-vm", cloud="aws", region="us-east-1",
    instance_type="t3.small", key_pair_name="AWSPRODKEY2",
)
print(vm["public_ip"])

# Deploy a Docker container onto it
result = c.deploy.container(
    host=vm["public_ip"], ssh_user="ubuntu", key_pair_name="AWSPRODKEY1.PEM",
    image="grafana/grafana:latest", name="grafana",
    ports=["3000:3000"], restart_policy="unless-stopped",
)
print(result["session_id"], result.get("status"))

Pick the entry-point name you like

All four resolve to the same client class — there is no behavior difference:

import vxcloud

c = vxcloud.Client.load_from_vxcli()      # canonical
c = vxcloud.VxCloud.load_from_vxcli()     # PascalCase brand (matches the TS SDK)
c = vxcloud.vxcloud.load_from_vxcli()     # lowercase brand
c = vxcloud.load_from_vxcli()             # module-level convenience

What you can do

vxcloud is a thin, typed wrapper over the vxcloud FastAPI control plane. The same JSON wire contract powers the Go and TypeScript SDKs.

Area Example Backend
Compute c.cloud.vm.provision(...), c.cloud.vm.status(...), c.cloud.vm.action(...) /api/v2/tenant/provision/vm
Containers c.deploy.container(...), c.install.compose(...) /api/v2/tenant/container/deploy
App stacks c.deploy.stack("golang", repo_url=..., ...), c.deploy.fastapi(...) /api/v2/infrastructure/services/<kind>/deploy
Storage & IAM c.cloud.create_s3_bucket(...), c.cloud.create_iam_policy(...) /api/v2/tenant/provision/{storage,security}
Networking c.cloud.create_vpc(...) /api/v2/tenant/provision/networks
Kubernetes c.cloud.create_kubernetes_cluster(...), c.cloud.list_kubernetes_clusters() /api/v2/tenant/provision/kubernetes
Serverless c.cloud.create_serverless_function(...) /api/v2/tenant/provision/serverless
CI/CD c.cicd.pipelines.list(), c.cicd.pipelines.trigger(...) /api/v2/cicd/...
Marketplace c.marketplace.agents.deploy(...), c.marketplace.models.list() /api/v2/marketplace/...
AI agents c.agentcontrol.*, c.vxcomputer.run(...) /api/v2/{agentcontrol,vxcomputer}/...
Workflows c.workflow.create(...), c.workflow.execute(...), c.vxchrono.launch_run(...) /api/v2/{workflow,vxchrono}/...
Custom scripts c.install.script(host=..., script="#!/bin/bash\n...") /api/v2/tenant/install/script
# Deploy a language stack straight from a public git repo
c.deploy.stack(
    "golang",
    host="54.197.71.181", ssh_user="ubuntu", key_pair_name="AWSPRODKEY1.PEM",
    repo_url="https://github.com/joelwembo/va-sample-golang.git", branch="main",
    git_provider="github", app_name="va-sample-golang",
    http_port="80", app_port="8080", go_version="1.22",
)

# Trigger a CI/CD pipeline
for p in c.cicd.pipelines.list():
    print(p["id"], p["name"])
build = c.cicd.pipelines.trigger(pipeline_id="abc...", branch="main")

# Deploy a marketplace agent
c.marketplace.agents.deploy(
    "golang_url_status_agent",
    host="54.197.71.181", ssh_user="ubuntu", key_pair_name="AWSPRODKEY1.PEM",
    http_port="8094",
)

Async flavor

Install the extra and switch ClientAsyncClient. Same classes, same method signatures — just add async/await. Ideal for FastAPI/aiohttp services and concurrent fan-out (multi-host deploys, batch installs).

import asyncio
import vxcloud_async as vx

async def main():
    async with await vx.AsyncClient.load_from_vxcli() as c:
        # Three deploys in parallel — ~2.5× faster than sequential
        await asyncio.gather(
            c.deploy.container(host=h1, ssh_user="ubuntu", key_pair_name=K, image="redis:7", ports=["6381:6379"], name="r1"),
            c.deploy.container(host=h2, ssh_user="ubuntu", key_pair_name=K, image="redis:7", ports=["6381:6379"], name="r2"),
            c.deploy.container(host=h3, ssh_user="ubuntu", key_pair_name=K, image="redis:7", ports=["6381:6379"], name="r3"),
        )

asyncio.run(main())

Error handling

try:
    c.cicd.pipelines.list()
except vxcloud.VxAuthError:        # 401 / 403
    ...
except vxcloud.VxValidationError:  # 400 / 422
    ...
except vxcloud.VxRateLimitError as e:   # 429 — inspect e.retry_after
    ...
except vxcloud.VxNotFoundError:    # 404
    ...
except vxcloud.VxServerError:      # 5xx
    ...
except vxcloud.VxNetworkError:     # transport-level
    ...
except vxcloud.VxError:            # base class — anything else
    ...

The client automatically retries transient failures (VxNetworkError, VxServerError, VxRateLimitError) up to 3 times with exponential backoff, and transparently refreshes an expired API key on 401 before replaying the request — so application code rarely sees token expiration. Auth and validation errors are surfaced immediately.

vxcloud vs. vxsdk

Same code vxcloud re-exports every public name from vxsdkClient, VxCloud, all Vx* errors, every resource class, and the module-level load_from_vxcli() helper.
Versioning Each vxcloud release pins the exact matching vxsdk release, so the surface is deterministic at install time.
Which to install Prefer the brand name? pip install vxcloud. Prefer the canonical name? pip install vxsdk. They are interchangeable.

Links

License

Apache-2.0 © vxcloud / ProdXCloud

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vxcloud-2026.6.10.tar.gz (6.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vxcloud-2026.6.10-py3-none-any.whl (6.1 kB view details)

Uploaded Python 3

File details

Details for the file vxcloud-2026.6.10.tar.gz.

File metadata

  • Download URL: vxcloud-2026.6.10.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for vxcloud-2026.6.10.tar.gz
Algorithm Hash digest
SHA256 f6ed0c5bc7460dfdeee90d8cb8621e8f23c6a80e84048956d29c401ac70986da
MD5 a9303047046030d0b929e4d0ebefaf0e
BLAKE2b-256 4672b638344438366159620e1aaf15f761b90f55073a5318f3c140733f6fc399

See more details on using hashes here.

File details

Details for the file vxcloud-2026.6.10-py3-none-any.whl.

File metadata

  • Download URL: vxcloud-2026.6.10-py3-none-any.whl
  • Upload date:
  • Size: 6.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for vxcloud-2026.6.10-py3-none-any.whl
Algorithm Hash digest
SHA256 b2a28f1dd1bb42dc8875e8cb52b8a347c1bc2fa3fee2dacec245b62559c0f1e6
MD5 e8eb1b4e069de3e1c5d34e6037282aef
BLAKE2b-256 63684483a31152034ea57a4d13ecd7a348cf1c63f051fca903d068b072c8bc59

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page