User guide

How to use SharkTTY

Everything the app does, in roughly the order you will need it: from your first SSH host to controlling the fourth display of a Mac you left at home. Written for SharkTTY on iPhone and iPad, and for the free SharkTTY Desk companion on the Mac.

No account is needed to reach your own servers. Every feature described here is free.

Part 1

The terminal

SharkTTY opens a shell on anything that runs a standard sshd — a VPS, a NAS, a Raspberry Pi, a workstation. Plain SSH needs nothing installed on the other end. Mosh and ET each need their own small server package, and both are optional.

Add your first host

Open Settings, go to the Hosts tab and tap + at the top right. A new host has four things you have to fill in and several you can ignore at first.

  • Display name, Hostname and User. The display name is only for you; leave it empty and the address is used instead.
  • SSH port. You type the number rather than clicking a stepper. Leave it at 22 unless your server listens elsewhere.
  • Authentication → Method: Password, Key, Keyboard-interactive / 2FA, or None.
  • Connection: SSH (direct) or Mosh (accelerated). You can change this later without losing anything else.

Password has two modes. Save password keeps it in this device's iOS Keychain; with sync on it follows you through iCloud Keychain, end to end, never through our server. Enter on connect stores nothing and asks each time. If your server sends its own prompts — a one-time code, a hardware token — choose Keyboard-interactive / 2FA instead: you answer the prompts at connect time and nothing is kept.

Save the host and tap it to connect. In the host list a single tap selects, a double tap connects straight away.

Already have a config file

Settings → Hosts → Import from SSH config takes a pasted ~/.ssh/config or a file you pick. It imports host aliases, addresses, usernames and ports only — never passwords or private keys. Entries using ProxyCommand are skipped, and an entry with ProxyJump is imported as a direct connection until you point it at a jump host by hand.

SSH keys that never leave the device

Keys live in the Account tab of Settings. Tap + and pick one of three routes: Generate key, Add by pasting text, or Import from file.

  • Generating: give the key a name such as id_ed25519, a comment such as me@iPhone, and an algorithm. Ed25519 is the recommended default; ECDSA and RSA are there for older servers, and generating RSA 4096 takes a few seconds on a phone.
  • Pasting or importing an existing key: if the private key is encrypted, enter its passphrase when you add it. That is used only to derive and store the matching public key on the device.
  • Installing it on the server: open the key and use Copy public key or Share public key, then add that single line to ~/.ssh/authorized_keys on the host, or hand it to whoever administers the box.

Private keys stay in the iOS Keychain. Turn Sync via iCloud on for a key and it travels through iCloud Keychain to your other devices — the same end-to-end channel Apple uses for passwords, not our servers. If you sign in to a SharkTTY cloud account, your hosts, scripts, drive mappings and templates sync, and passwords, private keys and passphrases explicitly do not.

Back in the host editor, Authentication → Method → Key lets you pick the key for that host. If the list is empty the editor says so and sends you to the Account tab first.

The first-connect fingerprint, and what to do if it changes

The first time you reach a server, SharkTTY fetches its host key and shows the SHA256 fingerprint with a Trust & connect button. Compare it against the fingerprint your server administrator published, or against what ssh-keygen -lf prints on the server itself. Once you accept it, it is recorded.

If that key ever changes, the connection stops with a warning instead of continuing. The honest reading is: the server was reinstalled or had its key rotated, or someone is sitting between you and it. Only use Trust new key & reconnect when you know which of those it is.

To deliberately re-pin a server — after a rebuild you performed yourself — open the host and use Clear recorded host key. The next connection asks you to confirm the new fingerprint from scratch.

SSH, Mosh, or ET

All three give you an interactive shell. They differ in what the server needs and in what happens when the network moves under you.

Transport Needs on the server Survives a network change Worth knowing
SSH (direct) Nothing beyond sshd No Works with any host you can already ssh into.
Mosh (accelerated) mosh-server Yes, over UDP Roams across Wi-Fi and cellular and echoes your typing locally when latency spikes.
ET (experimental) etserver, port 2022 by default Yes, over TCP For networks that block UDP outright. Off by default; turn it on in Settings first.

Mosh predicts what you type so the screen responds before the server answers. Settings → Terminal → Default prediction mode offers Adaptive, which turns prediction on only when the link is slow, plus Always and Never. Adaptive is the default and is right for almost everyone.

ET is still being tested and is off until you enable the ET (Eternal Terminal) transport in Settings. Once on, it appears as a third connection method in the host editor. One thing to plan around: like Mosh's UDP, an ET data connection goes straight from the device to the etserver port and is not forwarded through a jump host.

Coming back to a session you left

iOS suspends apps shortly after they leave the screen, so no mobile terminal can hold a TCP connection open forever. SharkTTY handles that in two layers.

  • The app keeps the last screen it saw. Reopen a dropped tab and you get that snapshot with a Reconnect button rather than an empty rectangle.
  • Mosh and ET keep the session itself alive on the server side, so a reconnect lands you exactly where you were, mid-command if that is where you left off.

The most dependable answer, on any transport, is a multiplexer on the server. Attach a connect script such as tmux new -A -s mobile and every reconnect reattaches the same session instead of starting a new shell. Scripts are covered next.

One more small thing that saves a lot of waiting: turn on Bell system notifications in Settings. When a terminal rings its bell and that session is not the one you are watching, iOS posts a notification. Append printf '\a' to a long-running command and your phone tells you when it finishes.

Scripts — the snippets you connect with

A script in SharkTTY is a block of shell text that runs in the terminal right after the connection opens. Settings → Scripts, tap +, and either start from a blank script or pick New from template.

The template picker is grouped by what people actually reconnect for:

  • Session persistence — tmux, screen and zellij, each written to reattach rather than create a duplicate.
  • System status — a system overview, or htop as a resource monitor.
  • Logs — follow the system log, or follow one file.
  • Containers — Docker containers, Compose services, container logs.
  • Services — service status and restart.
  • System updates — separate templates for Debian/Ubuntu, RHEL/Fedora, Alpine and Arch.
  • Backup — an rsync incremental backup, or running your own backup script.

Set a host's Platform and the picker narrows itself to templates that fit that machine, so you are not offered apt on an Alpine box. Edit anything a template generates, and use Save as template to keep your own version for next time.

Attach a script to a host in the host editor and it runs on every connection. Or leave the host clean and choose at connect time: in the host list, Connect with script and Connect directly are separate actions, and a double tap on a script connects with it.

Typing: the accessory bar and the floating keyboard

Above the system keyboard sits an accessory bar with the keys a terminal needs and iOS does not have: Esc, Ctrl, Tab and the arrows, plus buttons for uploading a file, showing or hiding the keyboard, and switching on the pointing device.

Settings → Keyboard → Input board switches between the system keyboard and Float, SharkTTY's own on-screen keyboard. The floating board is a full keyboard rather than a strip: symbols, Tab, Return, ⌃⌥⌘ modifiers, an fn key and the F row, laid out like a real keyboard with a two-row L-shaped Return. Drag it anywhere, resize it, and use the opacity slider in its settings popover to fade it back over the terminal — all the way to fully opaque if you would rather not see through it at all.

Layout under the same settings covers US English, UK English, Japanese (JIS), French (AZERTY), German (QWERTZ) and Spanish. A candidate strip above the keys suggests likely words and common commands as you type. The mic button in the top bar has two behaviours: tap it to switch to the voice board, or hold it to push to talk straight into the candidate strip.

Mouse reporting decides who gets your trackpad. On, clicks and drags from a connected trackpad or mouse are sent to programs that understand them — vim, tmux, htop, less. Off, the pointer selects text instead. It only makes a difference while a program has actually asked for mouse support. On iPad, external keyboards and trackpads work throughout.

Voice input, and AI that turns talk into commands

Hold the mic to talk. Recognition runs on the device: free, offline, and instant, with nothing sent anywhere. What it heard lands in the voice board as editable text, and Insert types it into the terminal.

Recordings are kept as segments, so you can trim one and re-recognize just that part instead of saying the whole thing again. History keeps past recordings for playback and another pass. On iPad the voice board floats and zooms like the transparent keyboard.

AI is optional and separate from recognition. Add a provider under Settings with your own key — the OpenAI, Claude, Gemini, Kimi and GLM API formats are supported — and set a chat model, plus a transcription model if that provider has one. Claude is chat-only and has no audio API, so recordings there fall back to on-device recognition. Provider keys stay in this device's Keychain and never sync.

With a provider connected, prompt modes rewrite what you said into clean text or a ready-to-run command, and Attach terminal context lets the model see what is on screen before it answers. The chat panel puts a conversation next to the session so you can ask a question without leaving it.

If you would rather not bring a key, official cloud models are available once you sign in to a SharkTTY account. They are paid for with Points, bought through in-app purchase and shared across your devices. On-device recognition stays free either way.

Moving files

There are two ways to get a file onto a server, and they suit different moments.

  • From inside a session: the Upload file button on the accessory bar sends a file straight to the working directory. The ceiling is 64 MB per file, and the host has to have a credential the app can reuse — a server that only logs in with a one-time code cannot be used this way.
  • From the host list: Browse files over SFTP opens a file manager on that server, with folder creation, upload, download and an overwrite confirmation when names collide.

The Files tab in Settings maps storage you can reach from the device as drives: iCloud Drive, a shared folder, an app-local folder, or a WebDAV server by URL. Once mapped, a drive is browsable in the same file manager, which is how a file gets from a NAS to a server without a laptop in between.

Several sessions on one screen

Connections open as tabs you can rename. Tile all connections shows them together; Split left/right and Split top/bottom put two side by side; Focus this connection brings one back to full size. On iPad this is the difference between watching a deploy and watching a log while a deploy runs.

Remote desktops live in the same workspace as terminals, so a Mac session and three shells can share the grid.

Reaching a host through a bastion

Set Jump host (ProxyJump) in the host editor to connect to the bastion first and reach the real host through it. The jump host authenticates with its own saved key or password, non-interactively; a bastion that requires keyboard-interactive login is not supported yet.

Only the SSH connection travels through the jump host. Mosh's UDP and ET's data connection go directly from the device to the target, which is worth checking before you rely on either from outside the network.

Part 2

Your Mac's desktop, on your phone

The second half of SharkTTY is a full remote desktop for a Mac. It needs one free companion app on the Mac — SharkTTY Desk — and no port forwarding, no VPN and no router configuration at all.

Install SharkTTY Desk on the Mac

SharkTTY Desk is free and runs on macOS 14 Sonoma or later on an Apple Silicon Mac (M1 or newer). Download the disk image from the Mac app page, drag SharkTTY Desk into Applications and open it. It has no Dock icon; it sits in the menu bar with a window you can open from there.

Two permissions are needed on first run, and the app's panel links straight to the right pane of System Settings → Privacy & Security:

  • Screen Recording — required, this is what captures the display.
  • Accessibility — only for moving the pointer and typing. Turn Allow control off and you can skip it, which gives you a view-only Mac.
The SharkTTY Desk window on macOS, showing connections, control mode and viewer approval

Check versions before you start. SharkTTY Desk 0.9.0 needs SharkTTY 1.6 or later on the iPhone or iPad, and two-way audio needs 1.7 or later. If you cannot update the app yet, the older SharkTTY Desk 0.5.0 build still works with pre-1.6 apps.

Pair the Mac with the app

In SharkTTY on the iPhone or iPad, tap + and choose Add remote desktop. There are three ways to fill it in:

  • Sign in to the same SharkTTY account on both ends and the Mac appears in the list by itself.
  • Scan the pairing QR code from the Desk panel with the app's scanner.
  • Copy the deskpair string from the Desk panel and paste it. It carries the access token and is stored in the Keychain.

Give the desktop a name you will recognise, then Save & Connect. If the Mac is set to ask before letting anyone in, the app waits while the person at the Mac taps Allow.

Someone can also share a Mac with you by link. Shared desks appear under Shared with Me once you are signed in. A share can be view-only, can expire, can be revoked at any time, can cap how many people connect at once, and can be limited to particular accounts.

Every display at once, arranged your way

A Mac with several monitors sends all of them. Arrange screens sets the layout — Side by side, Stacked, Quad, or Picture-in-picture — and you can reorder the displays so they match how they sit on your desk. Each display streams on demand, which is what keeps a three-monitor Mac usable on a phone.

Four Mac screens on an iPad in a quad layout, with the layout picker, the magnifier and the xHD, HD and SD quality tiers

Tap a screen to take control of it; switching displays re-points typing and pointer input at the new one. Focus enlarges a single display when you want the detail. In adjust mode you can drag the picture to reposition it and pinch to zoom.

Touch, the virtual mouse and the magnifier

Direct touch is the quickest way in: one finger glides the pointer without clicking, and a second finger clicks where it is. A two-finger tap is a right click.

For precise work there is a virtual mouse with left, middle and right buttons: press and hold to lock a drag, and there is a wheel gesture for scrolling. The buttons can be docked into a single panel along the bottom of the screen that slides left or right to wherever your hand rests, and rides up above the on-screen keyboard when one is open.

The magnifier shows the area under your fingertip at native resolution, which is how you hit a checkbox in a preferences window from a phone. With the mouse buttons docked it sits directly above the cursor instead of drifting toward a screen edge. ⌘, ⌥ and ⌃ behave as one-shot modifiers: tap one, then tap the key it applies to.

Keyboard and macOS shortcuts

One keyboard button with a mode dropdown switches between SharkTTY's floating keyboard and the system keyboard with a shortcut toolbar. The floating board carries the modifiers and F-keys that macOS expects and iOS does not offer.

A quick-actions menu sends the shortcuts that are awkward to type: Spotlight search, Mission Control, App windows and Switch app; Tile left, Tile right, Fill, Center, Minimize and Hide app; Close window, Quit app and Force Quit; area and full-screen screenshots; and Lock screen. The clipboard syncs both ways, so you can copy on the Mac and paste on the phone.

Picture quality on a bad connection

The video is hardware-encoded H.264 captured with ScreenCaptureKit, and the client picks the tier: xHD renders the Mac's native pixels, HD and Standard trade sharpness for bandwidth, and Smooth favours frame rate over everything else.

Leave Auto-reduce on weak link on and the session steps down on its own when the network dips, then holds there rather than stuttering. On the same Wi-Fi as the Mac, xHD is usually fine.

Sound in both directions

Remote audio brings the Mac's system sound to the device, so a video or a call on the Mac is audible in your hand. Microphone input goes the other way and turns the iPhone or iPad into the Mac's microphone, which covers calls, recordings and dictation made on the Mac while you are not at it.

Both directions need SharkTTY 1.7 or later on the device. The audio itself is carried as Opus.

A Mac with no screen, or a locked one

Virtual display, still in beta, creates an extra headless screen sized to your iPad. It is the answer for a Mac mini with no monitor, and for carrying a second workspace around.

Desk can wake a sleeping Mac over the network and keep it awake while you are connected. It can also, if you allow it, show the macOS login window so you can type your password and unlock the machine remotely after a reboot.

How the connection actually gets there

Both ends dial out, so there is never a port to open on a router. What differs is the path they meet on.

  • On the same network, the Mac and the device connect directly over QUIC. Lowest latency, nothing in between.
  • Across networks, the session goes through a relay — with a WebSocket-over-443 fallback for hotel and office Wi-Fi that blocks everything else.

Sessions are end-to-end encrypted and a relay only ever forwards ciphertext. On a local network several iPhones and iPads can view and control the same Mac at once; the Mac can require approval for each new viewer and can kick any of them off with a tap.

If you would rather not touch anyone else's servers, the relay is open source. Run desk-relay on any public box: it listens for QUIC on the address you pass to --bind and serves the WebSocket fallback on --wss-bind, and link creation is protected by a shared secret you choose. Point SharkTTY Desk at that address, scan the relay link it then shows, and you are the only party the traffic passes through. No SharkTTY account is involved.

Tips & troubleshooting

When something does not work

Mosh says mosh-server could not be started

Either mosh is not installed on the server, or it is not on the PATH that a non-interactive SSH login gets. Install mosh, or set that host's absolute mosh-server path in Settings → Hosts — /usr/bin/mosh-server on most Linux boxes, /opt/homebrew/bin/mosh-server on an Apple Silicon Mac.

ET registration failed

etterminal is missing on the remote, or is not on the PATH for a non-interactive SSH session. Install Eternal Terminal there (apt install et, brew install et), confirm etserver is running and its port — 2022 unless you changed it — is not blocked by a firewall, then retry. SSH and Mosh keep working meanwhile.

The host key changed and the app refuses to connect

That is the check doing its job. A legitimate cause is a rebuilt server or a rotated key; the illegitimate one is somebody in the middle. Find out which before you tap Trust new key & reconnect, and if you rebuilt the machine yourself, Clear recorded host key in the host editor and confirm the new fingerprint deliberately.

A file will not upload from the terminal

Two limits apply. Files are capped at 64 MB, and the host needs a credential the app can reuse — a server whose only login is a one-time code cannot be used for uploads. Use the SFTP file manager, or a mapped drive, for anything larger or fussier.

The app cannot find my Mac

Check that SharkTTY Desk is actually running on it and not merely installed. If the Mac may be asleep, enable waking it over the network in Desk. Across networks, a connection can take a few seconds while the app tries a direct path before falling back to a relay.

The Mac's screen is black, or nothing responds to touch

A black picture almost always means Screen Recording was not granted; an unresponsive picture means Accessibility was not, or Allow control is off. Both live in System Settings → Privacy & Security on the Mac, and Desk links straight to them.

The Mac does not appear in the app at all

Check versions: SharkTTY Desk 0.9.0 needs SharkTTY 1.6 or later on the phone or tablet. Update from the App Store, or install the older SharkTTY Desk 0.5.0 build, which works with earlier app versions.

What actually costs money

Nothing you need. The app, the Mac companion, on-device voice recognition and every feature above are free, and connecting to your own servers does not require an account. Official cloud AI models are paid for with Points; using your own provider key costs nothing. Tips are optional, one-time or monthly, and unlock no features — a monthly tip renews until you cancel it in your Apple Account settings.

Ready to set it up

SharkTTY is free on the App Store, and SharkTTY Desk for Mac is a free download.

More detail on the Mac side lives on the SharkTTY Desk page and questions are answered fastest on the feedback board.