Getting Started

Installation

Build the sender binary and install 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

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

The result is a self-contained binary. Copy target/release/porter-sender to the air-gapped machine and it runs with nothing else installed.

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