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.0a1.tar.gz (33.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.0a1-py3-none-any.whl (35.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: fts_tool-2.0.0a1.tar.gz
  • Upload date:
  • Size: 33.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.0a1.tar.gz
Algorithm Hash digest
SHA256 e6c7ba3541063991d46f7be6880eb9ceae8817f86f20bd3e6ce27b398a053bb0
MD5 f9d8194ea8626696702765a4b22a8323
BLAKE2b-256 065df974a11f170e74b1ceb1e27743405f2105736c9ee408dd9ef333fde82704

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fts_tool-2.0.0a1-py3-none-any.whl
  • Upload date:
  • Size: 35.1 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.0a1-py3-none-any.whl
Algorithm Hash digest
SHA256 97bc64863c3b18b9c802ce1d60b587bf96b47935b7998e49a895313876b83b14
MD5 d21fe37c91b725b6ba199e9f4380dfa3
BLAKE2b-256 0ed66610604532f615ee0a819a9dd7ff5706b4dcabd76951a35362607036848f

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