Solving Session Persistence for Mobile SSH with tmux and zellij
Why SSH reconnect is not enough — and how multiplexers fix mobile instability.
1. Introduction - Mobile Is Not Stable
Mobile environments are inherently unreliable. SSH is not. On iPad, the app can be suspended in the background, the network can switch between Wi-Fi and cellular, and the underlying TCP connection can be dropped at any time.
When that happens, your login shell receives hangup semantics, interactive state is lost, and any process still tied to that shell may disappear. This is why mobile SSH feels fragile even when the server itself is perfectly stable.
2. Why SSH Reconnect Is an Illusion
2.1 SSH Lifecycle
An SSH channel is bound to a shell process. If TCP breaks, the channel closes, and the shell can receive
SIGHUP. Reconnecting creates a new SSH channel and usually a new login shell.
2.2 Example: What Actually Happens
sleep 600
Lock the screen, trigger disconnect, then reconnect. The sleep process is gone, because it was
attached to the previous shell lifecycle.
Reconnect without a session layer is just a new shell.
3. The Missing Layer: Session Multiplexers
SSH is transport. tmux and zellij are session layers. They keep your process tree and
terminal state alive independently from any single SSH connection.
SSH transports input and output. tmux and zellij preserve process state.
4. How tmux Solves It
4.1 Session Decoupling
tmux runs a server process on the remote host. Your shell and panes live under that server, not
under one SSH channel.
4.2 Attach Pattern
tmux new -As main -A means attach if the session exists. -s sets the session name. This pattern creates
or reuses a stable workspace automatically.
4.3 What Survives Disconnect
- long-running processes
- editors
- build jobs
- logs
5. How zellij Solves It
5.1 Conceptual Difference
zellij uses a workspace model and supports create-if-missing attach behavior with one command.
zellij attach -c 5.2 Why It Works Well for Mobile
- automatic session reuse
- layout memory
- process isolation
6. Architecture for Mobile SSH Clients
6.1 Required Capabilities
A mobile SSH client truly supports session persistence only if it can:
- detect EOF reliably
- understand multiplexer mode
- attach instead of spawning a new login shell
- avoid injecting visible commands into user history
- preserve PTY size and resize events
- handle reconnect backoff
6.2 What Not To Do
- blind reconnect
- spawn a new shell each time
- inject visible attach commands
- break an existing pane/layout state
7. Minimal Server Setup
The following commands assume a typical Linux server (Ubuntu/Debian). Adapt for your distribution if needed.
7.1 Install tmux
sudo apt install tmux
tmux -V 7.2 Install zellij
sudo apt install zellij
# or install from the official release binary 7.3 Recommended Attach Pattern
tmux new -As main
# or
zellij attach -c 8. Beyond Multiplexers: Making It Seamless on Mobile
Modern mobile SSH tools can make persistence feel native by:
- automatically attaching to known sessions
- detecting multiplexer environments
- restoring tab selection
- avoiding visible shell prompt flashes
- preserving continuity across reconnects
In NeoShell, this behavior is available under Workspace → Session Persistence mode. Once configured, reconnecting becomes a transport recovery event, not a session reset.
9. Conclusion
Mobile networks are unstable. Your session state does not have to be. Once you add a real session layer, reconnects stop being destructive and become routine transport recovery.