Open-source CLI and native macOS app for printing to Fujifilm Instax Link printers via Bluetooth Low Energy. Supports the Instax Mini Link, Square Link, and Wide Link.
The Instax Link BLE protocol was reverse-engineered by the open-source community (javl/InstaxBLE, linssenste/instax-link-web). InstantLink provides a clean Rust implementation.
The InstantLink project ships two end-user products and the shared Rust core they're both built on.
| Component | Description |
|---|---|
App (InstantLink.app) |
Native macOS app — image editor, camera capture, BLE printing, Bridge management |
Bridge (bridge/) |
Raspberry Pi Zero 2 W appliance — accepts FTP uploads from anything (cameras, scripts) and relays them to a paired Instax printer over BLE and/or syncs them to the iOS app |
iOS app (ios/) |
SwiftUI iPhone app — pairs with the Bridge via QR + hotspot join and pulls camera photos into the Photos library (plan 050; on-device testing pending) |
CLI (instantlink binary, crate instantlink-cli) |
Command-line tool to scan, query, and print |
| instantlink-core / instantlink-ffi | Rust core library (BLE protocol, image processing) and C FFI bindings used by the App and Bridge |
Pre-built artifacts are published on the Releases page for each tagged version.
Build from source:
git clone https://github.com/wu-hongjun/InstantLink.git
cd InstantLink
cargo build --workspace --release
# Install the CLI
cargo install --path crates/instantlink-cli# Scan for nearby printers
instantlink scan
# Check printer status
instantlink status
# Print an image
instantlink print photo.jpg
# Print with specific fit mode and quality
instantlink print photo.jpg --fit contain --quality 90
# Print with natural color mode (classic film look)
instantlink print photo.jpg --color-mode natural
# Control the LED
instantlink led set "#FF6600" --pattern breathe
instantlink led offStructured --json output is currently implemented for scan, info, and status.
| Model | Resolution | Film Type |
|---|---|---|
| Instax Mini Link | 600x800 | Instax Mini |
| Instax Mini Link 3 | 600x800 | Instax Mini |
| Instax Square Link | 800x800 | Instax Square |
| Instax Wide Link | 1260x840 | Instax Wide |
The printer model is auto-detected after connecting.
- Print any image (JPEG, PNG, etc.) to Instax Link printers via BLE
- Auto-resize with crop, contain, or stretch fit modes
- Rich and Natural color modes (vivid vs classic film look)
- Automatic JPEG quality reduction to fit model-specific printer limits (Mini
105KB, Mini Link 355KB, Square105KB, Wide225KB) - Battery level, film count, charging state, and print history queries
- LED color control with solid, blink, and breathe patterns
- BLE scanner to discover nearby printers
- JSON output mode for integration with other tools
- Native macOS app with:
- Menu bar interface with drag-and-drop printing
- Built-in image editor with crop, rotate, overlays, and queue-aware defaults
- Camera capture mode with self-timer (2s / 10s countdown)
- Film orientation toggle (portrait/landscape) with print-time rotation
- Film border preview showing the physical Instax film shape
- Stage-aware pairing and reconnect UI
- Multi-printer management with saved profiles
- Experimental in-app LED diagnostics in Settings
- Auto-update via GitHub releases
- Localized in 12 languages
- C FFI (24 exported functions: see
docs/reference/ffi.md) for building native UIs, including connection-stage callbacks - Raspberry Pi bridge appliance for receiving camera FTP uploads over a local hotspot and printing through the InstantLink FFI backend
- iPhone auto-sync from the Bridge: photos spool to a disk outbox and an iOS app pulls them over a token-authed local HTTP API with Bonjour discovery — print, sync, or both per photo destination setting
- Virtual LCD on the Bridge: the same sync API serves the live 240x240 screen and accepts input actions, so the Bridge UI can be viewed and driven from the iOS app with no extra hardware (plan 054)
InstantLink/
├── Cargo.toml # Workspace root
├── mkdocs.yml # Documentation config
├── docs/ # MkDocs source
├── crates/
│ ├── instantlink-core/ # Core library
│ ├── instantlink-cli/ # CLI binary
│ └── instantlink-ffi/ # C FFI
├── bridge/ # Raspberry Pi camera FTP appliance
├── ios/ # iPhone sync app (SwiftUI, plan 050)
└── macos/ # Native macOS app (SwiftUI)
└── InstantLink/
bridge/ contains the Raspberry Pi runtime, LCD UI, FTP receive service, network-mode
helpers, systemd units, and deployment scripts for a self-contained camera-to-printer appliance.
It deliberately reuses instantlink-ffi for printer discovery, status, and print transport instead
of maintaining a second BLE protocol implementation.
The macOS app is a native SwiftUI application with menu bar integration. It loads the Rust core library via FFI (dlopen/dlsym) for direct BLE communication. The bundled CLI remains in the app for lightweight metadata such as version reporting.
Features include drag-and-drop image printing, a built-in image editor, overlays, camera capture with self-timer, film orientation control, film border preview, printer profile management, and auto-updates.
# Build the app bundle
bash scripts/build-app.sh 0.1.5Full docs are available at instantlink.hongjunwu.com.
MIT