Shell
Access the system shell. Allows you to spawn child processes and manage files and URLs using their default application.
Supported Platforms
- Windows
- Linux
- macOS
Setup
This plugin requires a Rust version of at least 1.75
Install the shell plugin to get started.
Use your project’s package manager to add the dependency:
npm run tauri add shellyarn run tauri add shellpnpm tauri add shellcargo tauri add shell- 
Install the shell plugin by adding the following to your Cargo.tomlfile:src-tauri/Cargo.toml [dependencies]tauri-plugin-shell = "2.0.0-beta"# alternatively with Git:tauri-plugin-shell = { git = "https://github.com/tauri-apps/plugins-workspace", branch = "v2" }
- 
Modify lib.rsto initialize the plugin:src-tauri/src/lib.rs fn run() {tauri::Builder::default().plugin(tauri_plugin_shell::init()).run(tauri::generate_context!()).expect("error while running tauri application");}
- 
Install the JavaScript Guest bindings using your preferred JavaScript package manager: npm install @tauri-apps/plugin-shellyarn add @tauri-apps/plugin-shellpnpm add @tauri-apps/plugin-shell
Usage
The shell plugin is available in both JavaScript and Rust.
import { Command } from '@tauri-apps/plugin-shell';
let result = await Command.create('exec-sh', [  '-c',  "echo 'Hello World!'",]).execute();console.log(result);use tauri_plugin_shell::ShellExt;
let shell = app_handle.shell();let output = tauri::async_runtime::block_on(async move {    shell        .command("echo")        .args(["Hello from Rust!"])        .output()        .await        .unwrap()});if output.status.success() {    println!("Result: {:?}", String::from_utf8(output.stdout));} else {    println!("Exit with code: {}", output.status.code().unwrap());}Permissions
By default all plugin commands are blocked and cannot be accessed. You must define a list of permissions in your capabilities configuration.
See Permissions Overview for more information.
{  "$schema": "../gen/schemas/desktop-schema.json",  "identifier": "main-capability",  "description": "Capability for the main window",  "windows": ["main"],  "permissions": [    {      "identifier": "shell:allow-execute",      "allow": [        {          "name": "exec-sh",          "cmd": "sh",          "args": [            "-c",            {              "validator": "\\S+"            }          ],          "sidecar": false        }      ]    }  ]}| Permission | Description | 
|---|---|
| shell:allow-execute | Enables the execute command without any pre-configured scope. | 
| shell:deny-execute | Denies the execute command without any pre-configured scope. | 
| shell:allow-kill | Enables the kill command without any pre-configured scope. | 
| shell:deny-kill | Denies the kill command without any pre-configured scope. | 
| shell:allow-open | Enables the open command without any pre-configured scope. | 
| shell:deny-open | Denies the open command without any pre-configured scope. | 
| shell:allow-stdin-write | Enables the stdin_write command without any pre-configured scope. | 
| shell:deny-stdin-write | Denies the stdin_write command without any pre-configured scope. | 
© 2024 Tauri Contributors. CC-BY / MIT