Skip to main content

Terminal UI for Juju infrastructure orchestration

Project description

โฌข JujuMate

CI Coverage Python License: GPL v3 uv

A terminal UI for Juju โ€” monitor all your infrastructure resources in a single interactive screen with real-time updates. Inspired by K9s and KDash.

asciicast


Features

  • ๐Ÿ”„ Auto-refresh โ€” status updates automatically every few seconds; logs stream live via WebSocket
  • โ˜๏ธ Full resource tree โ€” clouds, controllers, models, applications, units, machines
  • ๐Ÿ“Š Status view โ€” apps, units, offers, integrations, SAAS, machines and storage in one screen
  • ๐Ÿฅ Health view โ€” shows only unhealthy models by default; toggle to see all with f
  • ๐Ÿ” Drill-down navigation โ€” select a controller โ†’ filter models; select a model โ†’ see its full status
  • ๐Ÿ”Ž Inline filtering โ€” press / in Status or Logs to search with live highlight
  • ๐Ÿ”— Peer relation toggle โ€” press p to show/hide peer relations in the Integrations panel
  • ๐Ÿ–ฅ๏ธ Units-per-machine toggle โ€” press u to show units (and their subordinates) nested under each machine
  • ๐Ÿ’พ Storage view โ€” storage instances per model with pool, size and attachment status; press d to toggle detached entries; press Enter to open a full detail modal (mountpoint, read-only, device info, lifecycle)
  • ๐Ÿ—‚๏ธ Collapsible panels โ€” press x to collapse/expand any Status panel individually; focused panel highlighted in theme colour
  • ๐Ÿ‘‘ Leader indicators โ€” unit leaders marked with * (green) following juju status convention
  • ๐Ÿ”— Relation lifecycle โ€” Integrations panel shows live relation status; relations being torn down display as removing
  • ๐Ÿ“‹ Copy to clipboard โ€” press y in Status or Relation Data to copy the full content
  • ๐Ÿ” Secrets browser โ€” list and inspect Juju secrets per model (Shift+S)
  • ๐Ÿ“ฆ Offers browser โ€” browse all cross-model offers in a controller, with endpoint details and live consumer tracking across controllers (Shift+O)
  • ๐Ÿ“‹ Relation databag inspector โ€” examine raw relation data for any relation (Enter on a relation)
  • โš™๏ธ App config viewer โ€” inspect application configuration (Enter on an app)
  • ๐Ÿ–ฅ๏ธ Machine detail modal โ€” press Enter on any machine to see hardware specs, status timestamps and network interfaces
  • ๐ŸŽจ Themeable โ€” five built-in themes; fully customisable via YAML
  • โš™๏ธ Settings modal โ€” change theme, refresh interval, default controller and log level at runtime (Shift+C)
  • ๐ŸชŸ Terminal transparency โ€” respects your terminal background (no forced black background)
  • โŒจ๏ธ K9s-style help overlay โ€” press ? to see all keybindings at any time (full-screen)

Installation

Recommended โ€” install as a tool with uv:

uv tool install jujumate

Or with pipx:

pipx install jujumate

JujuMate reads your existing Juju configuration from ~/.local/share/juju/ automatically โ€” no extra setup needed if juju is already working.


Quick Start

jujumate

On first launch JujuMate connects to your current Juju controller and auto-selects your current model. Use the keyboard shortcuts below to navigate.


Keyboard Shortcuts

Global

Key Action
c Go to Clouds tab
m Go to Models tab
s Go to Status tab
h Go to Health tab
r Force refresh
Esc Clear cloud/controller drill-down filter
? Toggle help overlay
q Quit

Navigation

Key Action
โ†‘ / โ†“ Move cursor up/down
Enter Drill-down / open detail

Status tab

Key Action
/ Filter by app name, charm, channel or message (with live highlight)
Esc Clear filter
p Toggle peer relations in the Integrations panel
u Toggle units (and subordinates) nested under each machine
d Toggle detached entries in the Storage panel
x Collapse/expand the current panel
y Copy full status to clipboard (includes cloud, controller, model and Juju version)
Enter on app Open App Config viewer
Enter on offer Open Offer detail
Enter on relation Open Relation Data inspector
Enter on machine Open Machine detail modal (hardware, status, network)
Enter on storage Open Storage detail modal (mountpoint, device, lifecycle)

Health tab

Key Action
f Toggle between unhealthy-only (default) and all models

Modals

Key Action
Shift+S Open Secrets browser for the current model
Shift+O Open Offers browser for the current controller
Shift+L Open live Log viewer for the current model
Shift+C Open Settings modal (appearance, behaviour, diagnostics)
Enter Open detail view
y Copy value to clipboard (Relation Data / Secrets)
Esc Close modal

Views

Status

The main view. Displays a full juju status-style breakdown of the selected model:

  • Applications โ€” name, charm, channel, revision, units, status and workload message
  • Units โ€” workload/agent status, machine or pod, address, ports; subordinates shown nested under their principal; leader units are marked with *
  • Machines โ€” id, state, address, instance, base, AZ (IaaS models only); press u to expand units and their subordinates inline; press Enter on a machine to open its detail modal

Press Enter on a machine to see:

  • Hardware โ€” architecture, CPU cores, memory, root disk size, virtualisation type
  • Status โ€” agent and instance status with relative timestamps (e.g. 2h ago)
  • Network interfaces โ€” name, IP address, MAC address and Juju space for each NIC
  • SAAS โ€” consumed remote offers and their status
  • Offers โ€” cross-model offers with active/total connection counts
  • Integrations โ€” regular and cross-model relations with live status column (peer relations hidden by default; press p to toggle); relations being removed show as removing
  • Storage โ€” storage instances with pool, size and attachment status; attached entries shown in green, detached in orange; press d to toggle detached entries; press Enter to open a full detail modal

Each panel can be collapsed individually with x while it has focus, and expanded again with x. The focused panel is highlighted with a distinct border colour (violet in Monokai and Ubuntu themes).

Health

Shows a summary of all models across all controllers, highlighting those with errors or blocked units. Unhealthy models are shown by default; press f to toggle between unhealthy-only and all models.

Offers browser (Shift+O)

Lists all offers across every model in the current controller. Select an offer to see:

  • Model, URL, application, charm, description and access level
  • Endpoint details (name, interface, role)
  • Live consumer list โ€” scans all known controllers to find which models and applications are consuming the offer

Secrets browser (Shift+S)

Lists all secrets visible in the current model. Select a secret to see its metadata (owner, revision, rotation policy, timestamps).

Log viewer (Shift+L)

Streams live log entries from the current model. Use / to filter by text.

Relation Data inspector

Press Enter on any relation in the Status tab to open a databag viewer showing the application-level and unit-level relation data for both sides of the relation. Press y to copy the full content to clipboard.

App Config viewer

Press Enter on any application in the Status tab to inspect its current configuration values.

Machine detail modal

Press Enter on any machine row in the Machines panel to open a modal showing:

  • Instance ID, address, base OS, availability zone, controller and model
  • Hardware โ€” architecture, CPU cores, memory, root disk size and virtualisation type (parsed from Juju's hardware string)
  • Status โ€” agent and instance status with relative timestamps (e.g. started 2h ago)
  • Network interfaces โ€” name, IP address, MAC address and Juju space for each NIC

Section titles adapt to the active theme's accent colour. Press Esc to close.

Storage detail modal

Press Enter on any storage row in the Storage panel to open a modal showing:

  • Unit, Storage ID, Type, Pool, Size and Status
  • Attachment โ€” Mountpoint inside the container or VM; Read Only flag; Device name and Device Link for IaaS block storage (e.g. /dev/sdb, /dev/disk/by-id/...)
  • Lifecycle โ€” Persistent flag and Life value (alive in green, dying in orange, dead in red)

Press Esc to close.


Configuration

JujuMate is configured via ~/.config/jujumate/config.yaml. All fields are optional.

# ~/.config/jujumate/config.yaml

theme: ubuntu               # Theme name (default: ubuntu)
refresh_interval: 5         # Seconds between auto-refresh (default: 5)
offers_cache_ttl: 300       # Seconds to cache the offers list (default: 300)
default_controller: prod    # Controller to use (default: current Juju controller)
log_file: ~/.local/state/jujumate/jujumate.log
log_level: INFO             # DEBUG | INFO | WARNING | ERROR | CRITICAL

Most settings can also be changed at runtime โ€” press Shift+C to open the Settings modal, which lets you change the theme (with live preview), refresh interval, default controller and log level without editing the file manually. Changes are saved immediately.

offers_cache_ttl is a config-file-only setting (not exposed in the Settings modal). It controls how long the Offers list is cached between modal opens. Press r inside the Offers modal to force an immediate refresh.


Themes

JujuMate ships with five built-in themes: ubuntu (default), dark, monokai, solarized-dark and spacemacs.

Press Shift+C to open the Settings modal, then select a theme in the Appearance section to preview it live before it's applied.

To create a custom theme, add a YAML file to ~/.config/jujumate/themes/:

# ~/.config/jujumate/themes/mytheme.yaml
name: mytheme
primary: "#FF6600"
secondary: "#003366"
background: "#1a1a2e"
surface: "#16213e"
dark: true

Then set it in your config:

theme: mytheme

Available fields: primary, secondary, accent, background, surface, panel, warning, error, success, foreground, dark.

User themes override built-in themes with the same name.


Development

Requirements: Python 3.10+, uv

git clone https://github.com/Abuelodelanada/jujumate.git
cd jujumate
uv sync

Run from source:

uv run jujumate

Run checks (lint + typecheck + tests):

uv run nox

Individual sessions:

uv run nox -s tests       # Run tests with coverage
uv run nox -s lint        # Ruff lint + format check
uv run nox -s typecheck   # Pyright static analysis
uv run ruff format src tests  # Auto-format code

License

GNU General Public License v3.0

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

jujumate-0.3.2.tar.gz (274.5 kB view details)

Uploaded Source

Built Distribution

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

jujumate-0.3.2-py3-none-any.whl (103.9 kB view details)

Uploaded Python 3

File details

Details for the file jujumate-0.3.2.tar.gz.

File metadata

  • Download URL: jujumate-0.3.2.tar.gz
  • Upload date:
  • Size: 274.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jujumate-0.3.2.tar.gz
Algorithm Hash digest
SHA256 221d3ae6a1c2a308ae1079e6448d47a4162f465a9ba47a5861859d927ff659bb
MD5 99a35373a224985f833985c2ba35e9fc
BLAKE2b-256 2801085c1a2273fca474404ad008289f54207eefc204f7b925c17cbfd7049235

See more details on using hashes here.

Provenance

The following attestation bundles were made for jujumate-0.3.2.tar.gz:

Publisher: tag-and-release.yaml on Abuelodelanada/jujumate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jujumate-0.3.2-py3-none-any.whl.

File metadata

  • Download URL: jujumate-0.3.2-py3-none-any.whl
  • Upload date:
  • Size: 103.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jujumate-0.3.2-py3-none-any.whl
Algorithm Hash digest
SHA256 56c8d01aae301c986cb4f7769e909fb0a801ff5f6408741684e0fae3130c76e6
MD5 7dff096b5ca02dde176c1a54ce90112f
BLAKE2b-256 1b3193aad8134269da890c317f45bfb56c7fa2211706f62c09d2c1a60e04fe9b

See more details on using hashes here.

Provenance

The following attestation bundles were made for jujumate-0.3.2-py3-none-any.whl:

Publisher: tag-and-release.yaml on Abuelodelanada/jujumate

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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