Already in a remote directory and need to upload a configuration file or bring a log back to your device? NeoServer’s native ZMODEM implementation lets you transfer files inside the SSH terminal: run rz to upload, or sz to download. A transfer panel handles file selection, progress, receive confirmation, and cancellation.
iOS and macOS support
The workflow below uses NeoServer’s iOS terminal, including the iOS-based app on macOS. The separate native macOS terminal does not yet have this ZMODEM integration in the current implementation. On a Mac, check which edition you are using before trying the commands.
Here, native ZMODEM means that the transfer protocol is implemented directly in Swift, including framing, CRC verification, and retransmission. No browser extension or JavaScript transfer bridge is needed.
Prepare the remote server
Use an SSH terminal connection and make sure the remote machine provides rz and sz. The lrzsz project supplies command-line implementations of the transfer protocols. Check the commands in your remote shell:
command -v rz
command -v sz
If either command is missing, install your server distribution’s lrzsz package or ask the server administrator to provide it. NeoServer handles the client side; the remote machine still needs the matching sender or receiver.
Start with a direct SSH shell. Mosh connections do not carry the raw terminal byte stream required by this integration. If you use tmux, screen, or zellij, that intermediate layer must also pass ZMODEM traffic through correctly.
Upload files with rz
rz means the remote machine receives files. From your device’s point of view, this is an upload.
- In the remote terminal, change to the destination directory and check it with
pwd. - Run
rz. - NeoServer opens its ZMODEM panel. Select Choose Files and pick one or more local files.
- Watch the progress and wait for completion before returning to normal terminal work.
cd ~/uploads
pwd
rz
The destination directory must already exist and be writable by your SSH account. The files are sent to the receiver running in that directory. If a file with the same name already exists remotely, the remote receiver’s options determine how it handles that conflict.
NeoServer prepares local copies of selected upload files and streams them in chunks. Temporary upload copies are cleaned up when the transfer completes, is cancelled, or disconnects.
Download files with sz
sz makes the remote machine send files to NeoServer. Pass one or more remote file paths:
sz server.log
For several files, list them together. Quote paths containing spaces:
sz server.log report.json "build output.txt"
NeoServer presents each incoming file for confirmation. Choose Receive File to accept it, or Skip File to leave it out of the batch. Received files appear in the panel’s Received Files section; use Save to Files to export the completed files to your chosen location.
On iOS, completed downloads are also available in NeoServer’s ZMODEM folder in the Files app. Each received file is stored in its own directory, so separate downloads do not overwrite one another in local storage.
CRC checks and incomplete files
ZMODEM adds integrity checks to its transfer frames and data blocks. For a protocol-level explanation, see Tera Term’s ZMODEM documentation.
NeoServer accepts incoming Hex, Binary16, and Binary32 frames, with CRC16 or CRC32 verification as appropriate. Uploads use CRC16. A checksum error can trigger a retry or retransmission from an offset during the current transfer session.
Downloads are written to a temporary .partial file. NeoServer only moves the download to its final filename after the transfer checks pass, including the expected length when the sender provides it. Cancelled, failed, or disconnected transfers remove unfinished download files; files already completed remain available.
CRC detects transfer corruption; it does not establish who created a file. If you need an independent end-to-end check, compare a cryptographic hash of the source and received file using tools available on both machines.
Cancel, retry, and transfer limits
During a transfer, NeoServer blocks ordinary terminal keyboard input to avoid mixing keystrokes with protocol data. Use Cancel in the ZMODEM panel to stop the transfer.
Keep these limits in mind:
- Files only. Directory transfer is not supported. Archive a directory first, then send the archive as a file.
- Single-file size: at most 4,294,967,295 bytes, or 4 GiB minus one byte.
- Retries belong to the current session. NeoServer does not save resume state across disconnected connections. Reconnect and start a new transfer if the connection is lost.
- Use SSH. This integration does not work through the Mosh terminal path or a 7-bit transport.
If rz or sz does not open the transfer panel
First confirm that the command exists on the remote machine and that you are using the supported NeoServer terminal edition. Then try the same command in a direct SSH shell outside any terminal multiplexer.
For uploads, check the remote destination directory and account permissions. For downloads, check the source path and read permission. If a transfer starts but cannot finish, use the panel’s error message and retry after checking the connection, file size, and local storage space.
ZMODEM is useful when you want to move files from the directory where you are already working. NeoServer’s SFTP tools remain useful for browsing remote folders and managing files visually. For the initial SSH connection, see the NeoServer quick start.
Ready to try it?
NeoServer · SSH, Mosh, Docker & SFTP client for iPhone, iPad and Mac
Free on the App Store