Changelog
What changed, and why you'd notice.
Rendered straight from CHANGELOG.md. Releases are on GitHub, each with signed build provenance.
Changelog
All notable changes are recorded here. The format follows Keep a Changelog, and versions follow Semantic Versioning.
[Unreleased]
Added
-
A project website at https://kdev-cli.pages.dev: the docs with search, an interactive architecture explorer and the changelog. The README, PyPI page and citation now link to it.
-
Colour terminals show a five-line pixel kdev header with the command and version beside the terminal symbol, once per invocation, including setup and menu actions. Narrow terminals use the compact terminal badge; ASCII terminals and
NO_COLORuse plain titles. The wordmark adapts to light and dark backgrounds. Piped output, JSON, logs and SSH command output stay clean. -
CI reports test coverage from one Linux matrix job and includes the coverage table in each pull request’s job summary.
-
uv run basedpyrighttype-checkssrcandtestsin basic mode; it runs on every commit with the pre-commit hooks and in CI with the other checks. -
kdev forwardopens one or more localhost port forwards to services on the box, includingLOCAL:REMOTEmappings, with clear checks for occupied local ports and services that are not listening remotely. -
kdev historyshows recent saved sessions, including who ran them, their status, file count and restore state;-nlimits rows and--jsonemits the same data for scripts. -
The box warns every open shell and the session log once at 15 minutes and once at 5 minutes before the session ends.
Changed
- The terminal UI uses a geometric KDEV wordmark and terminal badge, consistent rounded workspace and result cards, clearer account quotas, framed progress with elapsed times, and grouped command help. Tables and next actions adapt to narrow terminals without dropping values. Light/dark terminal colors, ASCII and monochrome prompts remain usable; live refresh is limited to 8 Hz.
Fixed
- Simultaneous
kdev upclients elect the lowest live version, stop their own duplicates with version-specific logs and confirmed cancellation, and join the winner. Rejected concurrent saves can join an accepted run; uncertain submissions are never automatically retried. - Status, logs and stop commands find an older active winner hidden by newer cancelled runs. Unconfirmed startup output cannot displace its saved files, and SSH session identity is checked before startup confirmation or restore.
kdev config set gpu tpulowershoursto 9h if it was above the TPU cap, preventing repeated warnings onkdev up.kdev logshides the kernel’s debugger start-up warnings;--allstill shows them.
[0.1.4] - 2026-09-24
Added
- Each release carries a Sigstore-signed build provenance for its wheel and
sdist (
kdev_cli-<version>.sigstore.json), recorded with GitHub so thatgh attestation verifycan check any copy of the files. SECURITY.md says how.
[0.1.3] - 2026-09-24
Added
- kdev is on PyPI as
kdev-cli(PyPI does not allow the namekdev):uv tool install kdev-cliorpipx install kdev-cli; the command is stillkdev. Releases are published by GitHub Actions through Trusted Publishing, with an attestation for each file, so no upload token exists to leak.
Changed
- Works with rich 15.
[0.1.2] - 2026-09-24
Fixed
- The
kdev upstatus board smeared across the terminal once the box was up: frames repeated and lines drifted right. kdev’s background ssh calls asked for a tty (the ssh block setsRequestTTY yes), which put the terminal in raw mode under the board. They now pass-T. kdev upright after a session was cancelled could build on the version before it and drop that session’s work: Kaggle lists a cancelled version’s files bit by bit while it saysCANCEL_REQUESTED.upnow waits for the save to finish.- A file whose name has a space or non-ASCII letters (
notes ü.txt) could never be restored: Kaggle signs its URL unescaped and urllib refused it. - A project file named like one of the box’s own (
web/static/custom.css) was silently left out of every restore and backup. Only the top-level ones are skipped now. - A restore killed part-way could corrupt a large file on the next start: the
half-downloaded
.kdev-partit left was saved, restored as a user file, and landed on the real file’s download. Leftovers are ignored, and a download cut short is retried instead of kept. - A restore killed part-way lost exec bits (e.g.
.git/hooks) for the files it had already brought back. They are now recorded before the first download. kdev upstraight afterkdev downfound the box still saving (Kaggle says RUNNING until the upload ends, about 2 min per GB), tried to connect and failed. It now waits for the save and starts afresh. A secondkdev downsays the box is already stopping instead of cancelling it, andkdev statussays “stopping”.- VS Code and
ssh kagglefailed with “Host key verification failed” on any machine that had not started the current box: every box has a new host key. Thekaggleblock no longer pins one. kdev downremoved thekaggleblock, so that machine could not reach the next box another machine started. With a named tunnel it now stays, andstatus,backup,restoreandsetupwrite it when it is missing.- A file deleted in a session came back after a restore that had not finished:
the version underneath was restored whole. Now it only fills in what that
restore never delivered, which the box logs in
.kdev/fetched. kdev backupkept files deleted on the box, and files from other notebooks, andkdev restore --from-backupthen overwrote what the session had written. The backup is now an exact copy, and pushing it only adds what is missing.kdev restore --from v999reported success for a version that does not exist, and--fromchanged the version the box records as its base.kdev workspacesaid “0 file(s)” andworkspace files“nothing saved yet” while a box was running: they read the running version, which has no files until it ends. Both now show the newest version with files.kdev setup, and every other yes/no question, stopped with “interrupted” when run without a terminal. They now take the default answer.
[0.1.1] - 2026-09-23
Fixed
kdev upfailed with “No runs found for this kernel (HTTP 404)” on a notebook that had never been run, such as one just made in the Kaggle editor. Kaggle reports that as a 404 rather than a status; kdev now reads it as “nothing running” and starts the box. The same fix coverskdev downand replacing a running box, andkdev statussays “never run yet”.kdev uprenamed a notebook made in the Kaggle editor to its slug (for example “v0.1.0_testing” became “v0-1-0-testing”). It now keeps the title.
[0.1.0] - 2026-09-23
First release.
Added
kdev upstarts a Kaggle notebook session as an SSH box over a Cloudflare tunnel, or connects to the one already running, from any account or machine.- Files persist across sessions, accounts and machines: every session restores
the notebook’s last saved
/kaggle/working, including symlinks, empty directories and executable bits, which Kaggle’s own snapshot drops. - A session that is cut short, or worked in before its restore, is stacked on the versions it was meant to hold instead of being skipped.
- Several Kaggle accounts share one group notebook;
kdev upasks which account takes over when the active one is short on quota. kdev downstops a box over ssh, or cancels it through the API as the account that started it when it cannot be reached.- Commands:
up,down,ssh,status,logs,restore,backup,account,workspace,config,tunnel,doctor,setup, and an interactive overview on barekdev. --jsonoutput forstatus,accountandworkspace files;-vlogs every Kaggle API call.