tauri-apps/tauri
tauri-cli
Active contributors: Lucas Fernandes Nogueira, Amr Bashir, Fabian-Lars
Purpose
crates/tauri-cli is the tauri (and cargo tauri) command-line interface. It scaffolds projects, runs dev mode, builds release binaries, drives the bundler, generates icons, signs updater bundles, manages permissions/capabilities, runs Android/iOS builds, and migrates v1 projects to v2. It is also re-exported through napi-rs as @tauri-apps/cli (see packages/cli).
The crate is structured as one Rust file per subcommand under src/<subcommand>.rs (or src/<subcommand>/), with a single lib.rs that wires them into the clap Cli enum and dispatches.
Directory layout
crates/tauri-cli/
├── Cargo.toml
├── ENVIRONMENT_VARIABLES.md # documents every TAURI_CLI_* / TAURI_* env var the CLI consumes
├── config.schema.json # generated; mirror of the user-facing tauri.conf.json schema
├── tauri.config.schema.json
├── schema.json
├── src/
│ ├── main.rs # binary entry — calls lib::run
│ ├── lib.rs # 12,935 bytes: Cli enum, run(), try_run()
│ ├── init.rs # `tauri init`
│ ├── add.rs / remove.rs # add/remove a plugin
│ ├── dev.rs / dev/ # dev mode (frontend dev server + cargo run + reload)
│ ├── build.rs # `tauri build`
│ ├── bundle.rs # `tauri bundle` (calls tauri-bundler)
│ ├── completions.rs # shell completion generator
│ ├── icon.rs # generate icons (29 KB)
│ ├── info/ # `tauri info` — env, packages, plugins, app inspection
│ ├── inspect.rs # `tauri inspect` — dump resolved config / ACL / capabilities
│ ├── interface/ # cargo subprocess wrapper, dev-server probing
│ ├── helpers/ # shared utilities
│ ├── mobile/ # `tauri android` / `tauri ios`
│ ├── migrate/ # v1 → v2 migration
│ ├── plugin/ # `tauri plugin` subcommands
│ ├── acl/ # `tauri permission` and `tauri capability`
│ ├── signer/ # update-bundle key generation and signing
│ └── error.rs # CLI error type with anyhow context extension
├── scripts/ # frontend probe scripts
├── templates/ # `tauri init` templates
└── tests/Key abstractions
| Type / function | File | Role |
|---|---|---|
Cli (clap derive) |
crates/tauri-cli/src/lib.rs |
Top-level command tree. |
run / try_run |
crates/tauri-cli/src/lib.rs |
Public entry. run exits non-zero on error; try_run returns Result. |
Commands enum |
crates/tauri-cli/src/lib.rs |
One variant per subcommand. |
ConfigValue (FromStr) |
crates/tauri-cli/src/lib.rs |
Accepts JSON5/JSON/TOML config either inline or as a file path. |
CommandExt trait |
crates/tauri-cli/src/lib.rs |
piped() and output_ok() for verbose subprocess invocation with stdio mirroring. |
Per-subcommand Options + command |
crates/tauri-cli/src/<subcommand>.rs |
Each subcommand defines its own Options struct and command(opts) fn. |
Subcommand index
| Subcommand | Implementation |
|---|---|
init |
crates/tauri-cli/src/init.rs |
dev |
crates/tauri-cli/src/dev.rs, dev/ |
build |
crates/tauri-cli/src/build.rs |
bundle |
crates/tauri-cli/src/bundle.rs |
info |
crates/tauri-cli/src/info/mod.rs (+ many helpers) |
migrate |
crates/tauri-cli/src/migrate/ |
add / remove |
crates/tauri-cli/src/add.rs / remove.rs |
plugin <new|init|android|ios> |
crates/tauri-cli/src/plugin/ |
icon |
crates/tauri-cli/src/icon.rs |
signer <generate|sign> |
crates/tauri-cli/src/signer/ |
completions <shell> |
crates/tauri-cli/src/completions.rs |
permission <add|remove|new|ls> |
crates/tauri-cli/src/acl/permission/ |
capability <new|ls> |
crates/tauri-cli/src/acl/capability/ |
inspect <wix-upgrade-code> |
crates/tauri-cli/src/inspect.rs |
android <init|dev|build> |
crates/tauri-cli/src/mobile/android/ |
ios <init|dev|build> |
crates/tauri-cli/src/mobile/ios/ |
How it works
graph LR
User["tauri / cargo tauri / @tauri-apps/cli"] --> Lib["lib.rs::run"]
Lib --> Parse["clap parse"]
Parse --> Dispatch["match Commands"]
Dispatch --> Sub["subcommand::command(opts)"]
Sub -->|"build/bundle"| Bundler["tauri-bundler"]
Sub -->|"dev"| Cargo["cargo subprocess + dev server"]
Sub -->|"signer"| Sign["minisign"]
Sub -->|"android/ios"| Mobile["NDK / Xcode subprocess"]
Sub -->|"info/inspect"| Read["read tauri.conf.json + Cargo metadata"]The CLI prints structured output via env_logger configured in lib::try_run — actions get a green right-aligned label ( Running, Compiling). Verbosity is passed through TAURI_CLI_VERBOSITY so subprocesses (xcode-script, android-studio-script) inherit it.
Cargo features
- Defaults pull in
tauri-bundler/default. native-tls/native-tls-vendored/rustls-tlstoggle TLS backend for HTTP downloads (e.g. NSIS bootstrappers).
Integration points
- Up: the binary
tauriandcargo-tauri(same code, differentbin_name); the Node addon at packages/cli. - Down: depends on
tauri-bundler,tauri-utils,tauri-macos-sign, plus a long list of CLI-flavour deps (clap,dialoguer,handlebars,os_pipe,env_logger,napi-rsglue is inpackages/cli).
Entry points for modification
| Goal | Start here |
|---|---|
| Add a new subcommand | crates/tauri-cli/src/lib.rs (Commands enum + dispatch) and a new module |
| Change dev-server probing | crates/tauri-cli/src/dev.rs and interface/ |
| Fix bundler argument plumbing | crates/tauri-cli/src/build.rs / bundle.rs |
Add an info check (e.g. new tooling) |
crates/tauri-cli/src/info/ |
| Migrate behaviour | crates/tauri-cli/src/migrate/ |
| Generate a different icon set | crates/tauri-cli/src/icon.rs |
See tauri-bundler for the packaging step the CLI orchestrates, and packages/cli for the npm wrapper.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.