fer

Xfer

Secure, encrypted file transfer via QR codes.

Send files from desktop to mobile or mobile to desktop with end-to-end encryption and checksum verification.

Quick Install

Quick Install Script (Linux/macOS)

curl -fsSL https://raw.githubusercontent.com/thecodefreak/xfer/main/install.sh | bash

With Go

go install github.com/thecodefreak/xfer/cmd/xfer@latest

Releases: Install prebuilt binary from GitHub Releases

Releases: Install prebuilt xfer-server binary from GitHub Releases

Docker (Recommended)

docker run -d \
  -e XFER_BASE_URL=https://xfer.example.com \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/thecodefreak/xfer:latest

Docker Compose

services:
  xfer:
    image: ghcr.io/thecodefreak/xfer:latest
    environment:
      XFER_BASE_URL: https://xfer.example.com
      XFER_PORT: 8080
      XFER_SESSION_TTL: 5m
      XFER_MAX_SIZE: 209715200
    ports:
      - "127.0.0.1:8080:8080"
    restart: unless-stopped

Features

End-to-End Encryption

Mandatory AES-256-GCM encryption with HKDF-SHA256 key derivation.

Strict Transfer Completion

Sender succeeds only after receiver finalizes and checksum verification passes.

Cross-Network Friendly

Designed to work behind NAT/firewalls using a secure relay transport.

Optional Password Layer

Argon2id password protection for transfers that need extra access control.

Send

xfer send photo.jpg
xfer send --password document.pdf
xfer send file1.txt file2.txt folder/

Receive

xfer receive
xfer receive ~/Downloads/

CLI Commands

xfer send <files...>
xfer receive [path]
xfer config <get|set|list|reset>
xfer version

Config

Config file path: ~/.config/xfer/config.yaml

server: "https://xfer.example.com"
timeout: 10m
output-dir: "."
progress: true
history: true
hide-filenames: false

How It Works

CLI Sender

Encrypts files and emits QR payload.

Relay Server

Blind transport for encrypted chunks.

Browser Receiver

Decrypts locally and finalizes transfer.

  1. Run xfer send ... from the CLI.
  2. Scan the generated QR code on the receiving device.
  3. Transfer stays encrypted end-to-end through the relay server.
  4. Receiver decrypts locally and confirms completion.

Use Cases

Desktop to Phone

Move screenshots, logs, and exports quickly without cloud upload steps.

Phone to Workstation

Scan once from terminal and receive photos or docs directly into downloads.

Temporary Secure Share

Use optional password mode for one-time sensitive file handoff.

Self-Hosted Team Relay

Run the relay in your infra and keep transfer control inside your environment.

Docs

Deploy Server

Container image: ghcr.io/thecodefreak/xfer

Docker Command

docker run -d \
  -e XFER_BASE_URL=https://xfer.example.com \
  -p 127.0.0.1:8080:8080 \
  ghcr.io/thecodefreak/xfer:latest

Docker Compose

services:
  xfer:
    image: ghcr.io/thecodefreak/xfer:latest
    environment:
      XFER_BASE_URL: https://xfer.example.com
      XFER_PORT: 8080
      XFER_SESSION_TTL: 5m
      XFER_MAX_SIZE: 209715200
    ports:
      - "127.0.0.1:8080:8080"
    restart: unless-stopped