Skip to content
SPINOZA

v1.1.0 · No registration, no tracking

Your whole cluster, in one binary.

A completely free, modern Kubernetes IDE with GitOps at its core. One small binary installed by a single shell script, no account, no Electron. Use it in a browser tab or the desktop app, move between the two mid-session.

curl -fsSL https://spinoza.tech/download | sh
Verifies sha256 · installs to ~/.local/binDirect downloads
< 500 MB
memory, UI included
36 MB
binary, UI embedded
< 1 s
start to URL
0
registration · tracking

Why the name

Baruch Spinoza, the 17th-century philosopher, earned his living grinding lenses.

127.0.0.1:34115 · Spinoza · Borg theme
Spinoza cluster overview: version, node and pod tiles, allocatable capacity bars, recent warning events

What it does

Everything the API server will tell you, and a few things it won't.

  • Cluster overview

    Server version, node readiness, allocatable against live CPU and memory, pods by phase, latest warning events.

  • Every resource type

    Whatever discovery reports, CRDs included. Live tables over WebSocket deltas, text search, namespace filter, failing-object badges, bulk restart and delete.

  • Helm, without the binary

    Releases read straight from Helm's own storage, no helm binary needed to browse. OCI end to end. Newest versions shown next to what's running; upgrade behind a rendered manifest diff, rollback and uninstall from the same panel.

  • Inspect and edit

    Metadata, conditions, events and live YAML in Monaco, with schema-aware autocomplete against the cluster's own OpenAPI and server-side apply. An edited draft survives a background reload.

  • Terminals and streams

    Exec into a real xterm; logs where pausing follow stops the scroll, not the stream. Distroless images get a debug container instead. Port-forwards survive navigation. The desktop app adds your own local shell.

  • Port-forward, two clicks

    Open any pod or service on localhost without touching kubectl: pick it, forward it, click the link. Forwards survive navigation, are listed in one panel, and stop with one click. If you can use a browser, you can reach anything in the cluster.

  • Metrics with history

    Current usage from metrics-server in the tables. CPU and memory history charted from Prometheus, auto-discovered and queried through the apiserver proxy.

  • Actions with guardrails

    Scale, rollout restart, cordon, uncordon, drain. Drain plans first: it shows what it would evict, skip and refuse. Protected clusters require typing their name for destructive actions.

  • Your kubeconfigs, untouched

    Added by path, referenced in place, never copied or merged. Contexts grouped per file. A ⌘K palette covers resources, views and recent objects.

  • Nine themes

    Dark, Light, Azimov, Borg, Cyberpunk, Matrix, Nord, Skywalker, Startrekker. All contrast-gated in CI; custom themes as JSON. These screenshots are Borg.

The founding feature

GitOps you can see, without a subscription.

Flux and Argo, grouped by role, with a dependency graph, per-kind lists and status tiles. Reconcile, suspend and resume Flux objects in place; Argo ships read-only. A Flux-owned Helm release gets no upgrade button. It links to its HelmRelease, because that change belongs in git.

  • Dependency DAG
  • Reconcile / suspend / resume
  • Flux ownership guardrail
  • Argo, read-only
Spinoza GitOps dependency graph: clicking a node opens the HelmRelease in a YAML drawer
Spinoza Helm releases: 32 releases with the Latest column flagging available upgrades; release detail managed by Flux
32 releases, read without a helm binary. The Latest column flagged 4 available upgrades.
Spinoza pods table with inspect drawer and a live /bin/sh shell in a container
A real shell in a real pod: table, inspect drawer and xterm in one view.

Security posture

The process holds your cluster credentials. It behaves like it.

  1. Loopback only. It refuses to bind anything else. When the last tab closes, the process exits on its own.

  2. Per-run token. Every route and both WebSockets require it. It rides the URL once, then lives in a cookie; a new run mints a new token.

  3. Non-local Host and Origin are rejected. DNS rebinding gets nowhere.

  4. Your kubeconfigs stay where they are. Referenced and re-read, never copied, never merged.

  5. No tracking. No analytics, no usage data. Outbound traffic: your apiserver, your Helm repos, anonymous crash reports and an update check.

Download

One file, no installer ceremony.

  • macOS

    arm64 · x64 tar.gz

  • Linux

    amd64 · arm64 tar.gz

  • Windows

    amd64 tar.gz, manual unpack

  • Desktop app

    Same binary, native window. Build from source for now

First run

$ spinoza
spinoza is listening, open this in a browser  url=http://127.0.0.1:34115/?token=…

Or let it open the browser itself: spinoza --open

License

FSL-1.1, source-available. Run it, modify it, use it at work. Each release becomes Apache-2.0 two years after it ships.

Built on client-go v0.36 (Kubernetes 1.35–1.37 by skew policy); runs in production against k3s v1.36.