A desktop workspace for the AI CLI sessions you run every day.
DPlex discovers every Copilot CLI / Claude Code session you've ever started, lets you resume any of them in one click, and auto-restores every open session tab the next time you open the app — splits, order, working directory, and resume command preserved. On top of that: the multiplexer essentials — split panes, tabs, projects, worktrees, and a built-in VSCode-style Source Control view.
Quick install · Features · Screenshots · How DPlex compares · Architecture · Add a provider · Privacy · Contributing
🚧 Pre-1.0. DPlex is functional and used daily by its author, but APIs, settings layout, and on-disk formats may shift between minor versions while we feel out the right shape. Please pin your version and read the CHANGELOG before upgrading.
When working with AI CLI tools across multiple projects, you end up with a mess of terminal windows — a Copilot session here, a Claude session there, plus regular shells scattered everywhere, and not a single one of them survives a reboot. DPlex gives you one home for all of it, with AI session management as the headline feature:
- 🗂️ Discover every past session. DPlex reads each provider's data directory and surfaces every Copilot CLI / Claude Code session you've ever started — searchable by name, ID, summary, or workspace.
▶️ Resume in one click. Click any past session and it opens in a new tab with the correct resume command and original CWD. No copy-pasting session IDs from~/.copilot/....- ⏹️ Close active sessions from the sidebar. Stop running AI sessions without hunting for their terminal — closing a tab fully terminates the underlying process.
- 🗑️ Delete from disk. Remove a session's stored data when you're done, with confirmation.
- ♻️ Auto-restore session tabs across restarts. Quit the app, reopen it tomorrow — every AI session tab snaps back exactly where it was, with the right resume command, CWD, splits, and tab order preserved.
- One window for everything: split panes, tabs, and an activity bar (Projects · Sessions · Source Control).
- Project-aware workflow — group sessions by project, start a new AI session in any folder with one click.
- Worktree-friendly — first-class Git worktree support so concurrent feature work doesn't pollute your main checkout.
- Built-in Source Control — VSCode-style changes view scoped to whichever project (or worktree) you pick.
- No telemetry. No analytics. Read PRIVACY.md — it's a one-page promise, backed by
grep-able source.
Note: DPlex binaries are currently unsigned while we wait on Apple Developer / Windows code-signing certificates. The app is open source and the build is fully reproducible from source — see Verify the build below.
# Apple Silicon
curl -L https://github.com/Ron537/DPlex/releases/latest/download/DPlex-arm64.dmg -o DPlex.dmg
# Intel
curl -L https://github.com/Ron537/DPlex/releases/latest/download/DPlex-x64.dmg -o DPlex.dmg
# Open the DMG, drag DPlex to /Applications, then on first launch:
xattr -dr com.apple.quarantine /Applications/DPlex.app
open /Applications/DPlex.appThe xattr line removes the macOS quarantine flag once you've inspected
the build — equivalent to right-clicking the app and choosing Open,
but cleaner from the terminal.
Download DPlex-Setup.exe from the Releases page
and run it. SmartScreen will warn you about the unsigned installer —
click More info → Run anyway after verifying the file's SHA-256
matches the value published on the release page.
Invoke-WebRequest -Uri https://github.com/Ron537/DPlex/releases/latest/download/DPlex-Setup.exe -OutFile DPlex-Setup.exe
.\DPlex-Setup.exe# AppImage (any distro)
curl -L https://github.com/Ron537/DPlex/releases/latest/download/DPlex.AppImage -o DPlex.AppImage
chmod +x DPlex.AppImage
./DPlex.AppImage
# Debian / Ubuntu
curl -LO https://github.com/Ron537/DPlex/releases/latest/download/DPlex-amd64.deb
sudo dpkg -i DPlex-amd64.debRequires Node.js 18+ (we develop on 22 LTS) and Git.
git clone https://github.com/Ron537/DPlex.git
cd DPlex
npm install
npm run devnpm run build:mac # macOS .dmg + .zip (arm64 + x64)
npm run build:win # Windows .exe installer
npm run build:linux # Linux .AppImage + .deb + .snapEvery release is built from a tagged commit by GitHub Actions. To reproduce locally:
git checkout v0.9.0 # or whichever release you want
npm ci --ignore-scripts
npm run build
# Compare the SHA-256 of your local build with the release's published checksums.CI logs and SBOMs are attached to every release.
The headline feature. DPlex gives you full lifecycle control over the Copilot CLI / Claude Code sessions you actually work with daily.
- 🗂️ Past-session list. Every session you've ever started, surfaced in the Sessions activity-bar panel — searchable by name, ID, summary, or workspace, grouped by recency or by project.
▶️ One-click resume. Click any past session to reopen it in a new tab with the correct resume command and original CWD pre-filled. The re-spawned PTY is matched back to its provider session ID so the active-session indicator lights up automatically once the AI tool writes its lock file.- 🟢 Live active-session indicators. Active sessions are detected
via provider lock files (
inuse.<PID>.lockfor Copilot, pidfiles for Claude) with PID liveness checks, so the sidebar always reflects what is actually running. - ⏹️ Close active sessions from the sidebar. Stop a running AI session without finding its terminal — closing the tab fully terminates the underlying process.
- 🗑️ Delete sessions from disk. Remove a session's stored history when you're done with it (with confirmation).
- 🧠 Prompt-history viewer. Browse and search the prompts you've sent in any past session — useful for re-running, copy-pasting, or remembering what you asked yesterday.
- 📌 Recent sessions per project. Each expanded project (and worktree) lists its last few idle sessions inline, so you can resume them without leaving the projects panel.
- 🧩 Provider-agnostic. Same start / resume / close / delete flow whether the underlying tool is Copilot CLI, Claude Code, or one you add yourself — see docs/providers.md.
Close the app today, open it tomorrow — every AI session tab is back exactly where you left it. This is the feature DPlex was built around.
- Every AI session tab is restored. Tabs are serialized to
sessions.jsonin the ElectronuserDatadirectory on every natural lifecycle event and synchronously on quit, so a SIGTERM doesn't lose state. - Splits and tab order survive too. Horizontal/vertical splits, tab order within each pane, the active group, and the active tab are all rebuilt on launch.
- Resume command + CWD preserved. Each restored tab is recreated with its original resume command and working directory. A short retry loop re-resolves the underlying provider session ID once the AI tool writes its lock file, so active-session indicators light up automatically.
- History is independent of workspace state. Even after a hard kill (SIGKILL/OOM) the session history is untouched — every previous session is still discoverable and resumable from the Sessions panel.
- VSCode-style activity bar on the far left. One click jumps between projects, sessions, and git changes.
- Click the active item to collapse the panel for maximum editor space.
- Settings gear at the bottom of the activity bar for quick access.
- Provider-agnostic architecture. Built-in support for GitHub Copilot CLI and Anthropic Claude Code out of the box.
- One interface for all providers. Same start / resume / close flow regardless of the underlying tool.
- Pluggable. Add a provider by implementing one TypeScript interface — see docs/providers.md. PRs welcome.
- Auto-detection. Sessions remember which provider they belong to so resume commands are always correct.
- Split panes — horizontal and vertical splits with resizable dividers.
- Tabbed interface — multiple terminals per pane, drag tabs between panes.
- Tab reordering — drag and drop within and across groups.
- Drag a tab onto another pane's edge to create a new split right there — handy for putting a freshly-resumed AI session next to the one you already had open.
- Shell selector — pick from auto-detected system shells (bash, zsh, fish, PowerShell, etc.) when opening a new terminal.
- Project sidebar with active session indicators and Git branch badge.
- One-click AI sessions in any project directory.
- Pinned projects float to the top, with an "All projects" section below.
- Drag-and-drop reordering for projects.
- Quick actions — open terminal, copy path, remove project from the right-click menu.
- Git worktrees — create, manage, remove worktrees per project, with worktree-specific session lists. Worktrees are first-class projects in the sidebar.
- Project-scoped changes view — file list for whichever project (or worktree) you've selected.
- Header dropdown to switch projects without leaving Git.
- Single-click preview + double-click promotes to a permanent diff tab (VSCode behavior).
- Live updates via filesystem watchers — changes appear as you save.
- Notification bell — aggregated inbox surfaces sessions that need you, with an unread badge in the title bar.
- Event kinds — separate signals for waiting for approval, waiting for input, and finished.
- Auto-dismiss on focus — events clear when you focus the relevant tab.
- Configurable cooldown — tune how often a session can re-notify to avoid noise.
- Jump-to-session — click any inbox entry to activate its tab.
12 built-in themes with matched terminal and UI colors:
- Dark — DPlex, Dark, Midnight, Dracula, Monokai, Nord, Solarized Dark, GitHub Dark.
- Light — DPlex Light, GitHub Light, Solarized Light, Quiet Light.
| Shortcut | Action |
|---|---|
⌘T |
New terminal |
⌘W |
Close terminal |
⌘B |
Toggle sidebar |
⌘, |
Open settings |
⌘\ |
Split horizontal |
⌘⇧\ |
Split vertical |
⌘⇧G |
Toggle Source Control view |
⌘F |
Focus side-panel search |
⌘1-9 |
Switch to tab N |
(⌘ = Ctrl on Linux/Windows.)
There are great tools in adjacent niches. DPlex isn't trying to replace any of them — it's optimizing for one specific workflow: running multiple AI CLI sessions across multiple projects without losing your place.
| Tool | Niche | Where it differs from DPlex |
|---|---|---|
| tmux / Zellij | Terminal multiplexer, server-side | Powerful but generic; no AI-tool awareness, no project sidebar, no session discovery. |
| Warp | AI-augmented terminal | Beautiful, but the AI is theirs, not the CLI tool you already use. Closed source. |
| iTerm2 / WezTerm | Best-in-class terminal emulators | More polished as terminals; no orchestration of external AI sessions. |
| VS Code terminal panel | Embedded terminals in the IDE | Fine for ad-hoc shells; not designed for managing many concurrent AI sessions across many repos. |
| Wave Terminal | AI-focused terminal | Adjacent vision; broader scope, more opinionated UI. DPlex is narrower and Electron-portable today. |
| Zed / Cursor | AI-native editors | They embed the AI in the editor; DPlex orchestrates the AI you already use from the terminal. |
If your goal is "I want to start a Claude session in repo A today, a Copilot session in repo B tomorrow, find yesterday's sessions whenever I need them, resume any of them in one click, and reopen the app next week with every tab right where I left it" — that's DPlex.
My AI tool isn't being detected.
Check that the binary is on the same $PATH your default shell sees. DPlex spawns its PTYs via your login shell, so anything missing from ~/.zprofile or ~/.bashrc won't be found.
An AI session shows as inactive even though it's running.
DPlex detects active sessions via the tool's lock files (inuse.<PID>.lock for Copilot, pidfiles for Claude). If the tool's lock format changed in an upstream release, please open an issue with your version + OS — usually a one-line fix in the provider.
My session tabs didn't restore after a crash. Workspace state is saved on graceful quit and during natural lifecycle events; a hard kill (SIGKILL, OOM) can lose unsaved tabs. The session history is unaffected — your past sessions are still discoverable from the Sessions list.
The app won't open on macOS — "DPlex is damaged" or "from an unidentified developer." Until proper notarization lands, run:
xattr -dr com.apple.quarantine /Applications/DPlex.app…or right-click the app and choose Open. macOS remembers your choice after the first launch.
The Windows installer is flagged by SmartScreen. Until code signing lands: click More info → Run anyway after verifying the SHA-256 matches the release page. The installer is unmodified from CI.
I want feature X / I'd like a provider for tool Y. Open an issue. For new providers there's a dedicated template — see docs/providers.md if you want to send a PR.
DPlex uses electron-vite with three process targets — main (Node), preload (IPC bridge), and renderer (React).
For the deep dive — security posture, state stores, terminal lifecycle, IPC pattern, and provider system — see docs/architecture.md.
| Layer | Technology |
|---|---|
| Framework | Electron 39 |
| Build | electron-vite + Vite 7 |
| Frontend | React 19, TypeScript 5.9 |
| Styling | Tailwind CSS v4 |
| State | Zustand 5 |
| Terminal | xterm.js 6 (with WebGL, fit, web-links addons) |
| PTY | node-pty |
| Icons | lucide-react |
| Packaging | electron-builder + electron-updater |
| Tests | Vitest (unit) + Playwright (e2e + monkey) |
Contributions are very welcome. Read CONTRIBUTING.md for the dev setup, conventions, and PR checklist.
The fastest way to expand DPlex's reach is implementing a new provider — see docs/providers.md. Bug reports with reproduction steps are equally valuable.
Looking for something to start with? Browse issues labelled good first issue.
- No telemetry, ever. Read PRIVACY.md — it's auditable.
- Report security issues privately per SECURITY.md.
DPlex is open source under the MIT License.








