Sistema de Plugins

Por: Artiko
tauripluginsextensionesnpmcargo

Sistema de Plugins

Tauri mantiene el core minimo. Las funcionalidades adicionales se agregan mediante plugins.

Plugins oficiales

Comunicacion y red

PluginPaqueteFuncion
HTTP Client@tauri-apps/plugin-httpPeticiones HTTP
WebSocket@tauri-apps/plugin-websocketConexiones WebSocket
Shell@tauri-apps/plugin-shellEjecutar comandos del SO

Almacenamiento

PluginPaqueteFuncion
Store@tauri-apps/plugin-storeKey-value persistente
SQL@tauri-apps/plugin-sqlSQLite, MySQL, PostgreSQL
File System@tauri-apps/plugin-fsLeer/escribir archivos

UI/UX

PluginPaqueteFuncion
Dialog@tauri-apps/plugin-dialogDialogos nativos (abrir, guardar)
Clipboard@tauri-apps/plugin-clipboard-managerCopiar/pegar
Notification@tauri-apps/plugin-notificationNotificaciones del SO

Utilidades

PluginPaqueteFuncion
Updater@tauri-apps/plugin-updaterActualizaciones automaticas
Deep Link@tauri-apps/plugin-deep-linkURL schemes custom
CLI@tauri-apps/plugin-cliArgumentos de linea de comandos
Process@tauri-apps/plugin-processInfo y control del proceso
Log@tauri-apps/plugin-logLogging estructurado

Instalar un plugin

Dos pasos: dependencia Rust + paquete JavaScript.

# 1. Agregar crate Rust
cd src-tauri
cargo add tauri-plugin-store

# 2. Agregar paquete JS
npm install @tauri-apps/plugin-store

Registrar en src-tauri/src/lib.rs:

pub fn run() {
    tauri::Builder::default()
        .plugin(tauri_plugin_store::Builder::new().build())
        .run(tauri::generate_context!())
        .expect("error");
}

Usar desde JavaScript:

import { Store } from '@tauri-apps/plugin-store';

const store = await Store.load('settings.json');
await store.set('theme', 'dark');
const theme = await store.get('theme');

Permisos de plugins

Los comandos de plugins estan deshabilitados por defecto. Debes habilitar permisos en src-tauri/capabilities/default.json:

{
  "identifier": "default",
  "windows": ["main"],
  "permissions": [
    "core:default",
    "store:allow-get",
    "store:allow-set",
    "fs:allow-read-text-file",
    "dialog:allow-open"
  ]
}

Configuracion de plugins

Algunos plugins aceptan configuracion en tauri.conf.json:

{
  "plugins": {
    "http": {
      "timeout": 30
    },
    "log": {
      "level": "info"
    }
  }
}

Crear un plugin custom

Scaffold

npx @tauri-apps/cli plugin new mi-plugin

Opciones:

Estructura generada

tauri-plugin-mi-plugin/
├── src/
│   ├── lib.rs         # Entry point del plugin
│   ├── commands.rs    # Comandos expuestos
│   ├── desktop.rs     # Logica desktop
│   └── mobile.rs      # Logica movil
├── permissions/       # Permisos del plugin
├── guest-js/          # API JavaScript
├── build.rs           # Autogeneracion de permisos
└── Cargo.toml

Definir comandos

// src/commands.rs
use tauri::command;

#[command]
pub async fn process_data(input: String) -> Result<String, String> {
    Ok(format!("Procesado: {}", input))
}

Registrar permisos

En build.rs:

const COMMANDS: &[&str] = &["process_data"];

fn main() {
    tauri_plugin::Builder::new(COMMANDS).build();
}

Esto autogenera allow-process-data y deny-process-data.

Ciclo de vida

Los plugins pueden interceptar eventos:

Resumen


← Gestion de Estado | Indice | Siguiente: Seguridad y Permisos →