Skip to main content

Peer-to-peer file and directory transfer system

Project description

FTS

FTS (File Transfer System) is a lightweight CLI tool for file transfers, chatrooms, and more. It’s designed for fast local-network sharing, simple chat creation, and utility management in a single binary.

[!CAUTION] FTS should NEVER be run on a public network without permission from the proper authorities; there are safeguards in place to prevent fts from running on public networks


Features

  • Fast local-network file transfers (files or directories)
  • Lightweight chatrooms for easy communication
  • Discover and manage libraries for easy file sharing
  • Aliases and default settings for quick operations
  • Progress bars, rate limiting, and background servers
  • Security via trusted connections and public-network safeguards
  • Uses TLS to prevent man in the middle attacks
  • Library does not expose the computers actual file system in anyway

[!IMPORTANT] FTS has currently only been tested on Windows. Other operating systems may not be supported.


Table of Contents


Installation

Install FTS globally using pip:

pip install fts-tool

To uninstall:

pip uninstall fts-tool

[!WARNING] Python must be installed and added to your system PATH to run fts from the terminal.


Usage

fts  [--logfile FILE] [-q] [-v] COMMAND [OPTIONS]

Run fts -h to see all global options. Each command has its own -h/--help flag.

[!CAUTION] FTS is executed as fts in the terminal, but the pip package is named fts-tool.


Example Use

# Start server
fts open downloads --progress

# Send a file
fts send C:\Users\Public\Pictures\family_photo.png 192.168.1.42 --progress

One computer opens the sever and the other sends the file


Project State

FTS development is temporarily slowed but will resume in 2–4 weeks. The project is very much alive.

Upcoming Features

  • Address any remaining issues in the current Windows build.
  • Include troubleshooting tips (e.g., firewall or network issues).
  • Support for common Linux systems.
  • Limit FTS usage on public networks instead of disabling it entirely.
  • Improve support for directory aliases in the GUI.
  • Implement file checksums to detect corrupted transfers.
  • Add scheduled or automated file transfers.
  • Enable transfer resuming for interrupted downloads.
  • Allow third-party extensions (e.g., custom compressors, encryption layers, notifications).

Contributing

Pull requests are welcome! For major changes, please open an issue first to discuss what you’d like to change.


License

MIT


Commands

open

Start a server and listen for incoming transfers.

fts open OUTPUT_PATH [OPTIONS]

Arguments:

  • OUTPUT_PATH — Directory to save incoming transfers (required)

Options:

  • -d, --detached — Run server in the background
  • -l, --limit SIZE — Transfer rate limit (e.g. 500KB, 2MB, 1GB)
  • -x, --extract — Automatically extract transferred archives
  • --progress — Show progress bars during operations
  • -p, --port PORT — Override port used (0-65535)
  • --ip ADDR — Restrict requests to IP or hostname

send

Send a file to a target host.

fts send PATH IP [OPTIONS]

Arguments:

  • PATH — File to send (required)
  • IP — Target IP or hostname (required)

Options:

  • -n, --name NAME — Send file under a different name
  • -p, --port PORT — Override port used (0-65535)
  • -l, --limit SIZE — Transfer rate limit Transfer rate limit (e.g. 500KB, 2MB, 1GB)
  • --nocompress — Skip compression (faster, larger transfers)
  • --progress — Show progress bars

[!NOTE] FTS automatically skips compression for files that are already compressed. Enable this option only if FTS still attempts to compress such files.


send-dir

Send a directory recursively.

fts send-dir PATH IP [OPTIONS]

Arguments:

  • PATH — Directory to send (required)
  • IP — Target IP or hostname (required)

Options:

  • -n, --name NAME — Send directory under a different name
  • -p, --port PORT — Override port used (0-65535)
  • -l, --limit SIZE — Transfer rate limit Transfer rate limit (e.g. 500KB, 2MB, 1GB)
  • --pyzip — Use Python’s built-in compression instead of OS-level compression
  • --progress — Show progress bars

[!WARNING] The target directory will rezip after every send request; If this becomes a problem, it is recommended to pre-zip directories.


close

Close a detached server.

fts close PROCESS

Arguments:

  • PROCESS — One of all, receiving, or library

version

Displays the FTS version

fts version

trust

Trust an IP certificate, if a certificate has changed.

fts trust IP

Arguments:

  • IP — IP address whose certificate should be trusted

chat-create

Create a new chatroom.

fts chat-create NAME [OPTIONS]

Arguments:

  • NAME — Your username (required)

Options:

  • -p, --port PORT — Override port

chat-join

Join an existing chatroom.

fts chat-join NAME IP [OPTIONS]

Arguments:

  • NAME — Your username (required)
  • IP — IP to join (required)

Options:

  • -p, --port PORT — Override port

library

Download and manage local file directories.

fts library TASK [OPTIONS]

Arguments:

  • TASK — One of find, open, manage
  • OUTPUT_PATH — Directory for incoming transfers (required for find)

Options:

  • -d, --detached — Run library server in the background (open only)

[!TIP] The find command will automatically find open libraries on your local network


alias

Manage aliases.

fts alias ACTION [ARGS]

Arguments:

  • ACTION — One of add, remove, list
  • NAME — Alias name (required for add/remove)
  • VALUE — Alias value (required for add)
  • TYPE — One of ip or dir (required for add)

[!NOTE]
Directory aliases are not supported when selecting commands in the gui


defaults

Manage default settings.

fts defaults [OUTPUT_PATH]

Arguments:

  • OUTPUT_PATH — Directory to save incoming transfers

[!NOTE]
Saved defaults exist even if they don’t appear in the GUI. Leaving the argument blank will use your default values.


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

fts_tool-2.0.0a2.tar.gz (41.0 kB view details)

Uploaded Source

Built Distribution

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

fts_tool-2.0.0a2-py3-none-any.whl (45.4 kB view details)

Uploaded Python 3

File details

Details for the file fts_tool-2.0.0a2.tar.gz.

File metadata

  • Download URL: fts_tool-2.0.0a2.tar.gz
  • Upload date:
  • Size: 41.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fts_tool-2.0.0a2.tar.gz
Algorithm Hash digest
SHA256 9b50009e624c8fdaaa20802ec7a7c37c6498b97e0430eed5081109921f43ab3f
MD5 aa98fa9ed6e66b3bb9bb38b5af831516
BLAKE2b-256 b08b3019f8ff7d2f3b63d72ee0ed3700053c6621a076fc99976b13fd9e0f126a

See more details on using hashes here.

File details

Details for the file fts_tool-2.0.0a2-py3-none-any.whl.

File metadata

  • Download URL: fts_tool-2.0.0a2-py3-none-any.whl
  • Upload date:
  • Size: 45.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.7

File hashes

Hashes for fts_tool-2.0.0a2-py3-none-any.whl
Algorithm Hash digest
SHA256 38ace7f554523873d5e743641df08779fc1f857f4b9e6ed297fd4730851dd33c
MD5 633752487457940adac711e6888818e8
BLAKE2b-256 0b8fee372306bde2eff7412c261ed131d97085f9444dc5e40aa1fd0fdb296ee1

See more details on using hashes here.

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