Focus-first desktop terminal workspace for agentic coding, built with Electron, TypeScript, xterm.js, and node-pty.
FlowDeck is a desktop terminal workspace designed for focused, pane-based coding sessions. It combines a compact Electron shell with PTY-backed terminals so the UI stays lightweight while still running real shell sessions.
FlowDeck currently targets macOS and Windows.
- Local development and runtime validation are primarily done on macOS.
- CI build and type-check validation run on macOS and Windows runners.
- Release artifacts include macOS
.dmgand.zip, plus Windows.exe. - Linux is not supported at this time.
Brand assets live in assets/brand/. The icon features three side-by-side terminal panes with distinct color accents (orange, teal, purple), representing multiple concurrent terminal sessions within a single workspace.
- Real PTY-backed terminals powered by
node-pty - Multi-pane workspace with add, close, focus, and drag-reorder interactions
- Inline tab renaming with terminal title fallback
- Keyboard navigation mode with
Ctrl+B - Better default visual separation for the first three sessions (blue, green, orange accents)
- Renderer settings for font size, pane width, pane opacity, and usage source (
Codex/Claude Code) - Live usage quota status in the footer with remaining budget, reset countdown, and periodic refresh
- Built-in update window with download progress, cancel, and restart actions
- Capture mode that writes a static snapshot to
/tmp/flowdeck-prototype.png - macOS/Windows packaging via
electron-builder
- Electron
- TypeScript
- esbuild
- xterm.js
- node-pty
src/main/Electron main process, PTY lifecycle, and persisted settingssrc/preload/safe preload bridge exposed to the renderersrc/renderer/application shell, pane and tab behavior, state, and stylesscripts/build.mjsbuild entrypoint for the TypeScript and esbuild bundledist/generated build output
- Node.js 22+
- pnpm 10+
pnpm installpnpm startpnpm buildFLOWDECK_CAPTURE=1 pnpm startThe capture is written to /tmp/flowdeck-prototype.png.
pnpm packpnpm distThe current release workflow packages macOS and Windows artifacts. Linux artifacts are not produced.
FlowDeck uses bumpp to manage version bumps and release tags. Release notes are maintained in CHANGELOG.md.
- Update
CHANGELOG.mdwith the new version's changes - Run the release command:
pnpm releaseThis does the following:
- updates the project version
- creates a git commit
- creates a
v*git tag - pushes the commit and tag to GitHub
After the tag reaches GitHub, the release workflow automatically:
- builds macOS and Windows packages
- uploads
.dmg,.zip,.exe,.yml, andapp.asarartifacts - creates a GitHub Release with the description from
CHANGELOG.md
pnpm release:dryIf you install FlowDeck from a local DMG and macOS blocks the app, that is usually caused by Gatekeeper, missing notarization, or local permission prompts.
If the app was downloaded from the internet and macOS quarantined it, remove the quarantine attribute and try again:
xattr -dr com.apple.quarantine /Applications/FlowDeck.appYou can also right-click the app in Finder, choose Open, and confirm the dialog once.
This means the build is not signed or notarized with an Apple Developer identity. For local testing, use one of these options:
- Open
System Settings->Privacy & Security - Find the blocked app message near the bottom
- Click
Open Anyway
Or launch once from Terminal:
open /Applications/FlowDeck.appFlowDeck uses node-pty to start real shell sessions. If terminals fail to launch or cannot access protected folders, check:
System Settings->Privacy & Security->Files and FoldersSystem Settings->Privacy & Security->Full Disk Accessif you need access to protected directories
After changing permissions, fully quit and reopen FlowDeck.
If GUI apps launched inside FlowDeck's terminal fail immediately (for example Electron projects crashing at startup with SIGABRT on macOS), the host session is likely sandboxed/restricted.
To match iTerm behavior, start FlowDeck itself from a normal desktop session (Finder, Launchpad, Terminal, or iTerm), not from a sandboxed runtime/CI wrapper.
To avoid these warnings for end users, the macOS build should eventually be:
- code signed with a valid Apple Developer ID
- notarized by Apple
- stapled before distribution
Minimum verification:
pnpm build
pnpm exec tsc --noEmitFor UI or terminal behavior changes, also run:
pnpm startMIT. See LICENSE.
