Skip to main content

A keyboard-driven terminal UI for managing Databricks secrets

Project description

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 URLAdd 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
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, 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

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

isolinear-0.2.2.tar.gz (736.4 kB view details)

Uploaded Source

Built Distribution

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

isolinear-0.2.2-py3-none-any.whl (41.7 kB view details)

Uploaded Python 3

File details

Details for the file isolinear-0.2.2.tar.gz.

File metadata

  • Download URL: isolinear-0.2.2.tar.gz
  • Upload date:
  • Size: 736.4 kB
  • Tags: Source
  • Uploaded using 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}

File hashes

Hashes for isolinear-0.2.2.tar.gz
Algorithm Hash digest
SHA256 1e83d3e3e04fa1f20c0e56b0f766e11d4118727a3f4cffbf83d183f9948fe7ca
MD5 d46647c9bfe02d9bfec4d52d7b78aed1
BLAKE2b-256 8dd4690593c2f2adbdff005c1ce8590713d25e1cd80d96dc0c382eb4581c21c2

See more details on using hashes here.

File details

Details for the file isolinear-0.2.2-py3-none-any.whl.

File metadata

  • Download URL: isolinear-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 41.7 kB
  • Tags: Python 3
  • Uploaded using 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}

File hashes

Hashes for isolinear-0.2.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1ee68874c40178be486f7cdbc2cc58152a44cf95ba88764a9b1d8c63414ae272
MD5 a574bc790b589ff743d4a0a6b7b47046
BLAKE2b-256 2e6dc5403ebb4d2d4246ccb2020e0f42e2dc004d040523180c64fd20e7892afe

See more details on using hashes here.

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