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
cd flutter
flutter pub get
flutter build macos --release
# → build/macos/Build/Products/Release/PorterRx.app
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.