TideFTP · Terminal file transfer client

FileZilla's layout, lftp's muscle.

SFTP, FTP and FTPS over one set of keys, in a terminal that is pleasant to live in.

tideftpGo + Bubble Tea
TideFTP running in a terminal
TideFTPj/k navigate   Tab panes   ? help

Real app. Real terminal screenshot.

A polished two-pane transfer client for the terminal is a niche almost nobody occupies.

Most "TUI FTP" is a file manager with a protocol layer bolted on, or a scriptable CLI with no interface at all. TideFTP is the part in between: the queue, the progress and the conflict prompts, on screen. The same binary also runs headless for scripts.

The whole client

At the keyboard.

01 / FEATURES
u

A real transfer queue

Parallel transfers, per-file and overall throughput, a live ETA, retry and cancel per row. Interrupted transfers resume from the byte they stopped at.

M

Directory mirror

Walks both trees, queues only what's missing or changed, and shows a new, updated and unchanged plan first. Prune is one keystroke, and opt-in.

v

Preview without downloading

The first 128 KB as syntax-highlighted text, or a hexdump for binaries. It never pulls the whole file.

e

Edit in place

Checks a file out to a temp copy, opens your editor, and writes it back if you changed it. Either pane.

Everything else, keyboard first

Move

  • Conflict policiesOverwrite if newer, if a different size, resume, rename or skip. Apply to one, apply to all, or remember it for the session.
  • Resume, not restartAn interrupted transfer picks up where it stopped, on both ends.

Inspect

  • Filter and sort / sType to narrow a listing by glob or substring. Cycle sort by name, size, date or type, per pane.
  • Change permissions mAn octal prompt pre-filled with the current mode, echoing back the rw-r--r-- it decodes to. Local and SFTP.

Keep it safe

  • Post-transfer verifyOpt in, and every completed transfer is re-read on both ends and compared by SHA-256.
  • Strict host keysChecked against known_hosts by default, with an explicit trust-once or trust-and-remember prompt. No silent accept.
  • Passwords never in argvRead from the environment or typed into the form, so a flag never leaves the secret in the process table.
  • Auto-reconnectRedials after an unrequested drop, backing off 2, 4, 8, 15, then 30 seconds, and puts you back in your directory.

In the terminal

Two panes, one queue.

Local on the left, remote on the right, transfers underneath. Here with the theme picker open.

TideFTP with a theme picker open over local and remote file panes and a transfer graph

Different where it counts

An honest read against the tools people reach for now.

CapabilityTideFTPlftpmcFileZilla
Two-pane visual UI●○●●
Transfer queue with conflict policies●◐○●
Directory mirror with pre-flight plan●●○●
Streaming preview and in-place edit●○◐○
Runs in a terminal, over SSH●●●○
Scriptable and headless●●◐○
Cloud storage backends○○○○

● full   ◐ partial   ○ none. For S3 and GCS reach for rclone.

Scripting, next to lftp

The same binary runs without the interface. Every row below is exercised by tests against real in-process SFTP and FTP servers.

CapabilityTideFTPlftp
get, put, rm, mv, globs, resume (-c)●●
Mirror: delete, filters, dry-run, parallel●●
Bandwidth limit●●
Auto-reconnect that resumes mid-file●●
Segmented download (pget)●●
Scripts over one connection, aliases, settings●●
Background jobs and queue●●
Symlinks◐●
HTTP, HTTPS, FISH, BitTorrent○●
Proxy support○●

Before you install

What it isn't, yet

Get started

Two minutes to your first transfer.

FTP and FTPS read the password from TIDEFTP_FTP_PASSWORD. SFTP uses your agent and ~/.ssh keys. To build from source instead, you need Go 1.26 or newer.

One line

curl -fsSL https://raw.githubusercontent.com/allisonhere/TideFTP/main/install.sh | sh

Then connect

tideftp --host files.example.com --user deploy --path /var/www

Or script it

tideftp sync --dry-run ./site prod:/var/www