Skip to content

v0.3.17

Choose a tag to compare

@github-actions github-actions released this 27 Sep 18:45
· 837 commits to main since this release

Highlights

Update for this one: a project switch could overwrite a canvas with another project's nodes.
It happened in the field on 2026-09-26 — the 7 nodes of an SSH project replaced the 18 nodes of a
local one, and the next autosave wrote that to .nodeterm/project.json. The guard meant to stop it
compared the canvas against a tag saying which project's nodes it held, but the tag and the nodes
were set on different React lanes, so for a moment a render paired the new project's tag with the
old project's nodes, and every commit in that window passed: a switch, an autosave, a launch write.
Both now move in the same tick. If a project's node list already looks wrong, restore it from git —
.nodeterm/project.json is a committed file, which is exactly why it is recoverable.

Two new right-click menus. Links in terminal output have one, so a URL or file path an agent
printed is no longer reachable only by Cmd/Ctrl+click, and the file-manager node's menu gained
Download.

Relay reconnection stops hammering. v0.3.15's backoff cut host-token 429s from about 15% to
about 1%; two remaining loops are now closed. A host whose relay WebSocket fails while the API is
still answering backs off instead of retrying at round-trip speed, and token refresh is timed
against the server's clock instead of the local one, so a skewed machine clock no longer drives it.

New

  • canvas — Download in the file-manager node's right-click menu · #960 by @eneskirca
  • terminal — right-click menu on links in terminal output · #968 by @eneskirca

Fixed

  • canvas — a project switch could write the previous project's nodes into the new one · #967 by @eneskirca
  • relay — back off when the relay drops an idle listener; time token refresh on the server clock · #969 by @eneskirca
Internal changes (1) — tests, refactors, chores, dependency bumps
  • readme — replace every README video with new renders · #961 by @eneskirca

Full Changelog: v0.3.16...v0.3.17