Skip to main content

Cross-platform file sharing via QR code. Defaults to account-free SSH tunneling on Linux/macOS.

Project description

QRTunnel

Cross-platform file sharing via SSH reverse tunneling and QR codes. Allows sharing files with mobile devices anywhere in the world, even behind NAT/firewalls.

Now featuring a new interactive Terminal User Interface (TUI) for easier navigation!

Features

  • Interactive TUI: A beautiful, easy-to-use terminal interface to select files, choose modes, and configure ports using arrow keys.
  • Simple File Sharing: Share one or more files directly from your command line.
  • Receive Files: Start in upload mode to receive files from any device with a web browser.
  • Smart Mode: Automatically provides both a global Internet link and a high-speed LAN link. The client device auto-detects if it's on the same Wi-Fi and switches to maximum speed.
  • High-Speed LAN Sharing: Use the --lan flag (or select LAN in TUI) to share files directly over your local network, keeping data private and fast.
  • LAN Security (OTP): High-speed LAN transfers are protected by a random 6-digit passcode displayed only on your terminal.
  • Randomized & Custom Ports: Defaults to a random port (20000-60000) for security, or choose your own custom port.
  • Secure Tunnels: Supports both SSH Tunneling (default on Linux/macOS) and ngrok (default on Windows) for secure, public access.
    • SSH Tunneling: Uses localhost.run for instant tunneling without any account or sign-up.
    • Ngrok Support: Reliable tunneling via ngrok (requires free account).
  • QR Code Display: Generates a scannable QR code in your terminal for easy access on mobile devices.
  • Web Interface: Provides a simple web page for recipients to download shared files or upload files to you.

Installation

pip install qrtunnel

This will install qrtunnel and all its dependencies.

Usage

1. Interactive Mode (TUI)

Simply run qrtunnel without any arguments to launch the interactive interface:

qrtunnel

Use your Arrow Keys to:

  1. Select SEND or RECEIVE.
  2. Navigate and select files (Space to toggle, Enter to confirm).
  3. Choose your Tunnel Mode (Smart, LAN, SSH, Ngrok).
  4. Select a Port (Random or Custom).
  5. Launch!

2. Command Line Interface (CLI)

For quick, scripted, or direct usage, use the send and receive subcommands.

Sharing Files (Send)

To share one or more files:

qrtunnel send <file_path1> [<file_path2> ...]

Example:

qrtunnel send mydocument.pdf photos/

Options:

  • -smart: (Default) Enables both LAN and Internet links.
  • -lan: Force LAN-only mode (fastest, same Wi-Fi only).
  • -ssh: Force SSH tunneling (no account needed).
  • -ngrok: Force ngrok tunneling (requires account).
  • -p <port> or -<port>: Specify a custom port (e.g., -p 8080 or -8080).

Receiving Files (Receive)

To receive files on your computer:

qrtunnel receive [destination_directory]

Example:

qrtunnel receive ./downloads

This starts the server in upload mode. Scan the QR code to get a web page where you can upload files to your computer.

Tunnel Modes Explained

  • Smart Mode: Best for most cases. It creates a public tunnel AND a local LAN server. The phone will try to use the LAN connection first (fastest) and fall back to the tunnel if needed.
  • LAN Mode: Only accessible to devices on the same Wi-Fi. Fastest speed, maximum privacy.
  • SSH Mode: (Linux/macOS Default) Uses localhost.run to create a public link. No account required.
  • Ngrok Mode: (Windows Default) Uses ngrok for a stable public link. Requires a free ngrok account.

Ngrok Setup

If you use ngrok (default on Windows, optional on Linux/macOS), you'll need to set up your authtoken once. The TUI or CLI will prompt you if it's missing, or you can configure it manually if needed.

License

MIT

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

qrtunnel-3.5.1.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

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

qrtunnel-3.5.1-py3-none-any.whl (23.4 kB view details)

Uploaded Python 3

File details

Details for the file qrtunnel-3.5.1.tar.gz.

File metadata

  • Download URL: qrtunnel-3.5.1.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for qrtunnel-3.5.1.tar.gz
Algorithm Hash digest
SHA256 739e9215b1dcef24d367622bc642f737e244777249603459e79e0f2d32205b7b
MD5 ef2c83745ec26cb148bf439b9e54271d
BLAKE2b-256 8d59de588aa05af5ef531733930a969160287f7a951ec6d780575a288100f54f

See more details on using hashes here.

File details

Details for the file qrtunnel-3.5.1-py3-none-any.whl.

File metadata

  • Download URL: qrtunnel-3.5.1-py3-none-any.whl
  • Upload date:
  • Size: 23.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"43","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for qrtunnel-3.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1f433a4a7f11165e780be0f39d2250d0b5c52b3b43ac8d93e8fa96e7a067cf87
MD5 909d0c020476eda8e14f79f7d027c6e6
BLAKE2b-256 e2d3c8dab02944d7187e625798973903268cc66d99fa6aa5f50b34e1050b3eb3

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