Positioner
Position your windows at well-known locations.
This plugin is a port of electron-positioner for Tauri.
This plugin requires a Rust version of at least 1.77.2
| Platform | Level | Notes |
|---|---|---|
| windows | ||
| linux | ||
| macos | ||
| android | | |
| ios | |
Install the positioner plugin to get started.
Use your project’s package manager to add the dependency:
npm run tauri add positioneryarn run tauri add positionerpnpm tauri add positionerdeno task tauri add positionerbun tauri add positionercargo tauri add positioner-
Run the following command in the
src-taurifolder to add the plugin to the project’s dependencies inCargo.toml:cargo add tauri-plugin-positioner --target 'cfg(any(target_os = "macos", windows, target_os = "linux"))' -
Modify
lib.rsto initialize the plugin:src-tauri/src/lib.rs #[cfg_attr(mobile, tauri::mobile_entry_point)]pub fn run() {tauri::Builder::default().setup(|app| {#[cfg(desktop)]app.handle().plugin(tauri_plugin_positioner::init());Ok(())}).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-positioneryarn add @tauri-apps/plugin-positionerpnpm add @tauri-apps/plugin-positionerdeno add npm:@tauri-apps/plugin-positionerbun add @tauri-apps/plugin-positioner
Additional setup is required to get tray-relative positions to work.
-
Add
tray-iconfeature to yourCargo.tomlfile:src-tauri/Cargo.toml [dependencies]tauri-plugin-positioner = { version = "2.0.0", features = ["tray-icon"] } -
Setup
on_tray_eventfor positioner plugin:src-tauri/src/lib.rs pub fn run() {tauri::Builder::default()// This is required to get tray-relative positions to work.setup(|app| {#[cfg(desktop)]{app.handle().plugin(tauri_plugin_positioner::init());tauri::tray::TrayIconBuilder::new().on_tray_icon_event(|tray_handle, event| {tauri_plugin_positioner::on_tray_event(tray_handle.app_handle(), &event);}).build(app)?;}Ok(())}).run(tauri::generate_context!()).expect("error while running tauri application");}
The plugin’s APIs are available through the JavaScript guest bindings:
import { moveWindow, Position } from '@tauri-apps/plugin-positioner';// when using `"withGlobalTauri": true`, you may use// const { moveWindow, Position } = window.__TAURI__.positioner;
moveWindow(Position.TopRight);You can import and use the Window trait extension directly through Rust:
use tauri_plugin_positioner::{WindowExt, Position};
let mut win = app.get_webview_window("main").unwrap();let _ = win.as_ref().window().move_window(Position::TopRight);By default all potentially dangerous plugin commands and scopes are blocked and cannot be accessed. You must modify the permissions in your capabilities configuration to enable these.
See the Capabilities Overview for more information and the step by step guide to use plugin permissions.
{ "permissions": [ ..., "positioner:default", ]}Default Permission
Allows the moveWindow and handleIconState APIs
This default permission set includes the following:
allow-move-windowallow-move-window-constrainedallow-set-tray-icon-state
Permission Table
| Identifier | Description |
|---|---|
|
|
Enables the move_window command without any pre-configured scope. |
|
|
Denies the move_window command without any pre-configured scope. |
|
|
Enables the move_window_constrained command without any pre-configured scope. |
|
|
Denies the move_window_constrained command without any pre-configured scope. |
|
|
Enables the set_tray_icon_state command without any pre-configured scope. |
|
|
Denies the set_tray_icon_state command without any pre-configured scope. |
© 2025 Tauri Contributors. CC-BY / MIT