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.
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:
- 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. ~/.databrickscfg— every saved profile is listed automatically.- 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 — bundle + profiles + URL | Authorization overview |
Features
- Workspace picker — connect from a Databricks Asset Bundle (
databricks.yml, offered as the default), your~/.databrickscfgprofiles, 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)
| File | Size | Uploaded | |
|---|---|---|---|
| isolinear-0.4.1.tar.gz | 251.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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}
|