eneskirca/nodetermPublic

Node-based terminal manager for AI coding agents — tmux-backed terminals and parallel agent sessions as draggable nodes on an infinite pan/zoom canvas. macOS, Linux, and a browser Server Edition.

AI summary: A spatial terminal manager that organizes tmux sessions and AI agents as draggable nodes on an infinite canvas.

Stars
1.8K
+28 today
Forks
193
Watchers
8
Open issues
32
Open PRs
16
Contributors
~37
Commits
3.4K
Branches
257

TypeScriptOtherCreated Jun 15, 2026Last push 3d agoLatest release v0.3.4+419 stars this week+670 this month

Star history

since Aug 23, 2026
05001K1.5KAug 2026Aug 2026Sep 2026Sep 2026
1.8K stars as of Sep 9, 2026, tracked back to Aug 23, 2026.

Contribution activity

commits per day, last 52 weeks
SepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 3 commits2026-06-16: 32 commits2026-06-17: 16 commits2026-06-18: 43 commits2026-06-19: 31 commits2026-06-20: 2 commits2026-06-21: 0 commits2026-06-22: 9 commits2026-06-23: 22 commits2026-06-24: 39 commits2026-06-25: 50 commits2026-06-26: 16 commits2026-06-27: 5 commits2026-06-28: 5 commits2026-06-29: 21 commits2026-06-30: 27 commits2026-07-01: 29 commits2026-07-02: 5 commits2026-07-03: 20 commits2026-07-04: 16 commits2026-07-05: 30 commits2026-07-06: 30 commits2026-07-07: 11 commits2026-07-08: 8 commits2026-07-09: 12 commits2026-07-10: 50 commits2026-07-11: 34 commits2026-07-12: 118 commits2026-07-13: 139 commits2026-07-14: 52 commits2026-07-15: 44 commits2026-07-16: 8 commits2026-07-17: 39 commits2026-07-18: 39 commits2026-07-19: 51 commits2026-07-20: 21 commits2026-07-21: 17 commits2026-07-22: 11 commits2026-07-23: 17 commits2026-07-24: 15 commits2026-07-25: 16 commits2026-07-26: 37 commits2026-07-27: 12 commits2026-07-28: 18 commits2026-07-29: 4 commits2026-07-30: 7 commits2026-07-31: 2 commits2026-08-01: 12 commits2026-08-02: 27 commits2026-08-03: 41 commits2026-08-04: 27 commits2026-08-05: 30 commits2026-08-06: 5 commits2026-08-07: 3 commits2026-08-08: 3 commits2026-08-09: 75 commits2026-08-10: 29 commits2026-08-11: 95 commits2026-08-12: 48 commits2026-08-13: 29 commits2026-08-14: 53 commits2026-08-15: 103 commits2026-08-16: 43 commits2026-08-17: 10 commits2026-08-18: 36 commits2026-08-19: 149 commits2026-08-20: 59 commits2026-08-21: 5 commits2026-08-22: 0 commits2026-08-23: 6 commits2026-08-24: 21 commits2026-08-25: 4 commits2026-08-26: 11 commits2026-08-27: 8 commits2026-08-28: 10 commits2026-08-29: 19 commits2026-08-30: 32 commits2026-08-31: 17 commits2026-09-01: 48 commits2026-09-02: 85 commits2026-09-03: 17 commits2026-09-04: 3 commits2026-09-05: 0 commits
2,396 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Rising fast

    +419 stars this week

  • Very active

    2,396 commits in 52 weeks

  • Repeat trending

    5 trending appearances

What nodeterm does

Nodeterm radically reimagines the terminal environment by placing real, tmux-backed terminal sessions onto an infinite pan-and-zoom canvas. Instead of burying workflows in hidden tabs or rigid panes, it treats every project as a spatial workspace where terminals, code editors, and live AI agent sessions exist as draggable nodes. It integrates deeply with AI coding tools like Claude Code, allowing developers to monitor and interact with parallel agent sessions through a Kanban-style board interface. The architecture ensures that all sessions are persistent and survive full machine restarts. It is specifically designed to help developers manage scattered workflows and maintain visual context across complex tasks.

Aimed at developers managing complex, multi-service architectures, users of autonomous coding agents, and individuals who benefit from spatial organization over traditional tabbed interfaces. Users are expected to have a basic understanding of the relevant underlying technologies.

  • Infinite spatial canvas: Organizes terminal sessions, code editors, and AI agents as freely movable nodes on a zoomable workspace.
  • Tmux-backed persistence: Ensures all terminal sessions run continuously and survive application crashes or full system restarts.
  • AI session Kanban board: Visualizes parallel Claude Code sessions in a Trello-style layout for easy tracking of autonomous tasks.
  • Cross-platform compatibility: Runs seamlessly on macOS, Linux, and provides a Server Edition for browser-based remote access.
  • Visual context management: Eliminates hidden tabs by allowing developers to spatially arrange their tools according to their mental model.

Where teams use it

Managing parallel AI agents

Visually tracking multiple autonomous coding agents working on different parts of a project simultaneously without losing context.

Spatial project organization

Grouping relevant server logs, build processes, and editor nodes visually based on the specific microservice they relate to.

Persistent remote development

Using the Server Edition to maintain a persistent, visual layout of terminal sessions accessible from any browser.

ADHD-friendly workflows

Providing a spatial interface that keeps all necessary context visible, preventing developers from losing track of hidden terminal tabs.

Getting started: curl -sL https://nodeterm.dev/install | bash

README

main branch
nodeterm

nodeterm

A node-based terminal manager — your terminals and agents on an infinite canvas.

Multiple real terminals live as draggable nodes on a single pan/zoom canvas, and every project doubles as a Trello-style board of live Claude Code sessions. Built for people with ADHD and scattered workflows: a spatial layout instead of a stack of hidden tabs.

Platform Built with Electron License GitHub stars Latest release

Downloads

eneskirca%2Fnodeterm | Trendshift

Download · Docs · Features · Build from source · Architecture · License


Why nodeterm

Stacked terminal tabs hide context — you lose track of what's running where. nodeterm turns that into a map: every shell is a node you can place, group, label, and zoom into. Sessions are spatial and persistent, so your mental model stays intact across restarts. And because the app is built around a clean service seam, the same canvas runs three ways — as the desktop app for macOS, Linux and Windows (beta), as a self-hosted browser app you reach from anywhere (Server Edition), and an iOS companion that attaches to the same live sessions.

📚 Full documentation lives at nodeterm.dev/docs — get started, concepts, agents, remote access, troubleshooting.

✨ Features

Everything is a node

Right-click the canvas to open a terminal — or an AI agent. Each runs in its own persistent tmux session, next to sticky notes (link one to feed an agent context), Monaco editors, diff views, and web/video nodes — arranged spatially, like a map. Quit the app, even restart the machine — every session comes back.

The canvas — terminals, agents, notes, editors and diffs as nodes; sessions survive a full restart

Know when an agent needs you

Hook-driven status — no output scraping: pulsing RUNNING / NEEDS YOU badges, subagent cards with live transcripts, a per-node context meter, and OS notifications. Click the ping, answer the permission prompt right in the node, and get told the moment the turn is done. On a MacBook, agents live in the notch too.

Agent status — NEEDS YOU flip, notification, answering a permission prompt, subagent fan-out

One project, two views

Every project is a canvas — and also a kanban board. Cards are your live sessions: drag them across columns while the agent keeps running, open a card into a live card modal (the real session + members, due date, priority, comments), and assign teammates. Toggle with ⌘⇧B.
Watch the board video with sound

The kanban board — live session cards, drag between columns, the card modal with a live Claude Code session

Your sessions, anywhere

Pair your phone with one QR — scan with the nodeterm iOS app — and the same live session continues in your pocket, E2E encrypted over the relay, not just your LAN. The same canvas also runs self-hosted in any browser (Server Edition).

Pair your phone — scan the QR, the same live session continues on the iPhone

Talk to your terminal

Hold ⌘⌥ and say it. On-device Whisper transcribes locally — review the text, then Send (nothing auto-submits). Your voice never leaves the machine.

Dictation — hold ⌘⌥, speak, review, send into the terminal

Node kinds

🖥 Terminal (xterm + tmux, AI naming) · 🤖 Agent (Claude Code / Codex / Gemini / GitHub Copilot / opencode / Grok / custom) · 📝 Sticky note (link to an agent as context) · 🗂 Group (bind to a git worktree for agent-per-branch) · ✏️ Editor (Monaco, ⌘S) · 🔀 Diff · 🌐 Web / Video

More

  • Session continuity (tmux) — terminals keep running across node remounts and full app restarts, including live processes; machine reboots restore scrollback and resume agent sessions (claude --resume). The macOS app ships its own tmux, so this works with nothing installed; a tmux already on your system is always used in preference to it, and terminals opened before an upgrade stay as they were until you refresh the node.
  • Agent superpowerscontext links so agent nodes read each other's transcripts on demand; Claude-only branch a conversation and managed accounts for several logged-in Claude identities side by side; agents can drive the canvas (open nodes, spawn teams, verify each other's work) via the built-in canvas-control CLI.
  • Remote / SSH projects — open a project on a remote host over SSH; terminals, files, git, and even the board run there while the canvas stays local.
  • Source control — VS Code-style stage/unstage, discard, branch switch/create, commit, push/sync/publish, worktrees, and gh sign-in — backed by system git.
  • GitHub Issues on Kanban – opt-in issue cards, exact label-to-column mapping, All / GitHub / Sessions filtering, and two-way move, close, and reopen sync. See setup and security details.
  • AI commit messages & terminal names — bring-your-own local agent CLI run read-only on the staged diff or captured output.
  • Your sessions, in your pocketnodeterm mobile (iOS) attaches to the same live tmux sessions: watch an agent work, answer a "needs you", or type into any terminal from your phone — plus push notifications and a mobile board view.
  • Power & sleep — while an agent is working, nodeterm keeps the machine from idle-sleeping, and lets go the moment it finishes (on by default; toggle in the setup tour or Settings → Behavior). No app can hold a machine awake through a closed lid — for overnight runs keep the laptop open and plugged in, or run the agents on a box that doesn't sleep via the Server Edition.
  • Command palette (⌘K), file explorer (⌘⇧E), markdown view (⌘M), undo/redo, and a native macOS dark UI.
  • Auto-update & in-app announcements — the app checks a self-hosted feed and surfaces a "Restart to update" banner and product news.

🌍 Server Edition — nodeterm in your browser

The same canvas runs headless on a Linux (or macOS) host and is used from any browser — so your terminals, editors, source control, board, and agents live on a server you reach from anywhere. Single-user auth (password + secure cookie), a WebSocket bridge, and the exact same renderer as the desktop app.

npm run server:dev     # build + serve; open http://127.0.0.1:8443 and set a password

Terminals, files/editor/diff, the full git panel, the kanban board, and agent-status badges all work in the browser today. See docs/SERVER.md for the quickstart, security model, and current limitations.

🔔 Get push notifications from any SSH host

The same server also runs headless as a background notification host: install it on any Linux box you SSH into, and your phone gets RUNNING / NEEDS YOU push + Live-Activity coverage for the agents running there — with zero open ports (the hook server stays loopback-only and push goes out over HTTPS under a grant your phone drops over SSH).

curl -fsSL https://raw.githubusercontent.com/eneskirca/nodeterm/main/scripts/install-server.sh | bash

One line installs, builds, and runs it as a systemd service (NODETERM_HEADLESS=1); re-run it to update. See the headless notification host section for details.

📦 Download

Grab the latest build from nodeterm.dev — the download button detects your platform. Everything is also listed at nodeterm.dev/releases:

  • macOS.dmg for Apple Silicon and Intel (auto-updates), or Homebrew:

    brew tap nodeterm/tap
    brew trust nodeterm/tap        # Homebrew ≥6 refuses to load an untrusted tap
    brew install --cask nodeterm

    Both first lines are required. On its own, brew install --cask nodeterm only searches homebrew/cask and reports the cask as not found; without the trust grant, Homebrew ≥6 fails rather than prompting. The cask tracks each promoted release, and the app updates itself (electron-updater), so brew upgrade is rarely needed for it.

  • Linux (x64) — self-updating AppImage, or a .deb for Debian/Ubuntu (sudo apt install ./nodeterm-*.deb; updates are manual for .deb).

  • Windows (x64) — betanodeterm-Setup-<version>.exe (per-user installer) or a portable -win.zip. Early support, so know what you are getting: the installer is unsigned (SmartScreen will ask — More info → Run anyway), updates are manual for now (grab the next build from the same page), and session continuity across restarts is still landing — Windows has no tmux, so the standalone session host that replaces it is being packaged in #579. Everything else — canvas, agents, kanban, hooks — is the same app. Please report what breaks.

  • iOSnodeterm mobile on the App Store.

Trying it out? Removal is one script — it stops every process nodeterm started, reverts the status-hook/skill entries it merged into your agent CLIs' config (your own hooks and credentials are never touched), and deletes all of nodeterm's own state. Run it with --dry-run first to see the full list of what it found:

curl -fsSL https://raw.githubusercontent.com/eneskirca/nodeterm/main/scripts/uninstall.sh | bash -s -- --dry-run
curl -fsSL https://raw.githubusercontent.com/eneskirca/nodeterm/main/scripts/uninstall.sh | bash -s -- --yes

The full inventory of what nodeterm writes where (and what the script keeps, like the .nodeterm/ canvas folders inside your own repos) is documented in docs/uninstall.md.

🛠 Build from source

Requires Node.js 20+ on macOS or Linux (tmux recommended — it's what makes sessions survive restarts). A source checkout does not carry the bundled tmux: run node scripts/build-tmux.mjs once on macOS to build it into resources/bin/tmux (the release job does this automatically), or just install tmux yourself. On Windows, run bootstrap-windows.bat from a fresh checkout first — it checks for Node, the Visual Studio C++ build tools and Python 3 (needed to compile node-pty) and points you at the exact winget commands for anything missing, then runs npm ci.

npm install        # deps + rebuilds node-pty against Electron's ABI (postinstall)
npm run dev        # dev mode with renderer HMR
npm run build      # production build into out/
npm start          # preview the production build
npm run typecheck  # fastest correctness gate
npm test           # vitest unit + integration suite
npm run dist       # local UNSIGNED .dmg into dist/ (smoke test)
npm run dist:linux # AppImage + .deb into dist/ (on a Linux host)
npm run dist:win   # unsigned NSIS installer + zip into dist/ (on a Windows host)
npm run server:dev # build + run the browser Server Edition (needs Node 22 + tmux)

⌨️ Keyboard shortcuts

These are the defaults — every one of them is remappable in Settings → Keyboard Shortcuts.

Shortcut Action
⌘K Command palette
⌘T / ⌘⇧C New terminal / New Claude Code
⌘⇧B Toggle the kanban board
⌘W Close the selected node
⌘← ⌘→ ⌘↑ ⌘↓ Focus the node left / right / above / below (Ctrl+Shift+arrow off macOS)
⌘Z / ⌘⇧Z Undo / Redo
⌘M Toggle markdown view (terminal / editor)
Hold ⌘⌥ (Ctrl+Alt) Dictate into the focused terminal
⌘⇧E File explorer
⌘, Settings · ⌘/ Shortcuts
Right-click Actions menu (empty space or node)

🏗 Architecture

  • Electron, three contextssrc/main (the Electron shell), src/preload (the only bridge, window.nodeTerminal), src/renderer (React UI). src/shared holds the types and IPC channel names used by all three.
  • CorePlatform seam — every service (PTY, workspace/settings, git, agents, hooks) lives in src/core behind a small platform interface and never imports electron. Electron is one implementation of that seam; the browser Server Edition (src/server) is another, booting the exact same services over a WebSocket-RPC bridge (src/renderer/bridge fills window.nodeTerminal in the browser). One codebase, one renderer, multiple shells.
  • TerminalTransport abstraction — the renderer depends only on this interface, never on IPC or node-pty directly. LocalTransport talks to the local host; RemoteTransport talks to a remote agent over SSH — so remote projects drop in without touching the canvas UI.
  • React Flow is the single source of truth for live nodes; projects persist serialized nodes to disk, and tmux keeps sessions alive across restarts.
  • Three surfaces — the desktop app, the browser Server Edition, and the mobile companion (a separate SwiftUI repo) all ride the same core + transport seams.

See docs/SERVER.md for the Server Edition, and the design docs under docs/ for deeper notes.

🤝 Contributing

Issues and pull requests are welcome. Start with CONTRIBUTING.md — setup, the process-boundary rules, and the house rules that come up in review. CLAUDE.md is the deep reference behind them (and is loaded automatically if you work with an AI coding agent). Questions or bug reports are also happy at nodeterm.dev/support / support@nodeterm.dev. nodeterm is licensed under the Business Source License 1.1 — you can use, modify, and redistribute it freely, including in production, except offering it as a competing product or service (see License).

By submitting a contribution (pull request, patch, or code snippet), you agree that it is licensed under the same BUSL-1.1 terms as the rest of the project, and that the project may continue to relicense future versions (including your contribution) as part of its normal licensing model.

📜 License

BUSL-1.1 (Business Source License): you may copy, modify, redistribute, and — under the Additional Use Grant — make production use of nodeterm; the one thing you may not do is offer it (hosted, embedded, or as a standalone product/service) in a way that competes with nodeterm or with the Licensor's products built on it. Each release automatically becomes plain MIT four years after it is published. See LICENSE for the full terms and THIRD-PARTY-NOTICES.md for the bundled open-source components. For a commercial license beyond the grant, contact eneskirca@gmail.com.

"Claude" and "Claude Code" are trademarks of Anthropic, and "Trello" is a trademark of Atlassian; nodeterm is not affiliated with or endorsed by either.

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

51 total
  1. v0.3.4v0.3.4Aug 30, 202614.9K downloads

    ## Changes since v0.3.3 - fix(main): handle child-stdin EPIPE as the async error event it is - fix(editor): adapt Monaco worker imports to the 0.56 exports map - chore(deps): bump the production-minor-patch group across 1 directory with 3 updates - feat(canvas-control): a help verb, answered by the shim itself - feat(canvas-control): --model on the open verbs, per-role model in spawn-team - feat(trigger): shared schema + strict validation + machine-local arm store (#493 phase 1) - feat(md-ux): one-shot force-ON migration for openMarkdownPreview - fix(kanban): filter disabled agents in New session menu - feat(md-ux): default openMarkdownPreview to ON (follow-up to #496) - chore(deps-dev): bump the dev-dependencies group across 1 directory with 3 updates - feat(canvas): per-burst wheel-zoom cap + zoom speed setting - docs: fix dictation shortcut in alt text and remove duplicated feature bullet

  2. v0.3.3v0.3.3Aug 28, 20266K downloads

    ## Changes since v0.3.2 - feat(md-ux): open Markdown in preview (opt-in) + one-shot Explorer pin hint - fix(messaging): one-round-trip SSH pane probe + honest targetPaneUnreadable refusal - fix(terminal): flag a warm-reattached session whose cwd was deleted, with an explicit restart - fix(hooks): self-heal stale hook endpoints for canvas-control and context-link (#445) - fix(messaging): deliver the envelope via paste-buffer -p — tmux >= 3.7 mangles a JS-composed frame - fix(canvas): resolve node creation against the live active project, not a render closure (#443) - feat(projects): say what closing a project parks, offer to end its sessions (#442) - fix(ssh): resolve remote tmux beyond the exec channel's PATH, degrade readably when absent - ci(release): ship Windows as an unsigned beta on every version tag (#454) - fix(canvas): keep browser/web node pages alive across project switches - test: fresh mkdtemp userDataDir in the two fakes that still used a /tmp literal - feat(server): managed Claude accounts on the Server Edition - feat(tmux): opt-in lead-pane width for Claude Code agent teams (#119) - fix(accounts): stop the shared tmux server leaking a managed account into other sess

  3. v0.3.2v0.3.2Aug 17, 202626.5K downloads

    ## Changes since v0.3.0 - ci(release): caffeinate npm ci and the tmux build on the mac runner - feat(canvas): tidy-canvas action to grid-pack all top-level nodes - fix(pairing): make the revoke copy true, and say when the phone loses Pro - fix(license): time out a reply whose BODY never arrives - fix(license): tell the user what the RELEASE did, and nothing false about the license - docs(CLAUDE): reconcile with current code — ~30 stale claims from the line-by-line audit - fix(pairing): revoke a legacy device's row too, and stop claiming it cannot exist - fix(pairing): removing a device now revokes its Pro, and admits when it cannot - docs(CLAUDE): keep the canvas-control skill text in sync with behaviour, same PR - feat(pairing): remember the phone's relay device id so a removal can name it - docs(agents): the send verb's help says a busy target is QUEUED, not refused - feat(settings): show the license key, the device count and a release action - fix(license): a 2xx we could not read is an error, never "0 devices" - test(license): pin the release merge — counts move, key and source do not - feat(license): token-authorized detail + release-others across the bridge - fix(notch): the

  4. v0.3.0v0.3.0Aug 12, 20267.5K downloads

    ## Changes since v0.2.47 - feat(tmux): build the bundled tmux with utf8proc (correct emoji widths) - feat(tmux): bundle a static tmux in the macOS app as the last-resort fallback

  5. v0.2.47v0.2.47Aug 12, 2026102 downloads

    ## Changes since v0.2.46 - fix(core): the panel reads phys_footprint on macOS, not ps's rss - fix(terminal): age the working park snapshot; correct the relay claim (#126) - docs(session-memory): §10 — record the second-device measurements (items 5 partial, 6 re-verified) - fix(terminal): snapshot agent state at park time; review fixes (#126) - test(core): darwin-gated behavioural guard — the default reader may never reap on bytes - fix(terminal): gate the offscreen release on live work too (#126) - fix(terminal): never park-kill a working agent on a plain shell (#126)

Code frequency

additions and deletions
+97.8K-97.8KWeek of 2026-06-14: +28,631 linesWeek of 2026-06-14: -2,567 linesWeek of 2026-06-21: +19,333 linesWeek of 2026-06-21: -5,354 linesWeek of 2026-06-28: +12,487 linesWeek of 2026-06-28: -3,227 linesWeek of 2026-07-05: +26,381 linesWeek of 2026-07-05: -10,242 linesWeek of 2026-07-12: +59,303 linesWeek of 2026-07-12: -10,591 linesWeek of 2026-07-19: +28,845 linesWeek of 2026-07-19: -8,766 linesWeek of 2026-07-26: +15,449 linesWeek of 2026-07-26: -2,122 linesWeek of 2026-08-02: +34,115 linesWeek of 2026-08-02: -5,111 linesWeek of 2026-08-09: +97,838 linesWeek of 2026-08-09: -9,369 linesWeek of 2026-08-16: +81,738 linesWeek of 2026-08-16: -4,932 linesWeek of 2026-08-23: +18,461 linesWeek of 2026-08-23: -3,759 linesWeek of 2026-08-30: +40,891 linesWeek of 2026-08-30: -4,601 linesJun 14, 2026Aug 30, 2026
+463.5K lines added, -70.6K removed over the last year.

Commits per week

last 52 weeks
4390Week of 2025-09-07: 0 commitsWeek of 2025-09-14: 0 commitsWeek of 2025-09-21: 0 commitsWeek of 2025-09-28: 0 commitsWeek of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 127 commitsWeek of 2026-06-21: 141 commitsWeek of 2026-06-28: 123 commitsWeek of 2026-07-05: 175 commitsWeek of 2026-07-12: 439 commitsWeek of 2026-07-19: 148 commitsWeek of 2026-07-26: 92 commitsWeek of 2026-08-02: 136 commitsWeek of 2026-08-09: 432 commitsWeek of 2026-08-16: 302 commitsWeek of 2026-08-23: 79 commitsWeek of 2026-08-30: 202 commitsSep 7, 2025Aug 30, 2026
2.4K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 17 commitsSun 1:00 — 33 commitsSun 2:00 — 11 commitsSun 3:00 — 8 commitsSun 4:00 — 4 commitsSun 5:00 — 4 commitsSun 6:00 — 5 commitsSun 7:00 — 1 commitsSun 8:00 — 1 commitsSun 9:00 — 0 commitsSun 10:00 — 12 commitsSun 11:00 — 4 commitsSun 12:00 — 25 commitsSun 13:00 — 33 commitsSun 14:00 — 23 commitsSun 15:00 — 26 commitsSun 16:00 — 35 commitsSun 17:00 — 19 commitsSun 18:00 — 17 commitsSun 19:00 — 29 commitsSun 20:00 — 15 commitsSun 21:00 — 29 commitsSun 22:00 — 37 commitsSun 23:00 — 36 commitsMon 0:00 — 13 commitsMon 1:00 — 29 commitsMon 2:00 — 25 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 3 commitsMon 6:00 — 5 commitsMon 7:00 — 0 commitsMon 8:00 — 0 commitsMon 9:00 — 3 commitsMon 10:00 — 3 commitsMon 11:00 — 6 commitsMon 12:00 — 19 commitsMon 13:00 — 19 commitsMon 14:00 — 17 commitsMon 15:00 — 15 commitsMon 16:00 — 49 commitsMon 17:00 — 34 commitsMon 18:00 — 25 commitsMon 19:00 — 19 commitsMon 20:00 — 13 commitsMon 21:00 — 18 commitsMon 22:00 — 18 commitsMon 23:00 — 21 commitsTue 0:00 — 24 commitsTue 1:00 — 46 commitsTue 2:00 — 25 commitsTue 3:00 — 7 commitsTue 4:00 — 7 commitsTue 5:00 — 2 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 4 commitsTue 10:00 — 1 commitsTue 11:00 — 6 commitsTue 12:00 — 20 commitsTue 13:00 — 34 commitsTue 14:00 — 30 commitsTue 15:00 — 16 commitsTue 16:00 — 17 commitsTue 17:00 — 23 commitsTue 18:00 — 12 commitsTue 19:00 — 18 commitsTue 20:00 — 16 commitsTue 21:00 — 20 commitsTue 22:00 — 25 commitsTue 23:00 — 36 commitsWed 0:00 — 30 commitsWed 1:00 — 53 commitsWed 2:00 — 30 commitsWed 3:00 — 22 commitsWed 4:00 — 13 commitsWed 5:00 — 7 commitsWed 6:00 — 1 commitsWed 7:00 — 1 commitsWed 8:00 — 3 commitsWed 9:00 — 1 commitsWed 10:00 — 6 commitsWed 11:00 — 3 commitsWed 12:00 — 5 commitsWed 13:00 — 23 commitsWed 14:00 — 22 commitsWed 15:00 — 27 commitsWed 16:00 — 21 commitsWed 17:00 — 5 commitsWed 18:00 — 32 commitsWed 19:00 — 75 commitsWed 20:00 — 29 commitsWed 21:00 — 24 commitsWed 22:00 — 23 commitsWed 23:00 — 18 commitsThu 0:00 — 24 commitsThu 1:00 — 19 commitsThu 2:00 — 14 commitsThu 3:00 — 1 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 1 commitsThu 7:00 — 1 commitsThu 8:00 — 4 commitsThu 9:00 — 2 commitsThu 10:00 — 1 commitsThu 11:00 — 14 commitsThu 12:00 — 5 commitsThu 13:00 — 16 commitsThu 14:00 — 29 commitsThu 15:00 — 30 commitsThu 16:00 — 27 commitsThu 17:00 — 20 commitsThu 18:00 — 11 commitsThu 19:00 — 13 commitsThu 20:00 — 12 commitsThu 21:00 — 4 commitsThu 22:00 — 4 commitsThu 23:00 — 8 commitsFri 0:00 — 5 commitsFri 1:00 — 14 commitsFri 2:00 — 12 commitsFri 3:00 — 12 commitsFri 4:00 — 0 commitsFri 5:00 — 3 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 1 commitsFri 10:00 — 2 commitsFri 11:00 — 2 commitsFri 12:00 — 15 commitsFri 13:00 — 12 commitsFri 14:00 — 29 commitsFri 15:00 — 22 commitsFri 16:00 — 9 commitsFri 17:00 — 8 commitsFri 18:00 — 12 commitsFri 19:00 — 18 commitsFri 20:00 — 24 commitsFri 21:00 — 29 commitsFri 22:00 — 10 commitsFri 23:00 — 8 commitsSat 0:00 — 15 commitsSat 1:00 — 34 commitsSat 2:00 — 13 commitsSat 3:00 — 21 commitsSat 4:00 — 15 commitsSat 5:00 — 3 commitsSat 6:00 — 1 commitsSat 7:00 — 4 commitsSat 8:00 — 14 commitsSat 9:00 — 3 commitsSat 10:00 — 6 commitsSat 11:00 — 4 commitsSat 12:00 — 1 commitsSat 13:00 — 2 commitsSat 14:00 — 4 commitsSat 15:00 — 13 commitsSat 16:00 — 22 commitsSat 17:00 — 8 commitsSat 18:00 — 2 commitsSat 19:00 — 7 commitsSat 20:00 — 10 commitsSat 21:00 — 4 commitsSat 22:00 — 27 commitsSat 23:00 — 16 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits3,042 (89%)
Community commits362 (11%)

3,404 commits in total over the last year.

DateListRankStars gained
Aug 27, 2026weekly#14+375
Aug 26, 2026weekly#14+375
Aug 25, 2026weekly#12+529
Aug 24, 2026weekly#12+424
Aug 23, 2026weekly#12+424
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    455.3K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    389.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • openclaw/openclaw

    Your own personal AI assistant. Any OS. Any Platform. The lobster way. 🦞

    384.4K stars · TypeScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    255.9K stars · JavaScript