Jubilant¶
Jubilant is a Python library that wraps the Juju CLI, primarily for use in charm integration tests. It provides methods that map 1:1 to Juju CLI commands, but with a type-annotated, Pythonic interface.
You should consider switching to Jubilant if your integration tests currently use pytest-operator (and they probably do). Jubilant has an API you’ll pick up quickly, and it avoids some of the pain points of python-libjuju, such as websocket failures and having to use async. Read our design goals.
Jubilant 1.0.0 was released in April 2025. We will avoid making breaking changes to the API after this point.
The library provides:
The main
jubilant.Jujuclass, with methods such asdeployandintegrateThe
Juju.waitmethod, which waits for a condition such as “all apps active”Status helpers such as
jubilant.all_active, for use withJuju.waitContext managers such as
jubilant.temp_model, for use in test setup and teardown
In this documentation¶
Start here: a hands-on introduction to Jubilant, including how to write a charm integration test
Step-by-step guides covering key operations and common tasks
Releases¶
Jubilant releases are tracked on GitHub, and use semantic versioning. To get notified when there’s a new release, watch the Jubilant repository.
Project and community¶
Jubilant is a member of the Ubuntu family. It’s an open source project (Apache license) that warmly welcomes community contributions, suggestions, fixes and constructive feedback.
For support, join Charm Development on Matrix. You’ll be able to chat with the maintainers of Jubilant (the Canonical Charm Tech team) and a friendly community of charm developers!
Looking for more?¶
The Ops repository has several demo charms that you can experiment with. The demo charms use Jubilant for their integration tests.
To follow along with updates and tips about charm development, join our Discourse forum.