juju
Python library for Juju
What it is and what it does
Juju is a Python library that wraps the Juju orchestration platform's WebSocket API, allowing you to programmatically control application deployment, scaling, and lifecycle management. It uses asyncio for non-blocking I/O and provides an object-oriented layer over the underlying WebSocket bindings, exposing familiar operations like Model.deploy(), Application.add_unit(), and model status queries. The library is designed to work with Juju controllers and charms—pre-packaged application definitions—and supports Python 3.8 through 3.13.
The package depends on 13 runtime libraries including websockets for communication, paramiko for SSH, kubernetes for Kubernetes integration, hvac for HashiCorp Vault, and several utility packages for YAML parsing, type inspection, and cryptography. It is intended for developers building automation, CI/CD pipelines, or infrastructure-as-code tooling on top of Juju. The library's WebSocket bindings are generated from Juju's Go codebase to ensure full API coverage.
Use it for:
- Automate application deployment to Juju models from Python scripts or CI/CD pipelines.
- Build infrastructure-as-code tools that programmatically manage charm deployments and scaling.
- Monitor and query the status of deployed applications and units in a Juju model.
- Integrate Juju orchestration into larger Python automation frameworks.
- Develop custom operators or controllers that react to model state changes asynchronously.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
A Python library providing asynchronous bindings to the Juju orchestration platform, enabling programmatic deployment and management of applications and infrastructure through an object-oriented API.
Yes-with-conditions. The package is permissively licensed, has low install friction, and provides a complete async Python interface to Juju. However, the repository is archived and abandoned, with no commits since 2026-07-22 and no releases in 399 days. Install only if you are committed to maintaining a fork or if your Juju version and use case are stable and unlikely to require upstream fixes. Not recommended for new projects expecting ongoing upstream support.
Install
juju on PyPI
pip
pip install jujuuv
uv add jujupoetry
poetry add jujuInstalling juju
Before you install
Low install friction with a pure-Python wheel. However, the repository is archived and marked abandoned as of the fact sheet date, with the last commit on 2026-07-22. The package requires an already-bootstrapped Juju controller to function, which is a runtime prerequisite rather than an install-time one.
License in practice
Licensed under Apache License 2.0 (permissive). You may use, modify, and distribute the package freely provided you include license notices and state changes; no restrictions on commercial use.
Quickstart
pip install juju
import asyncio
from juju.model import Model
async def deploy():
model = Model()
await model.connect()
app = await model.deploy('ubuntu', application_name='my-ubuntu')
await model.disconnect()
asyncio.run(deploy())
Requires an already-bootstrapped Juju controller to connect to; uses asyncio, so code must run in an async context.
Verify before relying
- Whether the archived repository status means the package will receive security updates or bug fixes going forward.
- Compatibility with Juju versions beyond 3.6 and Python versions beyond 3.13.
- Whether the 399 days since last release indicates active maintenance or if the package is truly end-of-life.
Package facts
| License | Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for… (full text in the JSON record) (permissive) |
| Python support | supports the current Python release (>=3.8.6) |
| Install friction | low — pure-Python wheel |
| Runtime dependencies | 13 — macaroonbakery, pyyaml, websockets, paramiko, pyasn1, toposort, typing_inspect, kubernetes, hvac, packaging, typing-extensions, backports.strenum, backports-datetime-fromisoformat |
| Maintenance | abandoned — 399 days since the last release |
| Last repo commit | (repository archived) |
| First released | |
| Downloads | 233,198/month — #9,041 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: juju-3.6.1.3-py3-none-any.whl
Tags
More Distributed Computing packages
gRPC Python is an HTTP/2-based RPC framework…
permissive · top 100 on PyPI
execnetexecnet lets you spawn and communicate with…
permissive · top 1,000 on PyPI
cloudpickleCloudpickle extends Python's standard pickle…
permissive · top 1,000 on PyPI
smart-openProvides a unified, open()-compatible Python…
permissive · top 1,000 on PyPI
portalockerPortalocker provides cross-platform file…
permissive · top 1,000 on PyPI
rayRay is a distributed computing framework that…
permissive · top 1,000 on PyPI
jubilantJubilant wraps the Juju CLI with a…
permissive · top 15,000 on PyPI
opsA Python framework for developing…
permissive · top 15,000 on PyPI
charmlibs-pathopsProvides a pathlib-like interface for reading…
permissive · top 15,000 on PyPI
ops-scenarioops-scenario is a state-transition testing…
permissive · top 15,000 on PyPI
coslProvides utilities for COS Lite charms,…
permissive · top 15,000 on PyPI
charmcraftlocalPacks Juju charms with local Python package…
unclear · top 15,000 on PyPI
aiounifiAsynchronous Python library for communicating…
permissive · top 15,000 on PyPI
pytest-operatorA pytest plugin that provides fixtures and…
permissive · top 15,000 on PyPI
koyeb-sdkOfficial Python SDK for Koyeb that provides…
permissive · top 15,000 on PyPI
google-cloud-deployPython client library for Google Cloud Deploy,…
permissive · top 15,000 on PyPI