Getting Started

Installation

Install the sender binary and the receiver app.

Porter is two programs. You need the sender on the machine holding the file and the receiver on the device with the camera.

The sender

Homebrew

brew install terrorsquad/tap/porter-sender
porter-sender myfile.pdf

Pre-built binary

Grab an archive for your platform from the releases page — macOS and Linux, arm64 and x86_64. Extract it and put porter-sender on your PATH.

The binary is self-contained: copy it to the air-gapped machine and it runs with nothing else installed. That is the point of the move to Rust — the sending machine needs no runtime, which matters most on the machine least likely to have one.

From source

Requires a Rust toolchain (rustup). No other dependencies.

git clone https://github.com/TerrorSquad/porter
cd porter/rust-sender
cargo build --release

./target/release/porter-sender myfile.pdf

Or with mise from the repo root:

mise run rust-install   # builds, then copies to ~/.local/bin/porter-sender
porter-sender myfile.pdf

Other tasks: rust-build, rust-test, rust-check, rust-send, rust-serve.

The receiver

Requires Flutter.

cd flutter
flutter pub get
flutter build apk --release
# → build/app/outputs/flutter-apk/app-release.apk

Or with mise from the repo root:

mise run flutter-build     # release build, x86_64 half stripped
mise run flutter-install   # copies PorterRx.app to /Applications
flutter build macos produces a universal binary, so a release bundle carries an x86_64 half that never runs on Apple Silicon — 44.7 MB against 22 MB once stripped. The flutter-build mise task strips it.

Verifying the install

Send a small text file to yourself:

echo "hello from the other side" > test.txt
porter-sender test.txt --slideshow --speed=0.5

Open the receiver, point it at the terminal, and the file should assemble, verify against its SHA-256, and save to Downloads.

Copyright © 2026