Changelog
Every release, newest first, in the same words shown in the app's About screen. Git holds the commit-level detail; this is what changed for you.
1.12.0-rc8
- Tailscale: removed the tailnet device list in Add host and Settings > Tailscale > Device list - it needed a Tailscale API OAuth client set up by hand. A saved client and secret are erased. Tailscale-mode hosts still browse your tailnet through the in-app node, no keys needed
1.12.0-rc7
- Tailscale: Add host now notices when the Tailscale app is connected and offers your tailnet's devices - rc5 and rc6 never did
1.12.0-rc6
- Hosts: mark a host as a favorite from its ⋮ menu to keep it at the top of the list; remove it from favorites to put it back where it was
1.12.0-rc5
- Add host: how the host is reached now comes first, so AWS, Google Cloud, Tailscale and jump-host details are at the top; Advanced options is always open
- Add host: AWS, Google Cloud and Cloudflare Access are listed for Pro; free accounts see Direct, Jump host and Tailscale. A host or profile you already have keeps working
- Tailscale: setting up the in-app node from Add host opens over the form and brings you back with everything you typed, instead of leaving it behind in Settings
- Tailscale: with the Tailscale app connected, a Direct host can browse your tailnet's devices and fill in the address - set up once with a read-only Tailscale OAuth client in Settings > Tailscale > Device list
1.12.0-rc4
- AI copilot: the 33 free Gemini questions a day per host now work whichever AI provider was saved before - for example after a Pro subscription ends
- AI copilot: your own Gemini API key, OpenRouter and self-hosted servers are clearly marked Pro, and Test connection says so instead of trying
- AI copilot: asking a question no longer copies a long session's whole output first
- Subscriptions: Pro stays on through Google Play's grace period while a payment is retried
- Settings: if Google sign-in did not finish, the AI section says so instead of showing a free quota you cannot use
- Session logging: the Unlimited option shows its real limit - 50,000 lines
- History: searching a long log scrolls sideways to a match far along a line
- Auto-run snippets: typing in the picker starts a new search, and the clear button clears only what you typed
1.12.0-rc3
- AI copilot: signed-in accounts receive 33 free daily Gemini Flash queries per host; redesigned AI settings with Account & Limits overview
- Auto-run snippets: fixed inline snippet search and candidate filtering in host settings
- Session logging: retain full scrollback output across buffer eviction when sessionLogMaxLines is high or unlimited
- FIDO2: verified physical YubiKey 5 Nano enrollment with PIN and touch authentication
1.12.0-rc2
- AI copilot: the offline assistant is free and unlimited for all users; remote AI models require Pro
- Cloud backup: free and lapsed accounts can view, restore and delete existing backups; creating new backups requires Pro
- Subscriptions: active subscriptions are protected from being overwritten by older receipts
1.12.0-rc1
- FIDO2 developer option: a key with a PIN can be enrolled - the app asks for the key's PIN when the key needs it, and a wrong PIN says how many attempts are left
- Cloud backup: the screen now lists exactly what a backup holds - hosts and their passwords, imported keys, jump hosts, snippets and your port-forward library
1.11.0-rc50
- Subscriptions: signing in with Google for the first time works again, so Pro can be bought - since rc46 a new sign-in quietly failed and the Subscription row stayed on "status unknown"
- Subscriptions: if signing in or Google Play billing fails, the reason now shows under the Subscription row and in the upgrade dialog instead of nothing happening
1.11.0-rc49
- Jump hosts: connecting through a bastion works again on phones - since rc40 every jump-host connection was refused
- Security keys: while a connection waits for your key, a card at the top of the screen says what to do - hold it against the phone, or touch it when it blinks - and its Cancel stops the wait
- Security keys: a cancelled or timed-out key now says so, instead of reading as the server rejecting the key
- FIDO2 developer option: the key's public key now reaches the server in the format it expects - before this, servers refused every FIDO2 sign-in (SSH library updated to sshj 0.41.1)
- FIDO2 developer option: the key's errors are in plain words - a key without FIDO2 support, a FIDO2 PIN this app cannot send yet, a key not touched in time
1.11.0-rc48
- Security keys: adding a FIDO2 key (e.g. a Titan) is available again in Settings > Security > SSH keys for anyone with the FIDO2 developer option switched on
- Security keys: a tapped token that does not support PIV now says exactly that, instead of claiming nothing is stored in its slot
1.11.0-rc47
- AWS profiles have names: Settings > AWS lists them and each opens its own screen - rename it, switch between browser sign-in and access keys, move the default, and see each profile's sign-in state at a glance
- Host editor: the AWS profile a host uses is always shown, with a picker that can also start a new one - and your first profile can be set up without leaving the host editor
- AWS: a stored sign-in that AWS refuses is now renewed and retried automatically; only when that cannot help are you asked to sign in again, in plain words instead of the raw AWS error
- App lock: Unlock with an empty PIN field now says the PIN is wrong instead of crashing, and a cancelled fingerprint prompt no longer stops it from opening again
1.11.0-rc46
- Smaller and faster to install: the app download is about half the size it was
1.11.0-rc45
- Cloud sign-in: when an AWS or Google Cloud sign-in has run out, connecting now asks you to sign in again right there, without a trip to Settings. AWS browser sign-ins also try to renew themselves first
- Signing in to a different AWS account or Google account than a profile was set up with now asks before replacing it, or saves it as a new profile
- Hosts list and host editor: the AWS account and role or Google Cloud account and project a host uses are shown, and a PROD tag stands out in red
1.11.0-rc44
- Tips and requests: a small card on the Hosts list may now mention an available update or, after a few weeks of use, ask how the app could improve. Rare, never during a session, and you can turn it off in Settings > About
1.11.0-rc43
- AWS: set the region on each host, so instances in different regions work from one account; the account's region is now the default
- AWS: the region on Settings > AWS is now labelled Default region
1.11.0-rc42
- AWS: connect through Session Manager (Pro) with no open port on the instance; choose Instance Connect or Session Manager per host in Connect using
- AWS and Google Cloud hosts no longer ask for a password they never use
- AWS: a lapsed browser sign-in, or an instance in another region, now says so instead of showing "Request has expired" or "Instance not found"
- Hosts: an AWS or Google Cloud host with no hostname shows its instance ID in the list
1.11.0-rc41
- Security: AWS temporary-credential session tokens, and the state of an AWS browser sign-in in progress, are now encrypted on the device like the secret key
- Security: the Google Cloud access token is no longer written to the device; the app fetches a fresh one when it connects
- Security: copies of these left on the phone by earlier versions are removed or encrypted the first time you open this version
1.11.0-rc40
- Terminal: the keyboard steps aside when Close tab, Disconnect and similar confirmations open, so their buttons are never hidden
- Terminal: the screen stays awake during an active session and while a recording plays
- Hosts: a bastion reachable only over the in-app Tailscale node now connects; a jump host's local tunnel listens on this phone only
1.11.0-rc39
- Settings: Bastion hosts lists every host others jump through and which hosts use it; connect, edit or add one from there
- Hosts: a bastion still in use can't be deleted or un-flagged - the app names the hosts to change first
- Settings: every SSH key says which hosts use it, or that none do
1.11.0-rc38
- Terminal: swiping the extra-keys row no longer types the key the swipe started on; held keys still repeat
- Security: other apps and web pages can no longer send the app commands to run; the Gemini and Assistant shortcuts are withdrawn for now
- Files: a host behind a bastion uses the bastion's current details, and says so if it was removed
- Hosts: bastions are tagged BAST, and hosts that connect through one are tagged JUMP
1.11.0-rc37
- Player: recordings can be watched in full screen - the title bar, the transport controls and the system bars step aside, and on a tablet the player covers the list beside it as well
- Player: tap the recording to bring the controls back, or leave full screen with Back without closing the recording; the controls fade again on their own
1.11.0-rc36
- Settings: the preview under Terminal & console now follows the font size you pick - the sample text and the cursor grow with it - instead of sitting at a fixed size
1.11.0-rc35
- Gemini & Assistant: deep links (sshmanager://snippet) and explicit actions for external assistant voice triggers
- Shortcuts: dynamic Android app shortcuts enabling Gemini and Google Assistant to discover and launch saved snippets
- Security: interactive confirmation modal and optional pre-approved allowlist for assistant snippet execution
1.11.0-rc34
- Terminal: console opens wide immediately upon connecting to Tailscale and remote hosts without waiting on tunnel setup
- Authentication: friendly error handling for incorrect passwords with direct retry dialog and option to update saved password
- Connection diagnostics: in-terminal error banner with clear explanations for wrong passwords, unreachable hosts, and dropped connections
1.11.0-rc33
- History: sessions with multiple recordings now list every recording directly on the card with its own Play and Share buttons, duration, and size
- History: fixed recording number labels in the actions menu so older recordings are correctly numbered instead of appearing overwritten
- Terminal logs: output viewer now provides direct Play buttons for all recordings of a session
1.11.0-rc32
- Cloud backup: delete your encrypted cloud backup directly from Settings > Cloud backup
- External & Assistant execution: deep link router and security policy for automation and Gemini App Functions (#130)
- Privacy policy & Data safety: updated declarations for AI services, feedback, and diagnostics
1.11.0-rc31
- Terminal: holding an arrow key, Backspace or a symbol on the extra-keys row now repeats continuously, just like a physical keyboard
- Recording: a session can now be recorded more than once - tap Start recording, Stop, and start again whenever you like
- History: sessions with several recordings show each one with its own date, size and duration, so you can play or share whichever you need
1.11.0-rc30
- Terminal: box drawing, dim, italic, strikethrough and true colour - programs that draw borders with the line-drawing character set (mc, dialog, and htop on a server without UTF-8) now show real lines instead of letters like lqkxmj
- Recording: a recording started while a full-screen program is already running plays back the whole screen - its header rows and colours included - instead of only the parts that changed afterwards
- Tablet: the app uses the width now - a navigation rail down the left instead of the bottom bar, two-column Hosts and Snippets lists, and History as list-detail with the session output beside the list instead of over it
1.11.0-rc29
- Terminal: full screen - ⋮ → Full screen drops the header, the session tabs, the key row and the system bars for several more rows of terminal; tap the screen for the session list, the ⋮ menu and Exit, or leave with Back
- Terminal: with a physical keyboard attached, full screen no longer raises the on-screen keyboard over it
1.11.0-rc28
- Terminal: programs that ask the terminal questions - vim, mc, htop, vttest - now get real answers (cursor position, terminal type, mode reports), so they draw correctly from the first frame
- SSH keys: importing a normal Ed25519 key now shows the right key type and lets you copy its public key; keys imported before this are fixed automatically
1.11.0-rc27
- Tailscale: closing one of two sessions to the same host no longer disconnects the other
- Terminal ⋮ menu: host actions moved under "Host actions", so Disconnect and Close tab are back on screen without scrolling
1.11.0-rc26
- Host list: a ⋮ button on each host opens its actions, no long-press needed
- Terminal ⋮ menu: New session, Files, Edit host and Share host for the host you're connected to
- Tailscale: while a device waits for approval the app says so, and connects by itself once you approve it
- Tailscale: no more authorization popup after the device has already been approved
- Crash reports: the switch moved to Developer Options; while reports are on, Settings → About shows them with a Turn off button
1.11.0-rc25
- Settings → About → Send feedback: write to the developer straight from the app, with an optional email for a reply
- Terminal: fixed the screen sometimes freezing until tapped, while output kept arriving
- Tapping the SSH Manager notification now returns to the app instead of opening a second copy of it
- Terminal key row: BS and ENTER labels instead of ⌫ and ⏎
- Port forwards: the terminal ⋮ menu and Reconnect see forwards you attached to a host after its session started
1.11.0-rc24
- Port forwarding is now a library: save a forward once in Settings → Port forwarding and attach it to as many hosts as you like
- Attach or detach a host's port forwards in the host editor under Advanced options, each with its own auto-start, with search once you have more than a handful
- Terminal ⋮ menu: start and stop a session's port forwards without reconnecting, and see in words why one failed (for example the port is already in use on this phone)
- Forwards you already had move to the library on first launch, keeping their host and their auto-start
- The host menu no longer has a Port Forward item, and the port forward dialog no longer asks which host it is for
1.11.0-rc23
- Host list: hosts with session logging show LOG and hosts with port forwards show FWD, also as search filters
1.11.0-rc22
- Terminal: arrow keys now work in mc, htop and other full-screen programs that switch to application cursor keys
- Terminal: Backspace and Enter on the extra-keys row, right after TAB
- Recording player: a recording starts playing as soon as you open it
- Tailscale: each phone joins your tailnet under its own name (model plus 4 characters) instead of the shared "sshmanager-android"
1.11.0-rc21
- Terminal: the on-screen keyboard no longer shrinks the terminal - it slides over the bottom and the line you type on stays visible, so full-screen programs keep their size and rotating to landscape no longer leaves a 2-line terminal
- Terminal: pinch-to-zoom now sticks - the size is kept as your terminal text size instead of snapping back
- Recording player: one compact row of controls (play/pause and the timeline), and the title bar is no longer covered by the terminal
- History: the footer shows how many sessions History keeps and the space they take on this phone, recordings included
- App icon: the launcher icon now matches the Play Store icon's colours
1.11.0-rc20
- In-app player for session recordings: play them from History with seek, 1x, 2x and 4x speed, marker jumps and skip idle pauses
- History: filter chips (All, Terminal, Files, Recordings) to quickly find sessions, plus long-press actions to play, share, save or delete
- Brand: refreshed app icon across Android adaptive launcher, Google Play Store, and website
1.11.0-rc19
- Pro: record a terminal session to an asciinema file (.cast) from the ⋮ menu - a REC timer shows while it runs, tap it to add a marker or stop. Share or save the recording from History and play it with asciinema on any computer
- Recordings capture only what the server prints, never your keystrokes; the app asks before each recording (you can turn that off per host) and says plainly that output is not masked
- Terminal: characters split across network reads (htop's box drawing, non-Latin text) no longer turn into � on screen
1.11.0-rc18
- Terminal: after vim, less or htop, your shell screen and prompt come back intact even if you opened or closed the keyboard while the program was running
- Terminal: typing reset now recovers a session left stuck on a full-screen program's screen after it crashed or the connection dropped
- Terminal: cursor movement inside scrolling regions now matches desktop terminals, so full-screen programs redraw in the right place
1.11.0-rc17
- Full-screen terminal apps (vim, tmux, less, htop, man) now render and scroll properly with full alternate screen buffer and scroll region support
- Fixed ECMA-48 escape sequence parsing so vim 9 start and exit sequences no longer leave stray characters on screen
1.11.0-rc16
- Fixed: "View output" in History did nothing since 1.11.0-rc14 - past session logs open again
- Fixed: built-in snippets added in an update now appear on phones that already had the app, not only on fresh installs - including Snippets > SSH keys
1.11.0-rc15
- Settings > Known hosts now shows each server's name from your host list, with its address underneath, instead of only an IP address
- Settings > SSH keys: copy a key's public key with the new Copy button, any time after the key was created. Keys made on this phone are listed by their device name
1.11.0-rc14
- New: swipe left or right to move between Hosts, History, Snippets and Settings. Swiping is paused while you're editing a host, inside a Settings page, or reading a session log, so it never interrupts what you're doing
1.11.0-rc13
- New: the first time you open the app, it creates an SSH key for this phone - in its secure hardware where the phone has it - named after the device, so you can use key login without making one first. Copy its public key from the host setup screens
- The setup wizard's SSH Key step now shows the selected key's public key with a Copy button, ready to add to the server
1.11.0-rc12
- New: Snippets > SSH keys - add a public key to a server's authorized_keys straight from your clipboard, the first step to turning off password login. Only a valid public key can be run, so pasted text can never become a different command
- Fixed: restoring a cloud backup with the wrong passphrase now tells you so, instead of showing a raw error. A restore that can't reach your backup, or finds none, no longer reports success
- Fixed: cancelling your Pro subscription now keeps Pro until the end of the period you paid for, instead of ending it straight away
1.11.0-rc11
- Fixed: deleting an SSH key no longer happens on a single tap. It now asks first, names the hosts that use the key, and warns when a key made in the phone's secure hardware can't be recovered. Deleting a snippet or a port forward asks first too
- Setting up a host with key sign-in no longer throws away what you typed. On the Key tab you can now import, generate or add a security key right there, and the new key is selected for you. For hardware and security keys the public key is shown with a Copy button, ready for the server's authorized_keys
- Fixed: the Snippets screen kept showing a dropped session as connected, and running a snippet on it said "Executed" while nothing was sent. The dot now shows the real state, a disconnected session offers Reconnect & run, and tapping the session row lets you pick between open sessions
- Fixed: a subscription bought while the connection dropped could be refunded automatically a few minutes later, and Pro switched off with it. The purchase is now confirmed with Google Play even if the app's own check doesn't get through
- Fixed: after subscribing, Settings could say "Upgrade to Pro" while Pro features were already unlocked. The Subscription row now updates at the same time as the features
- The upgrade screen shows the price as "$2.99 / month" instead of Google Play's internal code "P1M"
1.11.0-rc10
- New: optional crash reporting, off by default. If the app closes unexpectedly it now offers to send a report so the crash can be fixed, and you can turn it on or off any time in Settings > Security. Nothing is sent unless you say yes, and a report never includes your passwords, keys, cloud credentials or terminal output
- Fixed: if Google Play held your payment for processing - a slow card, or a cash payment - the app showed nothing at all, which looked like the purchase had failed. Settings > Subscription now says the payment is pending and that Pro will turn on by itself, so you don't buy a second time
1.11.0-rc9
- Settings > Tailscale: tapping "Authorize in Browser" now shows a "Waiting for authorization…" spinner instead of leaving the button looking untouched while you're off in the browser signing in
- Settings > Subscription: after Play's purchase sheet closes, a "Verifying your purchase…" spinner now covers the few seconds it takes to confirm the purchase server-side, instead of the row sitting unchanged with no sign anything happened
1.11.0-rc8
- Fixed: tapping Disconnect on a terminal closed the whole tab instead of just the connection, contradicting its own confirmation dialog - scrollback and the Reconnect option now stay in place as promised
- History log viewer: replaced the A-/A+ font-size buttons with pinch-to-zoom, matching the live terminal
- Fixed: a host saved with password auth and no password refused to connect with a generic error - it now asks for the password when you connect, with an optional "Save this password" checkbox (off by default)
- Fixed a small layout glitch: a divider line was cutting between "Mask sensitive data" and its description
1.11.0-rc7
- Fixed: a hardware-backed SSH key created with "Confirm with biometrics" could never connect - that option has been removed. A key created before this fix still can't connect and needs to be deleted and regenerated; Settings > SSH keys now flags it so you know which one
- Screenshots and screen recording are no longer blocked anywhere in the app (terminal, credential forms, sensitive Settings) - the previous protection got in the way more than it helped
1.11.0-rc6
- Fixed: the upgrade dialog and Settings no longer list jump hosts as a Pro feature - jump hosts are now completely free with no limits
- Settings: clarified the Pro feature list to highlight AWS, Google Cloud and Cloudflare Access connections alongside cloud backup and live AI copilot
1.11.0-rc5
- The first-time setup wizard no longer offers a Cloud Instance (AWS/GCP) option - those are Pro features that need a configured account profile, which the wizard never had a way to pick. Add an AWS or Google Cloud host from the main Add Host screen instead, where that works correctly. Standard servers and Tailscale nodes are unaffected
- Fixed: Settings > AWS, Google Cloud and Cloudflare Access now show a lock icon and a Pro upsell for a free account with no existing profile, matching Cloud backup - previously the screen itself was fully open and a real credential could be entered and saved on the free tier, even though creating a new profile was already blocked elsewhere. An account that already has a profile from before this changed keeps using it normally
1.11.0-rc4
- Fixed: "Browse Tailnet Devices" no longer tries to authorise a new tailnet node inline, which could time out, get stuck, or show an empty device list right after authorising - it now takes you to Settings to start Tailscale first if it isn't already running, then shows your real devices
1.11.0-rc3
- Fixed: adding a Tailscale host and tapping "Browse Tailnet Devices" on a tailnet you haven't authorised yet no longer sits on a spinner for 45 seconds before timing out - it now shows "Authorise in browser" as soon as it knows you need to
- Support contact moved to support@sshmanagerpro.app (security reports to security@, privacy questions to privacy@)
1.11.0-rc2
- Redesigned the free/Pro split: Direct connections, jump hosts and Tailscale are free with no limits; AWS, Google Cloud and Cloudflare Access all move to Pro, including a first account (previously only a second account per provider needed Pro)
- Any AWS, Google Cloud or Cloudflare account you already set up keeps working - this only affects adding a new one
1.11.0-rc1
- Add/Edit host is now a full screen instead of a popup, with Password/Key tabs right below Username and a clearer Connect via picker
- Jump hosts reworked: any host can be flagged "Use this host as bastion" and picked as another host's Jump host, right from Add/Edit host - the separate Jump hosts screen is gone, and existing bastions migrate automatically the first time you open the app
- A host can no longer be set up to jump through a chain of bastions - only a single hop is allowed, with a clear error if you try to combine the two
- SSH keys moved to their own screen at Settings > Security > SSH keys - import a key, generate one in this device's secure hardware, or add a security key, all from one place; deleting a key there removes it everywhere it was in use
- Fixed: scanning a QR code to add an AWS host no longer had its username silently overwritten back to ec2-user
- Fixed: opening SSH key management from Settings no longer left the app stuck with no bottom navigation bar
- Fixed: Known hosts now always shows "Jump host" for a connection that is actually going through one
- Removed the first-time setup wizard's non-functional Jump Host / Bastion option - use the redesigned bastion flow in Add/Edit host instead
1.10.0-rc8
- Fixed a memory leak affecting every dropdown menu in the app (terminal type, host pickers, the "More" menu, and others) - repeatedly opening and closing them no longer builds up retained memory over a long session
1.10.0-rc7
- Fixed: opening a file picker in the SFTP browser (upload, download, or choosing a folder) no longer triggers an unwanted PIN/biometric prompt when you return to the app
- Fixed: setting an app-lock PIN for the first time no longer crashes the app if you use the "Change PIN" button instead of the "Require Unlock" toggle
- Fixed: long-pressing a host to open its action menu now always shows every option, including Delete, without needing to scroll or drag
- Added short descriptions to every action in a host's long-press menu, and to several fields in the Add Host dialog that had none
- SFTP: added delete, rename and permissions (chmod) support
- SFTP: added an in-app activity history, visible in the History tab alongside terminal sessions
1.10.0-rc6
- Fixed: the active-session banner no longer takes up space on History, Snippets and Settings - it only shows on Hosts now
- Fixed: the terminal's back button returns to the host list instead of exiting the app
- SSH and SFTP connections now use compression, which should help on slow or high-latency links
- Fixed: Ctrl+R (reverse history search) and every other Ctrl+letter combination now work in the terminal, not just a handful
- Fixed: the on-screen Ctrl key now also works with letters typed on the system keyboard, not just the four quick-key buttons
- Fixed: recalling a shorter command from shell history no longer leaves leftover characters from the longer one on screen
- Fixed: copying a whole folder over SFTP now shows live progress in the app, not just in the notification shade
- Fixed: reconnecting to a Tailscale-connected host a second time no longer intermittently fails
- Fixed: the terminal now tells the server its real size instead of always claiming 80x24, which could garble the screen when recalling a wrapped command from history
1.10.0-rc5
- AI copilot: signed-in Google accounts get a simpler Gemini setup now - no API key, no prompt to configure, it just works
- Tailscale: the automatic OAuth sign-in added last release is back behind a developer flag while its setup gets simpler - Manual and browser sign-in work exactly as before
- Tailscale: in-memory OAuth key caching prevents redundant key minting and atomic storage prevents config corruption
- AI copilot: Custom provider now permits cleartext HTTP for local Ollama/LM Studio servers and normalizes endpoint paths
- Add/Edit host: Hostname now comes first in the form, and the optional label field (renamed Description) moved down next to Tags
- AI copilot: OpenRouter and Custom's system prompt field now shows the real default text instead of looking empty
- Fixed: the AI copilot's Gemini model name was being reported inconsistently in a couple of places
1.10.0-rc4
- AI copilot: signed-in Google accounts can now use Gemini with no API key at all
- Tailscale: add an OAuth client in Settings and every connection signs in automatically - no browser step, ever
- Host menu: a new Port Forward entry next to Files opens the Add dialog with that host already selected
- The auto-run-on-connect snippet picker now has a search field, for anyone with a large snippet library
- Fixed: the new Port Forward host-menu entry didn't actually open anything
- Fixed: the auto-run-on-connect picker no longer shows every snippet as an always-visible list of radio buttons
1.10.0-rc3
- AI copilot: a third "Custom" provider alongside Gemini and OpenRouter, for a self-hosted server (Ollama, LM Studio, llama.cpp, vLLM, etc.) - its API key is optional, since most self-hosted setups don't need one
- Port Forwards: the add/edit dialog now explains what LOCAL and REMOTE actually forward, with a worked example next to the port fields
- Fixed: a local port forward now binds only to the address you configured (127.0.0.1 by default) instead of every network interface on the phone
- Fixed: saving AI settings no longer resets your terminal theme, font size, terminal type, Developer Mode or feature flags back to their defaults
- Fixed: the SFTP browser and directory transfers no longer choke on servers that list "." and ".." as directory entries
- Screenshots and screen recording are now also blocked on the SFTP file browser, the Session History tab, and the security key enrollment dialog
- A confirmation now explains what you're opting into before enabling external session log storage
- Connecting to a host that never responds (rather than refusing) now times out after 15 seconds instead of hanging indefinitely with no way to cancel
1.10.0-rc2
- Tailscale: Settings now explains both ways to authorize the node up front - sign in via browser with no key needed, or paste a reusable auth key, with a link straight to the Tailscale admin console to get one
1.10.0-rc1
- Files: browse a host's files over SFTP from the host menu, and upload or download files and whole folders with a progress notification
- Fixed: a file transfer no longer loses its connection while the file picker is open - the Files screen now keeps the session alive the same way the terminal does
- Fixed: uploaded files keep their real names (photos and media no longer arrive as a bare document number), and the list jumps to the new file with a confirmation after each upload
- Files: a progress bar now shows during single-file uploads and downloads, and the directory-transfer notification's progress bar actually moves instead of sitting at 0%
- Files: upload several files at once with the system's multi-select picker, and long-press a remote file to select several for a batch download into one folder
- Port forwards: save reusable local or remote port forwards in Settings, and have them start automatically whenever their host connects
- Run a snippet automatically when a session connects - pick it right in the host form
- Terminal type is now configurable in Settings > Terminal & Console for servers that expect a different $TERM
- Session logs can be stored in external app storage, where a file manager or adb can reach them without root
- Screenshots and screen recording are now blocked on the terminal, credential forms and sensitive Settings screens
1.8.10
- Terminal text selection reworked: double-tap to select a word, or long-press and drag the handles to extend or shrink the selection across lines - with a precise highlight that covers exactly what is selected
- Fixed: selecting or copying terminal text no longer pops several "copied" confirmations - one copy, one confirmation
- Fixed: a tag typed into the host form is now saved when you tap Save, without needing the keyboard's Done key first
- Tailscale: tapping a host whose embedded node needs authorization now offers Authorize in Browser, Open Tailscale Settings, or Try Anyway right away, instead of a connection attempt that is doomed to wait
- Fixed: the Back button now closes the Add/Edit host form like the Cancel button, while accidental outside taps still do nothing
- Fixed: tag search and the tag filter row now behave consistently (ts hosts), and a filter drops itself when its tag no longer exists on any host
1.8.9
- New: Custom tags for hosts - add your own labels (e.g. "prod", "team-x") alongside the automatic AWS/GCP/Tailscale/key tags, with autocomplete so tag names stay consistent
- A tag filter row appears above the host list once you have more than 20 hosts, so a large fleet stays easy to narrow down
- Fixed: the QR code scanner for adding a host no longer forces the screen into landscape
- Fixed: long-pressing a word in the live terminal now selects the whole word and tracks a drag precisely, instead of the selection fighting with scrolling
1.8.8
- Fixed: AWS browser authentication and expired session renewal no longer fail with 'DNS host not found' when returning to the app
- Resilient DNS resolver with system retry, in-memory caching, and DNS-over-HTTPS fallback (Google & Cloudflare)
- Automatic OAuth token exchange retry upon returning from browser, plus manual 'Retry Token Exchange' button
- Enhanced connection and DNS resilience for Google Cloud browser login
1.8.7
- New: Terminal & Console settings - customize your terminal appearance with popular color themes
- 5 terminal themes: Modern Dark (default), Ocean Slate (Cyan), Dracula, Retro Green, and Solarized Dark
- Adjustable terminal font size stepper (10 sp to 22 sp) and extended keyboard row toggle
- Compact single-screen layout with live preview matching the app's high-density design
- Improved Tailscale tunnel lifecycle management with reliable forwarder cleanup
1.8.6
- New: Debug Log Collection in Developer Options - record a troubleshooting session covering SSH connection details, terminal output, and AWS, Google Cloud, Cloudflare, Tailscale and AI activity in one file
- Debug logs always redact passwords, private keys and cloud tokens before they are written, so sharing one with support never shares your secrets
- Recordings survive a crash: one that was cut short is offered back for sharing on the next launch, and recordings stop themselves at 10 MB or two hours
- Fixed: AI connection failures now appear in debug logs, and API keys are stripped from error messages before they are logged
1.8.5
- New: Sensitive data redaction in session logs (passwords, tokens, cloud credentials, keys, cards)
- New: Per-host session recording & privacy controls (saved sessions toggle, custom retention, masking)
- Settings: Moved About section to the top of Settings for quick access to version and release notes
- Search & Badges: Enhanced host search to find Amazon AWS instances by tag and added cloud provider badges
- Stability & Modernization: 16 KB native page alignment on Android 15 and SSHJ 0.40.0 upgrade
1.8.4
- New: In-app setup guides with step-by-step instructions and Terraform / OpenTofu blueprints for AWS Instance Connect, Google Cloud IAP, and Cloudflare
- Fixed: Eliminated Activity and Context memory leaks in terminal view during screen rotation and navigation
- Fixed: Resolved Bastion ProxyJump port forwarding listener and socket lifecycle to reliably route through jump hosts
- Fixed: Guaranteed full socket and coroutine shutdown when closing or removing active session tabs
- Under the hood: Automated CI quality gatekeeper and LeakCanary runtime detection for bulletproof stability
1.8.3
- New: Guided 4-step onboarding wizard to easily configure your first host (VPS, Tailscale, Cloud, or Jump host)
- Streamlined host creation with progressive disclosure, keeping direct SSH upfront and collapsing advanced cloud options
- Clean slate for new installs: removed seed placeholder hosts and bastions
- Enhanced host search with instant matching across alias, username, hostname, IP address, and tags
- Terminal stability: split disconnected and closed states so network drops offer immediate reconnection while preserving tabs and scrollback
- Reordered Settings menu to prioritize Account and Subscription management
1.8.2
- New: Google Cloud Browser Login - sign in with your Google account via browser and access Compute Engine VMs through IAP and OS Login without storing service account keys
- New: AWS Browser Login ('aws login') - sign in via browser with your root or IAM user to obtain short-lived STS session credentials via OAuth 2.0 PKCE + DPoP
- Flexible Cloud Profiles: keep multiple AWS and Google Cloud accounts side by side, choosing static credentials or browser login independently for each profile
- Added Google Cloud profile selector when configuring remote hosts
- Manual code and callback URL entry options for browser sign-in across emulators and remote setups
- Organized AWS SSO (IAM Identity Center) into a dedicated incubator submenu under Developer Options
1.8.0
- Added Developer Mode with 7-tap gesture unlock on version label and hidden Developer Options menu in Settings
- Introduced AWS SSO (IAM Identity Center) authentication via OAuth 2.0 Device Authorization Grant (RFC 8628) on experimental release train
- Support for short-lived STS session credentials (ASIA...) with live token countdown and one-tap re-authentication
1.7.8
- Simplified AI Copilot into a focused advisory assistant, removing mode switcher chips and auto-execution clutter
- Added 1-tap 'Insert' action to place AI suggested commands directly into the terminal prompt for review and editing before running
- Transparent provider error reporting with clear 'Fallback' badges and direct API key connection testing in Settings
- Added expert DevOps system prompt with 1-tap 'Reset Default' option in AI Copilot settings
1.7.7
- Unified command snippets into a single transparent library with instant search, full edit and delete support for all snippets
- Quick Snippets bottom sheet in the terminal now displays the entire library with real-time search filtering
- Fixed: 'Disconnect all' now closes terminal tabs and reliably saves complete session logs to History
- Fixed: resolved orphaned active session status in history after disconnects or app restarts
1.7.6
- Fixed: switching away from the terminal and unlocking with biometric or PIN no longer clears the screen or inserts blank lines
- Fixed: sessions now stay alive when the app is in the background for several minutes on Android 14 and newer
- Fixed: session logs and command output are now immediately saved to History, even if a connection drops or is interrupted in the background
1.7.5
- Fixed: a host restored from a backup made on another phone could never connect. Its saved password had been encrypted by that phone's security chip, which no other device can open - the app now notices, asks you to enter the password again, and says how many hosts need it
- Connection errors about the saved password now say what to do, instead of reporting a Keystore fault that read like the server had rejected you
1.7.4
- New: Disconnect all, on the notification. One tap ends every session and stops the embedded Tailscale node - which used to keep running after you closed every terminal, with nothing to tell you
- It disconnects but keeps your tabs and scrollback, each with a Reconnect button, so a stray tap costs a reconnect and nothing else
1.7.3
- A failed Tailscale connection now says what went wrong. It could report only "null", which was no help to anyone - the tunnel knew the reason and never passed it on
- Connection errors in general now always name something, instead of showing "null" when the failure carried no message
1.7.2
- Fixed: a session could vanish - tab, scrollback and all - after switching away from the app and unlocking with a fingerprint. A connection dropped by the phone is now kept, with a Reconnect button, and only typing exit closes a session
- Fixed: the session log setting showed a placeholder instead of the number of lines it would keep
1.7.1
- Fixed: sessions no longer die when you switch to another app and come back. Connections are held open, with your scrollback intact, and a notification shows while any session is connected
- If a connection is lost the terminal now says so and offers to reconnect, instead of looking connected and ignoring what you type
- New: Test buttons for Google Cloud, Cloudflare Access and the AI copilot, so a wrong credential is named straight away rather than failing later as a connection error
- New: import a Google Cloud service account key from a file instead of pasting 2 KB of JSON on a phone keyboard
- Known hosts now shows how each server is reached - Direct, Tailscale, jump host, AWS, Google Cloud or Cloudflare
- A Google Cloud host now asks for its zone before saving, rather than failing to connect later
- The add-host form no longer closes and loses what you typed if you tap outside it
1.7.0
- New (Pro): keep several AWS, Google Cloud or Cloudflare accounts side by side and choose which one each host uses - work and personal, or production and staging
- Your existing credentials become your first profile automatically, and nothing changes if you only use one account
- New: Settings > Known hosts shows every server fingerprint the app trusts, and lets you remove one after rebuilding a server
- The backup screen now says exactly what is and is not included - cloud credentials are never backed up, and a restore tells you which hosts still need them
- Fixed: AWS and Google Cloud hosts shared one stored server fingerprint, so connecting to a second one warned about a host key change that had not happened
1.6.2
- Fixed: AWS and Google Cloud hosts were sharing one stored server fingerprint, so connecting to a second one warned about a changed host key that had not changed. Each host is now remembered separately
- New: Settings > Known hosts lists every server fingerprint the app trusts, and lets you remove one - needed when you rebuild a server and its key legitimately changes
- Google Cloud connections are now tested end to end against a real instance
1.6.1
- Settings now always shows your subscription status, including when Pro is active
- If we cannot check your subscription - usually because you are signed out - the app says so and offers to sign you in, instead of asking you to upgrade something you already paid for
- Fixed a case where Pro could be reset to Free after updating the app
1.6.0
- You can now open more than one terminal on the same host - long-press a host and choose New session. Tabs are numbered so you can tell them apart
- Typing exit on the server now closes the session instead of leaving a dead terminal open
- The app is now called SSH Manager Pro everywhere, matching the Play listing
- Fixed: editing a jump host without a subscription no longer erases which bastion it goes through
- Fixed several leaks that built up as you opened and closed sessions
- Support address is now sshmanagerpro@gmail.com
1.5.0
- New: generate an SSH key inside the phone's security chip. The private key can never be read out, not even by this app - though it also cannot be backed up or moved to another phone
- New: sign in with a YubiKey held against the phone. The key stays on the token, so it works on any phone you tap it against
- New: reach Google Cloud VMs that have no public IP, through Identity-Aware Proxy
- New: reach hosts published behind a Cloudflare Access application, with no open SSH port
- AWS hosts now start with the ec2-user login instead of root, which is wrong on every stock EC2 image
- The three cloud options are unproven outside our own testing so far - please report anything that does not connect
1.4.0
- Adding a host now asks one question - Direct, Jump host, Tailscale or AWS - and shows only the fields that choice needs
- AWS hosts no longer ask for a password or key: Instance Connect generates one per session
- Leaving the app and unlocking no longer loses the screen you were on or the text you had typed
1.3.2
- Switching to another app and back no longer loses the screen you were on or the text you had typed - you can copy a password or key in from another app now
- AWS hosts find their own address from the instance ID, so there is no IP to keep up to date when an instance restarts
- Snippets with blanks ask for the values instead of running an incomplete command
- Fixed the last line of a saved session being cut off
1.3.1
- Snippets with blanks now ask for the values instead of running an incomplete command and failing
- Fixed the last line of a saved session being cut off at the bottom of the screen
- EC2 Instance Connect verified against a live AWS account
1.3.0
- Connect to EC2 instances without SSH keys - add AWS credentials under Settings → AWS, then set a host to EC2 Instance Connect
- Instance Connect uses a fresh key for every connection that AWS discards after a minute; nothing is stored on your phone
- Settings → AWS lists the exact IAM permissions the app needs, so you can scope them tightly
- AWS Session Manager - connecting with no open port at all - is coming for Pro
1.2.2
- Long lines are saved at their real length - a 120-character line was being stored split at the screen edge, which showed up as a break mid-word when you shrank the font
- Session output scrolls sideways for long lines; the line-wrap toggle is gone
- Fixed a strip of button drawn off the bottom of the screen when opening a past session
- Dates, hostnames and line counts on the History screen are readable - they were rendered at 1.5:1 contrast
- Dialogs and menus no longer carry a blue tint
1.2.1
- Cloud backups now restore on a different phone - saved passwords and private keys were being backed up in a form only the original device could read
- The terminal key row is off by default and no longer covers the prompt when switched on, under the terminal menu
- Fingerprint unlock prompts on its own again instead of waiting for a button press
- Restored the release notes, privacy policy, terms and licence links on the About screen
- Export session logs to a file - a single session or the whole history
- Removed the "System VPN" connection mode; it did nothing that Direct does not
- Denser history list, and it no longer shows a red button for an action that already asks first
- Dialogs and menus no longer have a blue tint against the rest of the app
- Tablet layout: lists no longer stretch the full width, so labels and their values stay together
1.2.0
- Rebuilt the interface for one-handed use: denser lists, so about twice as many hosts and snippets fit on screen
- Fixed terminal scrolling - slow drags were ignored, dragging ran opposite to flinging, and the view drifted while output arrived
- The terminal key row (Ctrl, Esc, Tab, arrows, Ctrl-C, paste) is now always visible, and Paste replaces the hide button
- The terminal now shows whether the connection is actually up, with one-tap Reconnect when it drops
- Tap a host to connect; edit, share and delete moved to a long press, and deleting asks first and can be undone
- Settings rewritten in plain language, with a light theme option under Appearance
- Dark theme by default
1.1.0
- New built-in command library: 72 snippets across Disk, Processes, Network, Containers and Performance, with the ones you use most kept at the top
- Session history now keeps the last 1000 lines per session by default, configurable under Settings → Security (0 for unlimited)
- Status labels across Hosts, History and Settings now share one style and line up consistently
- Fixed Pro features staying locked after a successful purchase until the app was reopened
- Share a host as a QR code, and scan one to add it - connection details only, never passwords or keys
- App unlock is now optional and off by default; turn it on under Settings → Security
- Fixed connections failing with a "strict KEX violation" error
- Fixed Google Sign-In when installed from Google Play
- Browse your tailnet and add a device as a host in one tap
- About screen now links to the privacy policy, terms and open source licenses
1.0.0
- First release
- SSH with an encrypted on-device vault and biometric unlock
- Embedded Tailscale node - no second VPN app needed
- Bastion / jump host support
- AI copilot that works offline, with optional Gemini or OpenRouter
- Command snippets and searchable session history