Tauri v2 では、ファイル操作・ダイアログ・通知・HTTP 通信などの機能が公式プラグインに分かれていて、必要なものだけを入れます。そのぶん「どのプラグインか」「iOS / Android でも使えるか」を先に確かめる必要があります。公式プラグインの一覧とこのサイトの対応レシピ、デスクトップ専用とモバイル対応の違い、入っているプラグインと権限の確かめ方をまとめます。
前提条件
新しく作ったプロジェクト(Tauri プロジェクトを作成する)に最初から入っているプラグインは Opener だけで、ほかは npm run tauri add <名前> で足します(プラグインをインストールして有効化する)。1 章の例では次の 2 つを使います。
npm run tauri add os
npm run tauri add autostart
ウィンドウ・メニュー・トレイ・パス・イベント・アプリ情報は本体の機能なので、プラグインは要りません。@tauri-apps/api から使い、権限は core: で始まります。
公式プラグインの一覧と対応レシピ
2026 年 9 月時点で 30 個あります。「名前」は tauri add に渡す名前で、npm パッケージは @tauri-apps/plugin-<名前>、クレートは tauri-plugin-<名前> です。公式ドキュメントの URL(clipboard、logging など)とは違う名前があります。「両方」はデスクトップと iOS / Android の両方で使えます。
| 名前 | できること | 対応 | レシピ |
|---|---|---|---|
autostart | ログイン時に自動起動 | デスクトップ | sys-022 |
cli | 起動引数の解析 | デスクトップ | sys-013 |
clipboard-manager | クリップボード | 両方(モバイルはテキストのみ) | sys-007 |
deep-link | myapp:// などの URL でアプリを開く | 両方 | なし |
dialog | ファイル選択・メッセージ | 両方(モバイルはフォルダ選択なし) | dlg-004 |
fs | ファイルの読み書き・監視 | 両方 | fs-001 / fs-025 |
global-shortcut | アプリの外でも効くショートカット | デスクトップ | win-031 |
http | Rust 経由の HTTP 通信 | 両方 | net-001 |
localhost | 本番でも localhost から画面を配信 | デスクトップ | なし |
log | ログの出力 | 両方 | plugin-008 |
notification | 通知 | 両方 | dlg-009 |
opener | 既定のアプリで URL やファイルを開く | 両方(モバイルは URL のみ) | なし |
os | OS の種類・バージョン | 両方 | sys-001 |
persisted-scope | fs の許可範囲の変更を保存 | 両方 | plugin-013 |
positioner | トレイの近くなどへ移動 | デスクトップ | plugin-010 |
process | アプリの終了・再起動 | デスクトップ | menu-010(終了) |
shell | 外部コマンドの実行 | 両方(モバイルは URL を開くのみ) | shell-001 |
single-instance | 多重起動の防止 | デスクトップ | plugin-011 |
sql | SQLite などのデータベース | 両方 | db-001 |
store | 設定のキーバリュー保存 | 両方 | db-004 |
stronghold | 暗号化した保存領域 | 両方 | db-005 |
updater | アプリの自動更新 | デスクトップ | なし |
upload | HTTP でファイルをアップロード | 両方 | net-006 |
websocket | WebSocket 通信 | 両方 | net-009 |
window-state | ウィンドウの位置と大きさを記憶 | デスクトップ | plugin-005 |
モバイル専用は barcode-scanner(バーコードの読み取り)、biometric(生体認証)、geolocation(位置情報)、haptics(振動)、nfc の 5 つで、このサイトでは扱っていません。
デスクトップ専用のプラグインの扱い
デスクトップ専用のプラグインは iOS / Android 向けのビルドに含められません。tauri add で入れると、autostart や window-state などのクレートは Cargo.toml のデスクトップ向けの節に、権限は platforms をデスクトップに絞った capabilities/desktop.json に入ります。platforms が合わない capability はビルド時に読み飛ばされるので、モバイル向けのビルドで権限が無いというエラーにはなりません。
[target.'cfg(not(any(target_os = "android", target_os = "ios")))'.dependencies]
tauri-plugin-autostart = "2"
tauri-plugin-window-state = "2"
一方、lib.rs への登録は条件なしで足されるので、モバイルもビルドするなら 1・2 章のように JS と Rust で分けます。
1. 実行中の OS で呼び分ける (TypeScript)
モバイルでデスクトップ専用プラグインの関数を呼ぶと、開発ビルドでは「autostart.enable not allowed. Plugin not found」、リリースビルドでは「Command plugin:autostart|enable not allowed by ACL」になります。os プラグインの platform() で先に分け、設定項目ごと隠します。
import { platform } from '@tauri-apps/plugin-os';
import { disable, enable, isEnabled } from '@tauri-apps/plugin-autostart';
// platform() は同期で 'windows' / 'macos' / 'linux' / 'ios' / 'android' などを返す
const os = platform();
export const isMobile = os === 'ios' || os === 'android';
// <div id="autostart-row"><input type="checkbox" id="autostart"></div> を想定
export async function setupAutostartRow() {
const row = document.querySelector<HTMLElement>('#autostart-row');
const box = document.querySelector<HTMLInputElement>('#autostart');
if (!row || !box) return;
row.hidden = isMobile; // モバイルでは項目ごと隠す
if (isMobile) return; // ここから先はデスクトップだけ
box.checked = await isEnabled();
box.addEventListener('change', () => void (box.checked ? enable() : disable()));
}
2. ビルド先で登録を分ける (Rust)
Rust では #[cfg(desktop)] の中で登録します。desktop と mobile は Tauri のビルドスクリプトが用意する条件で、モバイル専用のプラグインは逆に #[cfg(mobile)] で囲みます。
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
// どの OS でも使えるプラグイン
let builder = tauri::Builder::default().plugin(tauri_plugin_os::init());
// デスクトップ専用のプラグイン(Cargo.toml でもデスクトップ向けだけに入っている)
#[cfg(desktop)]
let builder = builder
.plugin(tauri_plugin_autostart::Builder::new().build())
.plugin(tauri_plugin_window_state::Builder::new().build());
builder
.run(tauri::generate_context!())
.expect("error while running tauri application");
}
プラグインを使う自分のコマンドや use も同じように囲みます。
動作確認
入っているプラグインは npm run tauri info の「Plugins」に、クレートと npm パッケージの組で出ます。
[-] Plugins
- tauri-plugin-os 🦀: 2.3.2
- @tauri-apps/plugin-os ⱼₛ: 2.3.2
- tauri-plugin-single-instance 🦀: 2.4.4
- @tauri-apps/plugin-single-instance ⱼₛ: not installed!
2 つのバージョンは揃えます(Tauri CLI を最新版にアップグレードする)。single-instance と persisted-scope は Rust だけで動くので、npm 側が「not installed!」でも正常です。<名前>:default の中身は npm run tauri permission ls <名前> の「Permissions:」の行で分かります。
window-state:default
...
Permissions: allow-filename, allow-restore-state, allow-save-window-state
default がすべてを許可するとは限りません。clipboard-manager ではこの行が空で、os:default にはホスト名の取得が入っていません(OS の種類・CPU アーキテクチャ・ホスト名を取得する)。capability に $schema を書いておけば、権限の名前はエディターが補完します。1 章の関数を npm run tauri dev で呼ぶと、チェックボックスに今の登録状態が出ます。
よくあるエラーと対処法
tauri add clipboardで別のものが入る・失敗する:tauri addは知らない名前をコミュニティ製とみなし、tauri-plugin-<名前>というクレートを探します。clipboardではコミュニティ製のtauri-plugin-clipboardが入り、loggingはクレートが無いので失敗します。表の「名前」を使います。- モバイルで「autostart.enable not allowed. Plugin not found」: デスクトップ専用のプラグインを呼んでいます。1 章のように分けます。
- モバイル向けのビルドだけ「use of unresolved module or unlinked crate」を含むエラーになる: 2 章の
#[cfg(desktop)]の囲み忘れです。 tauri infoで片方だけ「not installed!」: Rust だけのプラグインでなければ、npm か Cargo の片方の入れ忘れです。
OS ごとの違いと注意点
部分対応の詳細は、公式の一覧ページ末尾の対応表で「*」にカーソルを合わせると出ます。表の注記以外では次の点に注意します。
- Windows: 通知はインストールしたアプリでないと正しく動かず、開発中は PowerShell の名前とアイコンで表示されます。
- macOS / iOS / Android:
deep-linkの URL スキームは設定ファイルで登録し、実行中には登録できません。 - iOS / Android:
fsは既定でアプリのフォルダにしかアクセスできません。モバイル専用のプラグインは、実機かエミュレーターで確かめます。
