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.
-
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.
-
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.
-
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 pairprints six digits to type into a phone.rm -rf ~/.terminaldeckundoes all of it.curl -fsSL https://terminaldeck.dev/install.sh | 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.
-
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.
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 ghon macOS,winget install GitHub.clion 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
-
Download and open the disk image
Take the macOS build above —
terminaldeck-0.15.0-arm64.dmg— and open it. Inside isTerminal Deck.app. It is an Electron app, so the unpacked bundle is around 300 MB. -
Move it to Applications
Drag
Terminal Deck.appinto/Applications. Running it from~/Downloadsworks, but Applications is where macOS expects it and where you will find it again. -
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.
-
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.
-
Run the installer
terminaldeck-0.15.0-x64-setup.exeasks 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.exeis 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. -
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.
-
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
terminaldeckis published to npm, and the desktop app is released on its own schedule.terminaldeck --versionafter installing says which one you have; the host that matches exactly this release is the.tgzon 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.