* feat(cli): add RISC-V 64-bit pre-built binary support
Add riscv64gc-unknown-linux-gnu target to the tauri-cli release workflow,
enabling pre-built binaries for RISC-V 64-bit Linux systems.
This eliminates the multi-hour QEMU compilation time that currently blocks
RISC-V adoption of Tauri apps. Native compilation on RISC-V hardware
takes ~63 minutes.
Changes:
- Add RISC-V entry to build matrix with self-hosted runner support
- Support custom `runs_on` field for matrix entries (falls back to `os`)
- Skip dtolnay/rust-toolchain and rust-cache for self-hosted runners
- Source ~/.cargo/env for self-hosted runners where Rust is pre-installed
Tested on:
- Hardware: Banana Pi F3 (RISC-V64, 16GB RAM)
- OS: Debian Trixie (required for WebKit2GTK RISC-V support)
- Build time: 1h 2m 28s
- Binary: ELF 64-bit RISC-V, 16MB stripped
* feat(cli): use cross for RISC-V cross-compilation
Switch from self-hosted runners to cross-rs for building RISC-V binaries.
This approach is simpler and doesn't require maintaining self-hosted infrastructure.
Local testing confirms cross builds a valid RISC-V binary in ~4 minutes.
* refactor(cli): address review feedback for RISC-V workflow
- Skip Rust toolchain and cache setup for cross builds (unnecessary)
- Pin cross version to 0.2.5 for reproducibility
- Fix Linux dependencies condition to match ubuntu-* variants
* refactor: use empty vector for features instead of None
* refactor: reorder
* add change file
* comment: highlight places where serialization is used
* refactor: simplify serialization
* Update .changes/empty-vec-instead-of-none.md
* Update crates/tauri-cli/src/mobile/ios/mod.rs
---------
Co-authored-by: Tony <68118705+Legend-Master@users.noreply.github.com>
* Typos
* Rename to `handler`/`protocol_handler`
* Fix the `AssetResolver::get` fallback docs
* Refactor and update the docs for `get_url`
* Rename the remaining ones to `get_app_url`
* Apply suggestions from code review
Co-authored-by: Fabian-Lars <github@fabianlars.de>
* Generate schema
* refactor(tauri-utils): current_dest and current_pattern always change in-sync, group them to one Option
* refactor(tauri-utils): pass path as explicit argument instead of implicitly through self
* refactor(tauri-utils): remove struct field that is never set to Some
* refactor(tauri-cli): use OsString, OsStr where possible
* refactor(tauri-cli): Deref Arc early
* refactor(tauri-cli): lock config before passing to build::setup()
* refactor(tauri-build, tauri-utils): bettern pattern matching and borrowing
* refactor(tauri-cli): dont need Arc if already have static
* fix(tauri-cli): race condition initializing static flag, remove unnecessary OnceLock
* refactor(tauri-cli): use expect
* refactor(tauri-cli): remove unnecessary OnceLock
* refactor(tauri-cli): better use of dunce api
* refactor(tauri-cli): rename
* fix(core): properly handle async errors in addPluginListener
The previous implementation used .then() after invoke() without await, which prevented the catch block from handling rejected promises. Now using await to properly catch errors and allow fallback to camelCase registerListener method.
* Change file and generate `bundle.global.js`
---------
Co-authored-by: Tony <legendmastertony@gmail.com>
* refactor(core): improve iOS log messages from stdout/stderr
move the stdout/stderr forward logic to Swift so it does not consume a Rust thread and never deadlocks on the simulator
I had to work on this because i'm facing #12172 again on latest Xcode (26.1)
* patch