Python bindings for the Helm v4 Go library. Ships with a self-contained Go shim that bundles the native Helm runtime—no system dependencies required.
✨ Features
- 🚀 Complete Helm API - Full access to Helm v4 functionality
- ⚡ Async-First - All operations use async/await for non-blocking execution
- 📦 Self-Contained - No system dependencies required
- 🔒 Type-Safe - Python type hints for better IDE support
- 🐍 Pythonic API - Intuitive, object-oriented interface
- 🎯 Production Ready - Based on official Helm Go libraries
- 🔄 Concurrent - Execute multiple operations simultaneously with asyncio
🚀 Quick Start
Note: helm-sdkpy uses an async-first API. All operations must be awaited. This enables non-blocking execution and concurrent operations with asyncio.gather().
Installation
pip install helm-sdkpy
Basic Usage
import asyncio
import helm-sdkpy
async def main():
# Create a configuration
config = helm-sdkpy.Configuration(namespace="default")
# Install a chart from a local path
install = helm-sdkpy.Install(config)
result = await install.run(
release_name="my-nginx",
chart_path="./nginx-chart",
values={"replicaCount": 3}
)
print(f"Installed: {result['name']}")
# Install a chart from an OCI registry
result = await install.run(
release_name="my-app",
chart_path="oci://ghcr.io/nginxinc/charts/nginx-ingress",
values={"controller": {"service": {"type": "LoadBalancer"}}}
)
print(f"Installed: {result['name']}")
# Install a chart from an HTTPS URL
result = await install.run(
release_name="my-release",
chart_path="https://charts.bitnami.com/bitnami/nginx-15.0.0.tgz",
values={"replicaCount": 2}
)
print(f"Installed: {result['name']}")
# List releases
list_action = helm-sdkpy.List(config)
releases = await list_action.run(all=True)
for release in releases:
print(f"Release: {release['name']}")
# Upgrade a release
upgrade = helm-sdkpy.Upgrade(config)
result = await upgrade.run(
release_name="my-nginx",
chart_path="./nginx-chart",
values={"replicaCount": 5}
)
# Uninstall a release
uninstall = helm-sdkpy.Uninstall(config)
result = await uninstall.run("my-nginx")
asyncio.run(main())
Concurrent Operations
Take advantage of Python's asyncio to run multiple Helm operations concurrently:
import asyncio
import helm-sdkpy
async def deploy_multiple_apps():
config = helm-sdkpy.Configuration(namespace="default")
install = helm-sdkpy.Install(config)
# Install multiple charts concurrently
results = await asyncio.gather(
install.run("app-1", "oci://registry.io/chart1"),
install.run("app-2", "oci://registry.io/chart2"),
install.run("app-3", "oci://registry.io/chart3"),
)
for result in results:
print(f"Deployed: {result['name']}")
asyncio.run(deploy_multiple_apps())
📖 Chart Path Formats
helm-sdkpy supports multiple chart location formats:
Local Paths
Point to a chart directory or packaged chart (.tgz) on your local filesystem:
chart_path="./nginx-chart" # Local directory
chart_path="/path/to/mychart" # Absolute path
chart_path="./mychart-1.0.0.tgz" # Packaged chart
OCI Registries
Reference charts stored in OCI-compatible container registries:
chart_path="oci://ghcr.io/nginxinc/charts/nginx-ingress"
chart_path="oci://registry.example.com/charts/myapp"
HTTP/HTTPS URLs
Download charts directly from web servers:
chart_path="https://charts.bitnami.com/bitnami/nginx-15.0.0.tgz"
chart_path="https://example.com/charts/myapp-1.2.3.tgz"
🔧 Kubeconfig Configuration
helm-sdkpy provides flexible options for configuring Kubernetes cluster access:
Default Kubeconfig
# Uses $KUBECONFIG env var or ~/.kube/config
config = helm_sdkpy.Configuration(namespace="default")
File Path
# Explicit path to kubeconfig file
config = helm_sdkpy.Configuration(
namespace="default",
kubeconfig="/path/to/kubeconfig.yaml"
)
YAML String
Pass kubeconfig content directly as a string - useful for dynamic configurations, secrets, or CI/CD environments:
# Kubeconfig from environment variable
kubeconfig_content = os.environ.get("KUBECONFIG_CONTENT")
# Or read from a secret, API response, etc.
config = helm_sdkpy.Configuration(
namespace="default",
kubeconfig=kubeconfig_content # YAML string auto-detected
)
Specific Context
# Use a specific context from multi-cluster kubeconfig
config = helm_sdkpy.Configuration(
namespace="production",
kubeconfig="/path/to/kubeconfig.yaml",
kubecontext="production-cluster"
)
See examples/kubeconfig_usage.py for more detailed examples.
📖 API Overview
Core Actions (All Async)
- Configuration - Manage Helm configuration and Kubernetes connection
- Install - Install charts to Kubernetes (async)
- Upgrade - Upgrade existing releases (async)
- Uninstall - Remove releases from cluster (async)
- List - List deployed releases (async)
- Status - Get release status information (async)
- Rollback - Rollback to previous release versions (async)
- GetValues - Retrieve release values (async)
- History - View release history (async)
Chart Operations (All Async)
- Pull - Download charts from repositories (async)
- Show - Display chart information and values (async)
- Test - Run release tests (async)
- Lint - Validate charts for errors (async)
- Package - Package charts into archives (async)
All methods use async def and must be awaited. This enables non-blocking operations
and concurrent execution with asyncio.gather().
🛠️ Development
Prerequisites
- Python 3.12+
- Docker (for building the native library)
- just task runner (optional but recommended)
Building from Source
git clone https://github.com/vantagecompute/helm-sdkpy.git
cd helm-sdkpy
# Build native library using Docker
just build-lib
# Install in development mode
pip install -e .
Running Tests
# Run test suite
just unit
# Run linting
just lint
# Run type checking
just typecheck
Project Commands
The project uses just for task automation:
# Install just
sudo snap install just --classic
Available commands:
just build-lib- Build native library (Docker)just unit- Run tests with coveragejust lint- Check code stylejust typecheck- Run static type checkingjust fmt- Format code
📝 Examples
See the examples/ directory for more usage examples.
🏗️ Architecture
helm-sdkpy follows the same architecture as dqlitepy:
- Go Shim Layer - Exposes Helm v4 API via C FFI
- Python FFI - CFFI bindings to Go shared library
- Python API - Pythonic wrapper classes
This ensures type safety, excellent performance, and seamless integration with the official Helm libraries.
📝 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Copyright 2025 Vantage Compute
🤝 Contributing
Contributions welcome! Please ensure:
- Code follows existing style (ruff formatting)
- Tests pass and coverage is maintained
- Type hints are included
- Documentation is updated
💬 Support
- GitHub Issues - Bug reports and feature requests
- Examples - Sample code and use cases
Release files for helm-sdkpy 0.1.29
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| helm_sdkpy-0.1.29.tar.gz | 45.2 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| helm_sdkpy-0.1.29-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 90.7 MB
Release files / helm_sdkpy-0.1.29.tar.gz
| Download URL | helm_sdkpy-0.1.29.tar.gz |
|---|---|
| Size | 45.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f5195a2b66b4fcde5b9e76f99a46a673f26873d62dca9356f88b04627a72aa46
|
|
BLAKE2b-256 checksum How to use checksums |
f9b28e1b3d5fc41bb11d0718d89c040f5b0b12b7be582999937c31c07aea1ae8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / helm_sdkpy-0.1.29-py3-none-any.whl
| Download URL | helm_sdkpy-0.1.29-py3-none-any.whl |
|---|---|
| Size | 45.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aa8d5b0d0a1b7a6f00dc0139b25bb2272b4e2a960867a67213a3eed5d8a17c0e
|
|
BLAKE2b-256 checksum How to use checksums |
e3fb5dd4eacd4dedfec86a090a607cb502cb953a7005a6beb70822bde8b30794
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.18 {"installer":{"name":"uv","version":"0.12.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|