A keyboard-driven terminal UI for managing Databricks secrets
Project description
Isolinear ▦
A keyboard-driven terminal UI for managing Databricks secrets. Browse workspaces, scopes, secrets and ACLs; create / edit / delete; reveal & copy values — all from a fast, LCARS-flavoured TUI.
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. On first launch Isolinear opens an onboarding hub with two doors:
- Workspace URL — paste a workspace URL and sign in through your browser (OAuth U2M / SSO). No token required.
- Discover via account — pick your cloud (AWS / Azure / GCP), paste your Account ID, sign in once, and Isolinear lists every workspace in the account for you to choose from.
Tick save as profile and it writes a reusable entry to ~/.databrickscfg
(host + auth_type = external-browser, no secret stored — same as
databricks auth login), so next launch connects instantly. Existing
~/.databrickscfg profiles show up automatically.
| Onboarding hub | Authorization overview |
Features
- 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. - Multiple workspaces — switch profiles, or add new connections on the fly.
- Pre-loads & caches everything on startup for an instant experience.
- Three switchable themes (violet, amber Okudagram, phosphor green).
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 |
n / N |
New secret / new scope |
e · d |
Edit secret · delete (with confirm) |
p |
Manage scope permissions (ACLs) |
space · c |
Reveal / hide value · copy value |
r / R |
Refresh scope / workspace |
a |
Authorization overview |
w · ctrl+p |
Switch workspace · command palette |
? · q |
Help · quit |
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)
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
License
MIT © Misja Pronk
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file isolinear-0.1.0.tar.gz.
File metadata
- Download URL: isolinear-0.1.0.tar.gz
- Upload date:
- Size: 374.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
056b8ce09b1062db53163c8adc0cb87337d7d39320b9df15f02526244fd8b267
|
|
| MD5 |
429e135185d466be1606291dbb7c9a04
|
|
| BLAKE2b-256 |
1b36b10d6fb4991bc81a8d246b39b1b610be6245f1a79d5e4b0ae035ec3ffbe3
|
File details
Details for the file isolinear-0.1.0-py3-none-any.whl.
File metadata
- Download URL: isolinear-0.1.0-py3-none-any.whl
- Upload date:
- Size: 38.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","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}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
434edfa3ffab38bf8e5aa42761d00d7e7c44173aa474302b6328c8a2cd07e356
|
|
| MD5 |
c6112eb8e6e717641f5634d58e4a4f39
|
|
| BLAKE2b-256 |
583efbe229508e38a88340e30a4e216c0b4da35234169b9d3fc4cb17a4dc8de9
|