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 and machines in one screen
  • 🔍 Drill-down navigation — select a controller → filter models; select a model → see its full status
  • 🔎 Inline filtering — press / in Status to search across apps, charms, channels and messages
  • 🔐 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)
  • 🎨 Themeable — built-in ubuntu and dark themes; fully customisable via YAML
  • 🪟 Terminal transparency — respects your terminal background (no forced black background)
  • ⌨️ K9s-style help overlay — press ? to see all keybindings at any time

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
C Go to Controllers tab
m Go to Models tab
s Go to Status 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
Esc Clear filter
Enter on app Open App Config viewer
Enter on offer Open Offer detail
Enter on relation Open Relation Data inspector

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
T Open theme switcher
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
  • Machines — id, state, address, instance, base, AZ (IaaS models only)
  • SAAS — consumed remote offers and their status
  • Offers — cross-model offers with active/total connection counts
  • Integrations — all relations (peer, regular and cross-model)

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).

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.

App Config viewer

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


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)
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

Themes

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

Press T at any time to open the live theme switcher and preview themes before applying them.

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.2.0.tar.gz (237.1 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.2.0-py3-none-any.whl (87.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for jujumate-0.2.0.tar.gz
Algorithm Hash digest
SHA256 fafe99d26d10282499886ef9f3e6fcb796c8aface06c00fc2c3b8481590f8571
MD5 82274d885ba4d1ad70d9a319a700b0e2
BLAKE2b-256 d51e947d2e8ea0be6fb3ba1cc928221c9ecc3cb20042d6608ab18faf27b9ef4e

See more details on using hashes here.

Provenance

The following attestation bundles were made for jujumate-0.2.0.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.2.0-py3-none-any.whl.

File metadata

  • Download URL: jujumate-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 87.0 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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 08d2db5164462d951c52b73fa9872be48ada4df4588595a21ee779406bea48c4
MD5 73d990b3a1467e790efcbf7dbd22209f
BLAKE2b-256 55f6af706d33f3990e2121dbf6ddcace1d61074a2b11d653a25b433afe21bd4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for jujumate-0.2.0-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