Skip to content

RustFerry — Rust-only mobile projects for Android and iOS

RustFerry

Ship Android and iOS apps from one Rust codebase—without maintaining Gradle or Xcode projects.

CI Platform artifacts VS Code extension cargo-ferry on crates.io GitHub release RustFerry for VS Code 0.1.0 on Marketplace License: MIT OR Apache-2.0 Rust 1.92 or newer

RustFerry is a Rust-first mobile toolchain for shipping Android and iOS apps from an ordinary Cargo project. Application code and assets stay in Rust; disposable platform hosts are generated under target/ferry/ while cargo ferry handles builds, devices, deployment, logs, CI, signing, and remote macOS builds.

RustFerry 0.1.0 is available as a public pre-release from crates.io, GitHub Releases, and the Visual Studio Marketplace.

Important

RustFerry 0.1.0 is the first public pre-release. CI and retained evidence validate host tests, generated projects, a signed/aligned arm64 Android APK, iOS Simulator .app/.appex artifacts, and an unsigned physical-iPhone XCArchive built on a remote macOS worker. One Calculator APK built on Windows was launched and exercised on a physical Android device. Emulator, iOS Simulator, physical-iPhone runtime, generalized device install/run/log workflows, and a development-signed remote IPA remain unvalidated. An API or generated bridge is not, by itself, runtime evidence.

Install

Install the published CLI from crates.io. Rust 1.92 or newer is required.

cargo install cargo-ferry --version 0.1.0 --locked
cargo ferry new weather --id com.example.weather
cd weather
cargo ferry doctor --all
cargo ferry check

The generated project contains only application-owned Rust source, configuration, and assets:

weather/
├── Cargo.toml
├── ferry.toml
├── assets/
└── src/

weather/target/ferry/   # generated Android and Apple hosts

Generation defaults to the exact registry version of the rustferry runtime. Normal installations do not need --runtime-source path, --runtime-path, or CARGO_FERRY_RUNTIME_PATH.

Build

Build a signed Android APK directly with Cargo, the Android SDK/NDK tools, and no Gradle project:

cargo ferry build android

On macOS with full Xcode, build an arm64 iOS Simulator application:

cargo ferry build ios --simulator

Build does not contact a device. Deployment is a separate operation:

cargo ferry devices
cargo ferry install android --device SERIAL
cargo ferry run ios --simulator SIMULATOR_UDID
cargo ferry logs android --device SERIAL

These deployment backends have deterministic test coverage, and one Calculator APK has been launched and exercised on a physical Android device. The generic install/run/log workflow, other application and capability paths, Android emulators, iOS Simulators, and iOS devices remain runtime-unvalidated. See the support matrix and implementation evidence for the exact validation level.

Capabilities

cargo ferry add notifications
cargo ferry add widget
cargo ferry capabilities
cargo ferry config validate

RustFerry exposes typed APIs for lifecycle events, network state, storage, permissions, haptics, clipboard, sharing, deep links, local notifications, widgets, and Live Activities. Capability availability and validation depth differ by platform.

Remote physical-iPhone builds

Linux and Windows clients can send an exact source revision to a configured GitHub-hosted macOS worker:

cargo ferry remote setup github \
  --source-remote-name public \
  --execution-remote-name signing \
  --execution-repository OWNER/private-signing \
  --worker-revision <exact-commit>
cargo ferry build iphone --remote github --unsigned

An explicit dirty-source build is consent-bound and public:

cargo ferry --dry-run build iphone --remote github --snapshot --unsigned
cargo ferry build iphone --remote github --snapshot --unsigned

Review the interactive plan before continuing. Snapshot bytes enter the public Git object database; deleting a temporary ref does not erase them. Named SSH Mac endpoints are also available for deterministic unsigned snapshot builds. The live GitHub evidence covers an unsigned XCArchive, not signing, IPA export, installation, launch, or device runtime.

Durable remote-job and artifact commands include:

cargo ferry jobs list
cargo ferry jobs show <local-job-id>
cargo ferry jobs logs <local-job-id> --follow
cargo ferry jobs cancel <local-job-id>
cargo ferry jobs retry <local-job-id>
cargo ferry jobs artifacts <local-job-id>
cargo ferry artifact verify <downloaded-path> --job <local-job-id>

Visual Studio Code

RustFerry for VS Code 0.1.0 is available from the Visual Studio Marketplace. The extension discovers trusted ferry.toml workspaces and delegates validation, builds, devices, deployment, remote jobs, artifacts, and logs to the versioned cargo-ferry protocol.

To package the extension from source:

cd editors/vscode
npm ci
npm run package
code --install-extension dist/rustferry-vscode.vsix

Workspace crates

All nine publishable workspace crates are available on crates.io as version 0.1.0.

Crate Purpose
cargo-ferry User-facing Cargo subcommand
rustferry Application runtime API
rustferry-core Configuration, validation, naming, assets, and shared primitives
rustferry-codegen Project, capability, host, and asset generation
rustferry-android Direct no-Gradle Android packaging backend
rustferry-apple Generated Apple host and artifact backend
rustferry-remote Versioned remote-build contracts
rustferry-github GitHub Actions provider
rustferry-ssh Pinned OpenSSH transport
rustferry-worker-macos Non-publishable trusted macOS worker

rustferry-worker-macos is intentionally workspace-only and is not published to crates.io.

Development from source

Contributor builds select the checkout runtime explicitly:

git clone https://github.com/ShiroKSH/rustferry.git
cd rustferry
cargo install --locked --path crates/cargo-ferry
cargo ferry new weather \
  --id com.example.weather \
  --runtime-source path \
  --runtime-path "$PWD/crates/rustferry"

--runtime-source workspace supports monorepo development. CARGO_FERRY_RUNTIME_PATH is a contributor-only override; it is not part of the registry installation flow.

Documentation and examples

Slint licensing

The initial UI backend is Slint. Slint is not an MIT/Apache runtime dependency: application distributors must satisfy GPL-3.0, Slint's royalty-free application license and attribution condition, or a commercial license. Generated templates retain an accessible AboutSlint component. Read ADR-001 before distributing an application; it is technical context, not legal advice.

Contributing and security

Read the contribution guide, Code of Conduct, and maintainer policy. Report vulnerabilities through SECURITY.md, not a public issue.

License

RustFerry is available under either the MIT License or the Apache License 2.0, at your option. Applications using Slint must make a separate Slint license choice.

About

Ship Android & iOS apps from one Rust codebase - no Gradle or Xcode project maintenance. Cargo CLI, Slint UI, VS Code, CI, signing, and remote macOS builds.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages