Releases: datum-cloud/datumctl
v0.14.0
Until now, getting a picture of your Datum Cloud project meant stringing together get commands and mentally assembling the results. That changes today. This release ships datumctl console — a full interactive terminal UI that turns your project into something you can actually navigate. Plus: structured error output for the automation crowd.
Important
Heads up! We chose to simplify the login experience with datumctl to just be datumctl login.
New: datumctl console (#166)
Just run datumctl console. No flags, no arguments — it opens straight into a live view of your project.
Resource browser — The left sidebar lists every resource type in your project, grouped by API category. Navigate with arrow keys or jump directly with letter shortcuts. The main panel renders a live, filterable, sortable table of resources for whatever type is selected. Pick any row and a detail pane opens alongside it: description, status conditions, Kubernetes events, raw YAML, and full change history, all accessible as tabs without leaving the screen.
Quota dashboard (press 3) — Every governed resource type, your current usage, and how much headroom you have left — all in one place. The numbers refresh automatically and carry a freshness timestamp so you always know if you're looking at live data or something a few seconds stale. If the quota service goes sideways, the title bar tells you and [r] fires an immediate retry.
Activity feed (press 4) — A scrollable timeline of every recent change across the project. Select any entry to expand a structured diff showing exactly what changed and when. Great for answering "wait, who changed that?" without opening another tab.
Welcome panel — First time in, you get a quick-start guide and a cheat sheet of key bindings. After that, the panel switches to a summary view: platform health, recent activity, and quota status at a glance, so you can spot anything worth attention before you start drilling.
The UI adapts gracefully to narrow terminals, collapsing hints and labels rather than breaking layout. A persistent status bar shows context-sensitive hints at all times, and ? opens a full keybinding reference whenever you need it.
Machine accounts are now service accounts (#164)
"Machine account" was a bit of an odd name. In v0.14.0, it's gone — replaced by service account everywhere it appeared: flags, credential types, and the key file directory, which moves from ~/.config/datumctl/machine-accounts/ to ~/.config/datumctl/service-accounts/. This is a pre-GA breaking rename to align with what the rest of the industry calls this concept.
If you have scripts or tooling that reference machine-account paths or credential types, update them before upgrading.
Structured error output for agents and automation (#161)
Pass --error-format=json (or yaml) and errors come back as machine-readable structured output instead of human prose. The default is unchanged — plain text for humans, structured output when you ask for it. Useful when you're wrapping datumctl in a script, CI pipeline, or an AI coding agent that needs to do something with the error beyond just printing it.
Shell completions actually work now (#150)
A bug was silently blocking resource name and ID completion — the kind of thing you'd only notice once you'd been tab-completing into the void for a while. Fixed across bash, zsh, fish, and PowerShell. One caveat: completing project-scoped resource names still requires passing --organization or --project explicitly. That constraint goes away once those flags become optional.
Bug fixes
The vanishing resources bug (#165) — Running datumctl get serviceaccounts --project <id> returned the server doesn't have a resource type "serviceaccounts" even when the service account was sitting right there. The culprit: the discovery client was ignoring the --project flag entirely and always hitting the user control plane, where project-scoped resource types are intentionally filtered out. The error message was misleading, the silent fallback was the real problem, and it's fixed.
v0.13.2
v0.13.1
Highlights
Machine account credentials files are now portable across environments (#145). The auth endpoint is discovered automatically at login time, so the same credentials file can be used against any Datum Cloud environment. Older credentials files continue to work unchanged.
Fixes #144
Full changelog: v0.13.0...v0.13.1
v0.13.0
Highlights
This release adds a supported way for machine accounts to sign in from the command line and picks up a routine round of dependency updates.
Machine account login
- You can now authenticate
datumctlas a machine account using a credentials file (#137). This enables CI/CD pipelines, automation, and service-to-service workflows to usedatumctlwithout a human in the loop. - The JWT bearer exchange used during login has been hardened against request timeouts, HTTP protocol downgrade, and oversized responses.
Dependency updates
- go-oidc updated to v3.18.0 (#138)
- go-keyring updated to v0.2.8
- Go toolchain updated to 1.26.2 (#136)
Full changelog: v0.12.0...v0.13.0
v0.13.1 Experimental AI Assistant
What's Changed
- fix(deps): update module golang.org/x/oauth2 to v0.36.0 by @renovate[bot] in #128
- chore(deps): update dependency go to v1.26.1 by @renovate[bot] in #127
- fix(deps): update kubernetes monorepo to v0.35.2 by @renovate[bot] in #125
- fix(deps): update module sigs.k8s.io/controller-runtime to v0.23.3 by @renovate[bot] in #126
- fix(deps): update module github.com/rodaine/table to v1.3.1 by @renovate[bot] in #122
- fix(deps): update module go.miloapis.com/milo to v0.21.0 by @renovate[bot] in #121
- fix(deps): update module go.miloapis.com/activity to v0.3.1 by @renovate[bot] in #123
Full Changelog: v0.11.0...v0.13.1-experimental-ai
v0.12.0
Changelog
- 1a5c023 Delete docs/cli-help-improvement-plan.md
- 8031866 Merge pull request #105 from datum-cloud/feat/device-auth
- 55243a8 Merge pull request #121 from datum-cloud/renovate/go.miloapis.com-milo-0.x
- b3cd6e3 Merge pull request #122 from datum-cloud/renovate/github.com-rodaine-table-1.x
- d8b370b Merge pull request #123 from datum-cloud/renovate/go.miloapis.com-activity-0.x
- 52adae0 Merge pull request #125 from datum-cloud/renovate/kubernetes-monorepo
- dba7c33 Merge pull request #126 from datum-cloud/renovate/sigs.k8s.io-controller-runtime-0.x
- 4d5029a Merge pull request #127 from datum-cloud/renovate/go-1.x
- 9b2d2ca Merge pull request #128 from datum-cloud/renovate/golang.org-x-oauth2-0.x
- 379ffa2 Merge pull request #130 from datum-cloud/renovate/github.com-zalando-go-keyring-0.x
- 7cf8710 Merge pull request #132 from datum-cloud/improve-cli-help-text
- 27509fc Merge pull request #133 from datum-cloud/dependabot/go_modules/go_modules-a978bc362c
- 4a7aef2 chore(deps): bump github.com/go-jose/go-jose/v4
- 53813d8 chore(deps): update dependency go to v1.26.1
- bd333e0 chore(nix): update vendorHash for go deps
- 5d35c65 chore(nix): update vendorHash for go deps
- d09dc6f chore(nix): update vendorHash for go deps
- aecf088 chore(nix): update vendorHash for go deps
- a7c2db5 feat: force auth device v2 path
- 209d881 feat: implement device authentication (no browser)
- d2df5eb fix(deps): update kubernetes monorepo to v0.35.2
- 8f18388 fix(deps): update module github.com/rodaine/table to v1.3.1
- e564e28 fix(deps): update module github.com/zalando/go-keyring to v0.2.8
- 845b79a fix(deps): update module go.miloapis.com/activity to v0.3.1
- 60f3074 fix(deps): update module go.miloapis.com/milo to v0.21.0
- fbea773 fix(deps): update module golang.org/x/oauth2 to v0.36.0
- 3b0c10f fix(deps): update module sigs.k8s.io/controller-runtime to v0.23.3
- bcc5af0 improve CLI help text for all datumctl commands
v0.11.0
What's Changed
- fix URL to datumctl quickstart guide by @brian-toresdahl-datum in #98
- chore(deps): update dependency go to v1.25.7 by @renovate[bot] in #97
- fix(deps): update module golang.org/x/oauth2 to v0.35.0 by @renovate[bot] in #101
- feat: add who-ami and can-i commands by @gianarb in #100
- chore(deps): update dependency go to v1.26.0 by @renovate[bot] in #102
- fix(deps): update kubernetes packages to v0.35.1 by @renovate[bot] in #103
- fix(deps): update module go.miloapis.com/milo to v0.19.0 by @renovate[bot] in #106
- chore(deps): update goreleaser/goreleaser-action action to v7 by @renovate[bot] in #108
- feat: implement transformation mechanism to improve generated cli docs by @gianarb in #107
- feat: remove double title in docs and hide from sidebar by @gianarb in #110
- fix(deps): update module k8s.io/cli-runtime to v0.35.2 by @renovate[bot] in #111
- chore: configure Claude Code datum plugins by @scotwells in #109
- fix(deps): update module go.miloapis.com/milo to v0.19.1 by @renovate[bot] in #112
- feat: add version command by @gianarb in #114
- chore: redirect authorized user to list of commands page by @gianarb in #116
- fix(deps): update module golang.org/x/oauth2 to v0.36.0 by @renovate[bot] in #119
- chore(deps): update dependency go to v1.26.1 by @renovate[bot] in #118
- fix(deps): update kubernetes packages to v0.35.2 by @renovate[bot] in #113
- fix(deps): update module sigs.k8s.io/controller-runtime to v0.23.3 by @renovate[bot] in #117
- chore(deps): bump activity CLI to v0.3.0 by @scotwells in #124
New Contributors
- @brian-toresdahl-datum made their first contribution in #98
Full Changelog: v0.10.1...v0.11.0
v0.10.1
v0.10.0
Changelog
- d9a0eee Merge pull request #79 from ShippingBytes/feat/gen-doc
- be094c5 Merge pull request #87 from datum-cloud/feat/update-nix-hash-as-check
- 231e688 Merge pull request #88 from datum-cloud/renovate/sigs.k8s.io-controller-runtime-0.x
- 7ad7d69 Merge pull request #89 from datum-cloud/renovate/go.miloapis.com-milo-0.x
- 2b21cf1 Merge pull request #90 from datum-cloud/fix/remove-create-subcommand
- 919ac19 Merge pull request #91 from datum-cloud/feat/browser-swagger-specs
- e5b8c3b Merge pull request #92 from datum-cloud/renovate/go.miloapis.com-milo-0.x
- 0108ce9 Merge pull request #93 from ShippingBytes/chore/release-markdown-cli-doc
- 1026926 Merge remote-tracking branch 'origin/main' into feat/update-nix-hash-as-check
- 85364a3 chore(deps): update go.sum
- f81713f chore(nix): update vendorHash for go deps
- 3ca6a31 chore(nix): update vendorHash for go deps
- e0c5b3a chore(nix): update vendorHash for go deps
- f419680 chore(nix): update vendorHash for go deps
- 972bed0 feat(github): update nix hash on relevant PR instead of main branch
- fcf1680 feat: add documentation folder as release
- ca13742 feat: add gen-documentation command
- cc3c794 feat: docs command for exploring api endpoints
- ab9f502 fix(deps): update module go.miloapis.com/milo to v0.17.1
- c4481d0 fix(deps): update module go.miloapis.com/milo to v0.18.0
- dc1b5de fix(deps): update module sigs.k8s.io/controller-runtime to v0.23.1
- 4acc066 fix(github): change to a push-triggered workflow instead on PR
- d6af734 fix: remove create subcommands
v0.9.1
What's Changed
- chore(nix): manually update vendorHash by @drewr in #84
- fix(deps): update module go.miloapis.com/milo to v0.16.2 by @renovate[bot] in #81
- chore(nix): Update vendorHash after Go dependency changes by @github-actions[bot] in #85
- fix: set context to avoid panic on token refresh by @scotwells in #86
Full Changelog: v0.9.0...v0.9.1