skillfed

juju

Python library for Juju

juju v3.6.1.3 233.2K downloads/30d#9,041 on PyPI64
Permissive 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) Abandoned released

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 juju

uv

uv add juju

poetry

poetry add juju

Installing 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

Development Status :: 5 - Production/StableIntended Audience :: DevelopersLicense :: OSI Approved :: Apache Software LicenseOperating System :: MacOS :: MacOS XOperating System :: POSIX :: LinuxProgramming Language :: PythonProgramming Language :: Python :: 3Programming Language :: Python :: 3.10Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Programming Language :: Python :: 3.8Programming Language :: Python :: 3.9

Tags

juju orchestration pythonjuju model deployment apiasync juju client librarycharm deployment automationjuju controller managementinfrastructure as code jujuapplication lifecycle management
orchestrationasync-firstinfrastructure-automation

More Distributed Computing packages