Skip to main content

Isolinear ▦

A keyboard-driven terminal UI for managing Databricks secrets. Browse scopes, secrets and ACLs; create / edit / delete; reveal & copy values — all from a fast, calm three-pane TUI.

ci PyPI Python Docs License: MIT Ruff

Isolinear browsing secrets

Read the docs → — installation, connecting, the full keyboard reference, themes, and the security model.

Install

Run it with uv — no clone, no virtualenv:

uvx isolinear              # run once, ephemerally
uv tool install isolinear  # install the `isolinear` (and `iso`) commands on PATH

Or with pipx: pipx run isolinear / pipx install isolinear.

Requires Python ≥ 3.11. Built with Textual and the Databricks SDK.

Quickstart

isolinear        # or: iso

You don't need to pre-configure anything. Isolinear opens a workspace picker that gathers connection targets from three places — each row labelled with its Source, so you always know where it came from:

  1. Asset bundle — if a databricks.yml (Databricks Asset Bundle) sits in the current directory, its target workspace is offered as the default, pre-selected so you connect with a single keystroke.
  2. ~/.databrickscfg — every saved profile is listed automatically.
  3. Workspace URL — Add by URL and sign in through your browser (OAuth U2M / SSO). No token required; tick save as profile to keep it.

Pick a row and press Enter. Saved profiles connect instantly; a bundle target or a URL opens the browser to sign in — exactly like databricks auth login (host + auth_type = external-browser, no secret ever stored).

Workspace picker Authorization overview
Workspace picker — bundle + profiles + URL Authorization overview

Features

  • Workspace picker — connect from a Databricks Asset Bundle (databricks.yml, offered as the default), your ~/.databrickscfg profiles, or a workspace URL — each row labelled with its source.
  • Three-pane browser — scopes (with secret counts + your access), secrets (with relative age), and a detail pane.
  • Reveal & copy secret values; values are fetched lazily on reveal and never bulk-pulled into memory.
  • Full CRUD — create / edit / delete secrets, create / delete scopes, manage scope permissions (ACLs).
  • Authorization overview — your effective permission on every scope.
  • Fuzzy filter (/), command palette (ctrl+p), vim + arrow navigation.
  • Pre-loads & caches everything on startup for an instant experience.
  • A calm Graphite default theme, plus optional violet / amber / phosphor skins.

Keys

Everything is keyboard driven. Press ? for the in-app cheat-sheet or ctrl+p for the fuzzy command palette.

Key Action
↑↓ / j k Move within a pane
←→ / h l · tab Move between panes
g / G Jump to top / bottom
/ Filter the focused pane (↑↓ move while typing, esc clears)
ctrl+f / F Search every scope
s / S Sort: next column / reverse
n / N New secret / new scope
e · d Edit secret · delete (with confirm)
m Move / copy / rename secret
u Undo the last secret delete or move
p Manage scope permissions (ACLs)
space / enter Reveal / hide value (auto-hides in 30s)
c / C Copy value / copy a code reference (dbutils, Spark conf, CLI)
r / R Refresh scope / workspace
a / A Authorization overview / stale-secret audit
w · ctrl+p / P Switch workspace · command palette
? · q Help · quit

The command palette (ctrl+p) holds the rest: bulk .env import/export, a who-has-access principal lookup, and forget revealed values.

Run isolinear prod (or --profile prod) to connect straight to a discovered workspace, and add --read-only to browse and reveal with every mutation disabled — handy when you're just poking around production. Preferences (theme, scope toggle, audit threshold) persist in ~/.config/isolinear/settings.json.

Security

Isolinear talks to Databricks through the official SDK's unified auth. It does not store secret values — they're read on demand and kept only in memory. Saved profiles contain a host + auth_type, never a token. See SECURITY.md for details and how to report a vulnerability.

How it's built

Hexagonal / DDD layers; dependencies point inward and all I/O is behind domain ports, so the UI never touches the SDK and the whole domain is unit-testable without a network:

isolinear/
  domain/          model, rules + ports (SecretStore, WorkspaceConnector, ProfileStore, BundleStore)
  application/     use-cases (WorkspaceService, OnboardingService) + read model
  infrastructure/  adapters — the only Databricks-SDK importers
  interface/       Textual presentation (no business logic, no infra)
  app.py           composition root

Contributing

Issues and PRs welcome — see CONTRIBUTING.md. The toolkit is all-Astral: uv (env/deps/run), ruff (lint+format), ty (types).

uv sync
uv run pytest        # tests (core units + UI via Textual Pilot)
uv run ruff check .  # lint
uv run ty check      # types
uv run isolinear     # run it

uv run --group docs mkdocs serve   # preview the docs site at localhost:8000

License

MIT © Misja Pronk

Metadata

Release files for isolinear 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for isolinear 0.4.1
File Size Uploaded
isolinear-0.4.1.tar.gz 251.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for isolinear 0.4.1
File Interpreter ABI Platform
isolinear-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 310.3 kB

Release files / isolinear-0.4.1.tar.gz

Download URL isolinear-0.4.1.tar.gz
Size 251.9 kB
Tags Source
SHA-256 checksum
How to use checksums
00669535045ffd7e80e530994b332c5d47de693a03b27affebf75e010e7c2cfc
BLAKE2b-256 checksum
How to use checksums
e7141293bbd3a24a7b86152335623560a975e579ae1f563f1a90d29fd980b605
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / isolinear-0.4.1-py3-none-any.whl

Download URL isolinear-0.4.1-py3-none-any.whl
Size 58.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2ceae74f15060bd55b7dc56bdb45cd1ffe2abb68af2041732e554a08a87ac268
BLAKE2b-256 checksum
How to use checksums
e71a95530816da326dc1f9c8bce8a7ff73ba9b1be86aeceddaa75184ee147284
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page