Skip to main content

Keyboard-driven TUI browser for remote SSH/SFTP downloads

Project description

SCP Browser TUI

License: MIT Python 3.11+ Platform UI SSH Install with pipx

scp-browser-tui is a keyboard-driven terminal file browser for downloading files from remote Linux systems over SSH/SFTP. It uses Textual for the interface, Paramiko for SSH/SFTP operations, and keyring for password storage when available.

Features

  • Connection screen for creating, editing, deleting, and reusing saved profiles
  • Password and SSH key authentication with keyring-backed secret storage where available
  • Two-pane local and remote file browser with keyboard navigation
  • Live preview panel for the currently highlighted local or remote item
  • File metadata display: name, type, size, modified time
  • Download of files and directories
  • Upload of local files and directories into the current remote folder
  • Queued upload and download progress with overall progress feedback
  • Safe remote rename, move, mkdir, and delete operations
  • Auto-rename handling for local and remote name conflicts
  • Local and remote pane filtering
  • Hidden-file toggle and sort cycling
  • Per-profile last visited remote path and default local download directory

Screenshots

Connection Screen

Connection screen

Connection Screen Variant

Connection screen variant

File Browser

File browser

Project Layout

ftransfer/
├── CHANGELOG.md
├── README.md
├── requirements.txt
├── pyproject.toml
├── ftransfer.cmd
├── ftransfer.ps1
├── examples/
│   └── profiles.example.json
└── src/
    └── scp_browser/
        ├── __init__.py
        ├── __main__.py
        ├── app.py
        ├── config.py
        ├── download_manager.py
        ├── models.py
        ├── profile_manager.py
        ├── secrets.py
        ├── ssh_client.py
        └── screens.py

Installation

  1. Create and activate a virtual environment.
  2. Install dependencies:
pip install -r requirements.txt

To install the ftransfer command:

pip install -e .

One-Command Install

Recommended with pipx:

pipx install git+https://github.com/patchharris/ftransfer.git

Fallback with pip:

pip install "scp-browser-tui @ git+https://github.com/patchharris/ftransfer.git"

Run

From the project root:

PYTHONPATH=src python -m scp_browser

Windows PowerShell:

$env:PYTHONPATH="src"
python -m scp_browser

Linux / macOS:

export PYTHONPATH=src
python -m scp_browser

After pip install -e ., you can launch it directly with:

ftransfer

From this repo folder on Windows, you can also use:

.\ftransfer.ps1

Linux example:

git clone https://github.com/patchharris/ftransfer.git
cd ftransfer
python3 -m venv .venv
source .venv/bin/activate
pip install -e .
ftransfer

Keyboard Shortcuts

Connection screen

  • Tab / Shift+Tab: move between fields
  • Ctrl+S: save profile
  • Ctrl+N: clear form for a new profile
  • Delete: delete selected profile
  • F5: connect with current form values
  • Enter: submit a form field and connect
  • F1: open the in-app changelog/about screen
  • q: quit

Connection form notes:

  • Use the Password / SSH Key toggle buttons to choose auth mode
  • password field is also used for an SSH key passphrase
  • key path is required when auth type is key

Browser screen

  • Tab: switch between local and remote panes
  • Enter: open selected directory in the active pane
  • Backspace or h: go to parent directory in the active pane
  • p: toggle the preview panel
  • /: set or clear a filter for the active pane
  • r: refresh both panes
  • .: toggle hidden files
  • s: cycle sort order
  • F1: open the in-app changelog/about screen
  • q: disconnect and return to the connection screen

Remote pane actions

  • Space: toggle multi-select
  • d: download selected items, or current item if none are marked
  • m: create a remote directory in the current remote folder
  • v: move the selected remote item to a new name or path
  • n: rename selected remote item
  • x: delete selected remote item

Delete confirmation:

  • file delete: type y and press Enter
  • directory delete: type delete and press Enter

Local pane actions

  • u: upload selected local file or directory into the current remote folder

Preview panel:

  • Updates automatically as you move through either pane
  • Shows metadata for files and directories
  • Shows a small text preview for UTF-8 text files
  • Marks binary files and truncated previews clearly

Profiles and Secrets

Profiles are stored as JSON in the per-user config directory:

  • Linux: ~/.config/scp-browser-tui/profiles.json
  • Windows: %APPDATA%\scp-browser-tui\profiles.json

Passwords are not written into profiles.json. The app stores them in the system keyring under the scp-browser-tui service name when the keyring backend is available. If keyring is unavailable, the password field remains session-only and the secret handling is isolated in src/scp_browser/secrets.py.

Example Profile File

See examples/profiles.example.json.

Notes

  • The app uses SFTP for directory browsing and downloads. It does not shell out to scp.
  • It targets Python 3.11+.
  • The browser is now two-pane: local on the left, remote on the right.
  • If a destination name already exists, uploads and downloads auto-rename rather than prompting.
  • Transfers now run through a file queue and show overall progress across multi-file operations.

Future Enhancements

  • Search within the current directory
  • Remote folder bookmarks
  • Local destination picker with bookmarks/history
  • Host key verification management UI

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

scp_browser_tui-0.2.1.tar.gz (22.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

scp_browser_tui-0.2.1-py3-none-any.whl (23.1 kB view details)

Uploaded Python 3

File details

Details for the file scp_browser_tui-0.2.1.tar.gz.

File metadata

  • Download URL: scp_browser_tui-0.2.1.tar.gz
  • Upload date:
  • Size: 22.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for scp_browser_tui-0.2.1.tar.gz
Algorithm Hash digest
SHA256 887c1b13763a8ceadc6d51bd84c1cf19dc450d8601b7d13a05156cbdefcf5ee5
MD5 7c9ea29c97e02de7e2ee813d76e2e1ee
BLAKE2b-256 8b9c31c6d58d7f56483c881c08c57be4171adb7ed714e6a54f41f74f5e13f17c

See more details on using hashes here.

Provenance

The following attestation bundles were made for scp_browser_tui-0.2.1.tar.gz:

Publisher: publish.yml on patchharris/ftransfer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file scp_browser_tui-0.2.1-py3-none-any.whl.

File metadata

File hashes

Hashes for scp_browser_tui-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 14e8e91ebc0155ebdf41f7e3a8d7b408633a269500bce8afddb334aa9b2c3c71
MD5 0e8d212aa57fc3f48a63052231b45767
BLAKE2b-256 d7929291d3d6ba4af1b95efe1f0d30e7d28bb4232cf9c736cc6fa49dfe5b3158

See more details on using hashes here.

Provenance

The following attestation bundles were made for scp_browser_tui-0.2.1-py3-none-any.whl:

Publisher: publish.yml on patchharris/ftransfer

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page