Install
One small download per platform. The terminal needs no account, and it makes no network calls until you turn sync on.
Downloads
- Linux (Debian/Ubuntu): termuna-amd64.deb - or the apt repository below, which also carries your updates.
- Linux (any): termuna-linux-x86_64.tar.gz - unpack and run the binary.
- Windows: no download yet. The installer returns once it is signed; an unsigned build is not something we ship.
- macOS (Apple silicon): Termuna-arm64.dmg - open it and drag Termuna onto Applications. It is signed with a Developer ID and notarized by Apple, so it opens like any other app. Termuna-arm64.tar.gz holds the same Termuna.app if you would rather place it yourself; the in-app updater keeps either install current once Termuna.app is in Applications. Everything else, per version, is on the releases page.
- Android: the mobile page says where the phone app stands and carries its signed APK once a release exists; installing one is below.
Termuna is deliberately small and fast, and the numbers are enforced in CI as product promises: cold start under 300 ms, under 100 MB of memory with tabs open, an installer under 30 MB. Native Rust, GPU-rendered; no Electron, no webview.
Debian / Ubuntu
Add the repository once and Termuna updates with the rest of your
system, through apt upgrade:
curl -fsSL https://termuna.com/apt/termuna.gpg \ | sudo tee /usr/share/keyrings/termuna.gpg > /dev/null echo "deb [signed-by=/usr/share/keyrings/termuna.gpg] https://termuna.com/apt stable main" \ | sudo tee /etc/apt/sources.list.d/termuna.list sudo apt update && sudo apt install termuna
The repository is GPG-signed and signed-by pins it to
exactly that key. A package install lives in /usr/bin,
which the in-app updater deliberately treats as not its own: apt owns
those updates, and the two never fight.
First launch
The app opens straight into a session window at 1440x860: wide enough that the sessions drawer sits pinned on the left and the continuity panel on the right. There is no home screen and no signup wall; you are in a shell immediately.
Behind the window, Termuna starts its daemon: the process that owns your shells and the session tree. From then on the window is a viewer. Close it and your sessions keep running; reopen the app and it reattaches to the session you left, at the size you left the window.
What is on by default
- Cloud sync: off. Nothing leaves your machine until you enable it (Cloud continuity).
- Telemetry: none without explicit opt-in.
- Theme: luna-dark, with six more built in (Configuration).
Staying current
Once a day the app fetches a signed list of releases from GitHub. The request carries nothing about you, the list is Ed25519-signed and refused unless a key the app was built to trust signed it, and the answer is one quiet line in the status bar - or, on most days, nothing at all. Nothing downloads and nothing installs without you asking.
Click the line and the app downloads your platform's artifact and checks it byte-for-byte against the signed manifest. Click again to install:
- Windows: the verified installer runs; it replaces the install in place, per-user, no admin prompt.
- Linux: when the running binary is yours to
replace (under your home, such as
~/.local/bin), the app replaces its own install and relaunches into it. A binary installed by a package manager is never touched:aptowns it, and the file manager opens on the verified archive instead. - macOS: when Termuna.app is in your own Applications folder, the app replaces its own bundle and relaunches; anywhere else, Finder reveals the verified archive.
When the app replaces its own install, it goes in this order. The download is checked against the signed manifest and unpacked beside the current install. The staged copy is then verified before anything is swapped: on macOS its code signature and Gatekeeper's own assessment, and everywhere, that the staged build answers with the version it promised. Only then is it swapped in atomically and the app relaunches. Your running install is never touched before the new one is proven.
The previous install is kept as a .previous copy until
the next launch. A build that fails a check is deleted and named, so
you know what was refused.
After an install, the app offers to restart its daemon; the restart hands your running shells to the new build instead of ending them. The daily check can be turned off in Settings → About.
Android: installing a signed APK
The phone app ships as a signed .apk on its GitHub
release until it is on Google Play. The mobile
page links the current file, or says plainly that there is none yet.
Installing one takes a minute:
- Download the
.apkon the phone, from the mobile page. It is an ordinary download; your browser lists it with the others. - Open it. Tap the finished download, or find it in the Files app. Android shows the install sheet.
- Allow installs from your browser when Android asks. It asks once per app you install from (from Android 8 on; on Android 7 it is the one Unknown sources switch under Security) and takes you straight back to the install. The app runs on Android 7.0 and newer.
Every release is signed with the same key, so a newer APK installs over the one you have and keeps your sign-in and your settings. Until the Google Play listing exists, updates are a new download from the same place: check the mobile page or the release notes for the current version.