Open-source project
gwitko/Conduit avatar
gwitko/Conduit

Conduit: SSH, Mosh and SFTP from an Android or iOS phone

A mobile terminal workspace for Android and iOS with SSH, Mosh, SFTP, hardware-key auth, tmux helpers, and an optional local shell.

379 stars22 forksDartApache-2.0

At a glance

What is it?
Conduit is a Flutter mobile terminal that keeps hosts, keys and fingerprints on the device, adds Mosh roaming, hardware-key auth and an optional proot Arch Linux shell on Android arm64. The trade-off is that it is a phone app, not a desktop replacement.
Who is it for?
Adopt Conduit if you administer machines from a phone and want keys, hosts and trusted fingerprints to stay on the device, with Mosh to survive network changes. Skip it if you need a desktop-grade terminal, a Windows or Linux client, or a shell on iOS: the local Arch Linux shell is Android arm64 only.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 56 days ago.
What is it written in?
Mainly Dart, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.

DEEP OPEN-SOURCE ANALYSIS

The problem Conduit solves for phone-based sysadmins

Reaching a server from a phone usually means a terminal app that either syncs your credentials to someone else's cloud or forgets everything the moment you switch devices. Conduit takes the opposite position: hosts, private keys and trusted host fingerprints stay on the device. The README states there is no account, no cloud sync and no subscription. That single design decision shapes the rest of the app. Because nothing is synced, you get explicit import and export for backups of app settings, saved machines, ordering and trusted host keys, with the option to omit secrets or encrypt credentials with a password. The audience is narrow but real: people who already run servers, already have keys, and want a terminal on the phone rather than a hosted dashboard. It is not a jump-host service and it is not a web console. Everything it does happens between your phone and a machine you already have access to.

How sessions, Mosh and tmux fit together

A session starts from a saved machine profile. Profiles carry tags, search filters and sorting by last connected, name or date added, and each session opens as a tab inside a workspace. Authentication supports OpenSSH private keys, passwords, hardware security keys and external server-driven auth. Keys can be imported from a file or generated on device as ed25519 with optional passphrase encryption. The interesting part is Mosh. Instead of running the protocol through a library binding, Conduit runs dart_mosh, which the README describes as a clean-room Dart implementation of the protocol. That matters because Mosh is what keeps a session alive across Wi-Fi drops and cellular handoffs; a plain SSH connection dies when the phone changes network. The terminal itself is conduit_vt, a fork of xterm.dart, so rendering and escape-sequence handling are a Flutter concern rather than a native one. On top of that sits per-host tmux integration: auto attach or create on connect, a chosen start directory, prefix key selection, action shortcuts and scrollback mode exposed from the on-screen key row. For hardware keys, the README states Android supports USB or NFC and iOS supports NFC, with multiple keys registered per host tried in turn until one matches. Agent forwarding is available per host, and forwarded hardware keys still require a touch for every onward signature.

Installing Conduit and opening a first session

Conduit ships as a mobile app, not a server package, so installation means installing the app. The README links the App Store, Google Play, F-Droid and Obtainium. The F-Droid package identifier is com.gwitko.conduit, which is also the Play package name. If you build from source, the repository is a Flutter project: pubspec.yaml and pubspec.lock sit at the top level, with android/ and ios/ beside lib/, and the README badge pins Flutter 3.44.1. A source build follows the usual Flutter flow:

bash
flutter pub get
flutter run

After installing, the first real use is adding a machine profile and connecting. The README does not print a configuration file format, so the fields are entered through the app UI. The pieces you need are the host address, a username, and one credential: a password, an imported OpenSSH private key, or a hardware security key. On first connect, the host presents its key and Conduit asks you to review the fingerprint explicitly before trusting it. That review step is the whole point of the local-first model; skipping it defeats the design. Once the profile is saved, connecting opens an SSH shell in a tab. Mosh is a separate session type for the same host when you expect the network to move under you. If you want tmux behaviour, configure it per host so Conduit attaches to an existing session or creates one on connect, and set the start directory there rather than retyping cd every time.

The local Arch Linux shell and where it stops

On Android arm64, Conduit can run an optional local Arch Linux shell through proot. It downloads an Arch Linux ARM image on first use and opens it like any other terminal tab, with pacman available and no root required. The build variants differ in a way that matters: the Full Android build can mount shared phone storage inside the shell at /mnt/android, while the Google Play build omits the restricted all-files permission. So the Play build is the more restricted one, and if you need /mnt/android you are choosing a sideloaded build instead. This feature does not exist on iOS at all, and the README scopes it to arm64. Treat the local shell as a convenience environment for small tasks on the phone, not as a replacement for a real Linux workstation. It is a proot userland, so anything that depends on kernel features, namespaces or privileged operations is out of reach by construction.

Where Conduit is the wrong tool

The clearest limitation is platform scope. There is no desktop client here. If your workday happens at a keyboard, Conduit does not replace your terminal emulator, and the README makes no claim that it does. The second limitation is the local shell: Android arm64 only, with a build-variant split that changes what the shell can see. The third is storage. Local-first means no sync, so moving to a new phone is an export and import exercise, and the README notes you can export backups without secrets or encrypted with a backup password. If you lose that backup and the password, nothing recovers it for you. There is also a dependency surface worth naming: Mosh runs on dart_mosh and the terminal is conduit_vt, both separate projects maintained by the same author. That is a smaller bus factor than a terminal built on a widely used library. Finally, the README does not document rollback or downgrade steps for app updates, so version pinning behaviour is something you would have to check yourself. None of this makes Conduit badly built. It makes it a focused mobile tool with edges you should know before you rely on it.

How it differs from Termux and from server-side tmux

The obvious comparison on Android is Termux, which the README credits for the packaging that makes the local shell possible: proot, the Arch Linux ARM rootfs via proot-distro, busybox, GNU tar, xz/liblzma, libtalloc and the libandroid-* shims. The difference in approach is the entry point. Termux is a terminal and package environment first; you build your SSH workflow inside it. Conduit is an SSH client first, with saved machine profiles, host-key trust management, hardware-key auth and Mosh built in, and the Arch shell is an optional extra rather than the foundation. If your goal is a Linux userland on the phone, Termux is the more direct route. If your goal is reaching existing servers with keys you already hold, Conduit starts closer to that. The other comparison is server-side tmux. Conduit's tmux integration is a client convenience: it attaches or creates a session on connect and surfaces prefix, action and scrollback controls from the key row. It does not replace tmux on the server, and it does not make tmux unnecessary; it makes tmux usable from a phone keyboard.

Licence, third-party binaries and upgrade cost

Conduit's own source is Apache-2.0, which is permissive and includes a patent grant. The local shell complicates that picture in a way the README is explicit about: Android builds that include the local shell redistribute third-party binaries under their own licences, and Conduit states it provides a corresponding source offer for GPL/LGPL components. The component list, licence texts, upstream source archives, package checksums and a pinned source recipe snapshot live in THIRD_PARTY_NOTICES.md, with source-offer details under third_party/source-offer. If you redistribute a build, that file is the one to read, and this is not legal advice. Upgrade cost looks low on the surface: releases arrive frequently, with v1.4.14 on 2026-07-14, v1.4.13 on 2026-07-10 and v1.4.12 on 2026-07-08, and the last push to master was on 2026-07-24. But the local shell downloads an Arch Linux ARM image on first use, so that path has its own update rhythm outside the app's release cycle. On F-Droid and Obtainium, updates follow their own channels rather than the store.

Editorial conclusion

Adopt Conduit if you administer machines from a phone and want keys, hosts and trusted fingerprints to stay on the device, with Mosh to survive network changes. Skip it if you need a desktop-grade terminal, a Windows or Linux client, or a shell on iOS: the local Arch Linux shell is Android arm64 only. Before trusting it, check the F-Droid listing or the GitHub releases page for the current version, read THIRD_PARTY_NOTICES.md if you plan to use the local shell, and confirm on your own hardware that your security key registers over USB or NFC.

Frequently asked questions

How do I install Conduit on Android or iOS?

Install it from the App Store, Google Play or F-Droid; the README also lists an Obtainium link that points at the GitHub releases. The F-Droid and Play package identifier is com.gwitko.conduit. Building from source is a Flutter project, with pubspec.yaml at the top level and Flutter 3.44.1 pinned in the README badge.

Does Conduit sync my hosts and keys to a cloud account?

No. The README states hosts, keys and trusted fingerprints stay on the device, with no account, no cloud sync and no subscription. Moving data between devices is done through export and import of backups, which can omit secrets or be encrypted with a backup password.

Can Conduit run a local Linux shell on the phone?

On Android arm64 it can run an optional Arch Linux shell through proot, downloading an Arch Linux ARM image on first use, with pacman available and no root required. The Full Android build can also mount shared phone storage at /mnt/android, while the Google Play build omits the restricted all-files permission. The README does not offer this on iOS.

Which hardware security keys does Conduit support?

The README describes OpenSSH FIDO security-key auth for ed25519-sk and ecdsa-sk credentials, tested with YubiKey and designed for CTAP-compatible keys. Android supports hardware-key auth over USB or NFC, iOS over NFC, and multiple keys can be registered per host and tried until one matches.

Official sources

  1. gwitko/Conduit on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Community notes

Community notes