Terminal Deck 0.15.0

Download

Terminal Deck 0.15.0. MIT-licensed, and there is no account to make. Pick the machine you want it on. Every build that exists is below, including the two for phones that are not in an app store yet — those say so instead of being left off the page.

Choose a machine

What each build is, who it is for, and what happens the first time you open it. Every download button resolves to the newest release as you click it, so none of them can quietly hand you an old one.

  • macOS

    A Mac with an Apple-silicon chip, on macOS 12 or newer. There is no Intel build: macOS 27 does not run on an Intel Mac at all.

    First launch: macOS says it cannot verify the developer and offers you Done or Move to Trash. Click Done, then open System Settings → Privacy & Security and click Open Anyway next to the message naming Terminal Deck. Once, and never again. The four steps in full.

    Download the .dmg

    terminaldeck-0.15.0-arm64.dmg
    119 MB · signed, not notarised

  • Windows — installer

    A PC on Windows 10 or newer, x64. It installs for your account only, so it never asks for an administrator password. Windows on ARM runs this build under emulation; there is no native ARM one.

    First launch: a blue Windows protected your PC panel with only a Don’t run button. Click More info, then Run anyway. Why it warns.

    Download the installer

    terminaldeck-0.15.0-x64-setup.exe
    107 MB · not signed

  • Windows — portable

    The same build as one file that runs without installing anything. Take this one for a machine you would rather not write to Program Files on, or to carry it on a stick.

    The one thing it cannot do is update itself — it is a loose file with nothing to replace it — so a new version means coming back here. Everywhere else, updating in place works from inside the app.

    Download the portable .exe

    terminaldeck-0.15.0-x64-portable.exe
    107 MB · not signed

  • A server with no screen

    A Linux box, a rented server, or a WSL distribution on Windows — anything you reach over SSH. It is the same core with no window and no Electron in the process, so the sessions run there and your phone or your desktop opens them.

    It brings its own Node if the machine has none, writes nothing outside your home directory and never runs as root. Then terminaldeck pair prints six digits to type into a phone. rm -rf ~/.terminaldeck undoes all of it.

    curl -fsSL https://terminaldeck.dev/install.sh | sh

    terminaldeck on npm · reads the script first at terminaldeck.dev/install.sh

  • Android

    An Android phone or tablet. It is a client, not a copy of the app: the sessions stay on your computer and this is a window onto them.

    It is not on Google Play. This is the signed APK from the releases page, so Android will ask you to allow installing from your browser the first time, and it cannot update itself — a new version means downloading it again from here.

    Download the APK

    terminaldeck-0.15.0.apk
    4 MB · signed by us, not by Google

  • iPhone and iPad

    A native client with a real terminal, a key bar for the characters a phone keyboard hides, and long-press selection.

    There is nothing to download. It is on TestFlight, internal testing only — not on the App Store, and no submission has been made. There is no public link to give you, so there is no button here rather than one that goes nowhere. Ask for a place on the test in the community.

    What works on an iPhone today: app.terminaldeck.dev in Safari. Type the six digits and you have the session list and a real terminal, with nothing installed. It can be added to the home screen.

  • Any browser

    A borrowed computer, a work laptop, a tablet — anything with a browser and no permission to install software.

    It holds a pairing credential and a private key, so it lives on its own hostname rather than a path on this site: browsers keep stored credentials apart by origin. “Just for this visit” is the default on the pairing screen.

    Open the web client

    Nothing to install · works now

Every checksum, every earlier build, and the macOS .zip the in-app updater fetches are on the releases page. Or build it yourself — the repository is the whole product, and a build you made carries no quarantine flag and no SmartScreen warning.

What else you need

Besides the machine. Nothing else is assumed, and nothing here is installed for you.

An agent CLI
At least one of Claude Code, Codex CLI or Gemini CLI — installed and already signed in. Terminal Deck does not install them, and it never asks you for a login or an API key: the agent signs you in itself, in the terminal.
git
Only for the git panel. Everything else works without it.
The gh CLI
Only for the GitHub panel, which runs your own authenticated gh. brew install gh on macOS, winget install GitHub.cli on Windows, if you want it.
Node 22 or newer
Only to build from source. A downloaded build has no Node requirement.

On first launch the app checks what is actually on your machine and, if no agent is usable, shows you what it found rather than an empty window. Settings → Coding AI repeats that check at any time and prints the literal probe it ran, so a missing tool tells you the command as well as the conclusion.

Installing on macOS

  1. Download and open the disk image

    Take the macOS build above — terminaldeck-0.15.0-arm64.dmg — and open it. Inside is Terminal Deck.app. It is an Electron app, so the unpacked bundle is around 300 MB.

  2. Move it to Applications

    Drag Terminal Deck.app into /Applications. Running it from ~/Downloads works, but Applications is where macOS expects it and where you will find it again.

  3. Open it once and let macOS refuse

    Double-click the app. macOS will say it cannot verify the developer. Click Done — not Move to Trash.

  4. Then click Open Anyway

    Open System Settings → Privacy & Security, scroll to the security section, and click Open Anyway next to the message naming Terminal Deck. Confirm once more and it launches. After that, double-clicking works normally and you never see the dialog again.

    That button only appears after step 3, which is why the refused launch is a step rather than a mistake.

Why that step exists

The app is signed with an Apple Developer ID certificate, but it is not notarised — notarising means uploading each build to Apple for a malware scan, and this developer account is not currently able to do that. macOS attaches a quarantine flag to anything downloaded from the internet, and Gatekeeper refuses a quarantined app that is signed but not notarised until you say otherwise.

Right-click → Open no longer works. It was the standard way past this for years, and macOS 15 removed it — on macOS 15 and later it gives the same dead end as a double-click. Open Anyway is the replacement, and the only route.

The signature is real, and you can check it yourself before trusting any of the above:

codesign -dv --verbose=2 "/Applications/Terminal Deck.app"

It should name Developer ID Application: Asad Iqbal (6U4VNX5W87). If you would rather not take that on trust, build from source below — then the binary is one you produced on your own machine, and no quarantine flag is ever set.

Installing on Windows

Windows 10 or newer, x64. Every step below has been walked through on a real Windows 11 machine.

  1. Run the installer

    terminaldeck-0.15.0-x64-setup.exe asks where to put the app and installs it for your account only, so it does not need an administrator password. terminaldeck-0.15.0-x64-portable.exe is the same build as a single file that runs without installing anything — take that one if you would rather not write to Program Files at all.

  2. Click past SmartScreen

    Windows shows a blue Windows protected your PC panel with only a Don’t run button visible. Click More info, then Run anyway. The portable executable is warned about the same way, every time you move it to a new machine.

  3. Bring your own agent CLI

    Same as on macOS: Terminal Deck runs Claude Code, Codex CLI or Gemini CLI, and installs none of them. Install and sign in to at least one first, or the first launch has nothing to show you.

Why SmartScreen warns

Signing a Windows build needs a code-signing certificate issued by a commercial authority against a verified identity, renewed yearly. This build has none, so SmartScreen has no publisher to name and no signature to look up a reputation for, and it hides the run button behind More info rather than refusing outright. That is Microsoft’s own override, the same shape as the Open Anyway step on macOS: it is how you say you know where the file came from.

The one check you can make yourself is the checksum. SHA256SUMS.txt on the releases page lists the SHA-256 of every file in the release; Get-FileHash in PowerShell prints the one you downloaded. If you would rather not take any of it on trust, build from source below.

Building from source

The repository is the whole product. Node 22 or newer, and about two minutes.

Run it in development

git clone https://github.com/asadev/terminaldeck.git
cd terminaldeck
npm install
npm run dev

npm run dev starts Electron with a hot-reloading interface. Main-process changes need a restart; interface changes do not.

Package a real .app

npm run pack:mac   # unpackaged .app, fastest to smoke-test
npm run dist:mac   # the disk image: dmg + zip, arm64

pack:mac leaves release/mac-arm64/Terminal Deck.app; dist:mac writes the .dmg and .zip into release/. Both run npm run build first. Because you built it locally it carries no quarantine flag, so it opens on a double-click with no Gatekeeper step at all.

Do not run npm run build while npm run dev is serving. They share the out/ directory, and the build overwrites what dev is running out from under it. Stop dev first.

Checks

npm test          # vitest
npm run typecheck # both tsconfigs

What this build does not do

Worth knowing before you install rather than after.

  • There is no Linux desktop window. The headless host is the Linux route, and it is a real one: it has been installed in a WSL distribution and left running there under a user service, holding agent sessions a phone drives. What it does not have is a window on that machine.
  • The host on npm can be behind the desktop. The one-line install takes whatever version of terminaldeck is published to npm, and the desktop app is released on its own schedule. terminaldeck --version after installing says which one you have; the host that matches exactly this release is the .tgz on the releases page.
  • Translations are not built yet. The app is English only, and the language row in Settings had exactly one option, so it was removed rather than left as a control that changes nothing.
  • A Mac has never talked to a Windows PC. Machine-to-machine pairing has been run end to end against the real trust store and the real pairing desk — with both ends in one macOS process on loopback, which is where every seam that has broken before lives. Across the internet, between two operating systems, it is the same code and it has not been run.
  • Neither phone client is in an app store. The iPhone one is on TestFlight, internal testing only, with no submission made; the Android one is a signed APK on the releases page and not on Google Play. Both are in the list above, with what that means for each.
  • Usage, context and session search read Claude Code transcripts. Codex and Gemini sessions run perfectly well; those panels simply have nothing to read for them. No panel anywhere shows a price — the app reports tokens and context rather than money, on purpose.