This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
mobilecritical PriorityID: tauri-v2-multi-window-ipc-sandbox-guardrail

Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation

Enforces strict window-scoped capability boundaries and isolated IPC channels across heterogeneous webviews in Tauri 2.0 mobile and desktop environments. Prevents cross-frame event sniffing, privilege escalation, and unauthorized core plugin invocation by isolating permissions strictly through Tauri 2.0 capability manifests and runtime WebviewWindow label validation.

Prohibited Anti-Pattern: Global IPC Broadcast and Wildcard Permission Escalation Across Untrusted Heterogeneous Webviews

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation - Enforces strict window-scoped capability boundaries and isolated IPC channels across heterogeneous webviews in Tauri 2.0 mobile and desktop environments. Prevents cross-frame event sniffing, privilege escalation, and unauthorized core plugin invocation by isolating permissions strictly through Tauri 2.0 capability manifests and runtime WebviewWindow label validation.
globs: src-tauri/capabilities/**/*.json, src-tauri/tauri.conf.json, src-tauri/src/**/*.rs, src/**/*.ts, src/**/*.tsx
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/tauri-v2-multi-window-ipc-sandbox-guardrail"
---

# Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation

> **Severity**: CRITICAL | **Category**: mobile
> **Anti-Pattern Warning**: Global IPC Broadcast and Wildcard Permission Escalation Across Untrusted Heterogeneous Webviews

## System Constraints
You are a Principal Security Architect enforcing Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation. You must ensure that all IPC command handlers, event emitters, and dynamic WebviewWindow instances strictly adhere to isolated, capability-bound contracts. Prevent cross-origin sniffing, wildcard permissions, and unvalidated origin invocation across mobile/desktop frames.

## Strict Guidelines
- Engineers MUST ALWAYS isolate permissions using Tauri 2.0 Capability JSON manifests targeted explicitly to precise window labels (`windows: ["auth-webview", "main"]`) rather than using wildcard asterisks (`windows: ["*"]`).
- Engineers MUST NOT emit IPC events using global broadcast methods (`app.emit(...)`) when sending sensitive data; engineers MUST target specific window instances via `app.emit_to(...)` or window-scoped emitter channels.
- Command handlers MUST validate the calling window context via `tauri::ipc::Request` or `tauri::WebviewWindow` arguments in Rust before executing privileged native operations.
- Frontend components NEVER invoke global IPC channels directly from dynamic or untrusted secondary webview frames without asserting cryptographic session tokens or ephemeral single-use channel nonces.
- Services MUST declare granular command access lists (`permissions: ["core:default", "fs:allow-read-text-file"]`) per capability file instead of assigning ambient administrative capabilities across multiple webview frames.

## Bad vs Good Implementations
### Tauri 2.0 Window-Targeted Event Emission and Capability Manifest

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Using app.emit() globally broadcasts the sensitive authentication token to every mounted webview and embedded web frame, allowing malicious or low-privileged secondary webviews to intercept the payload.
```rust
// BAD: Global IPC emission leaks sensitive payload to all webview frames
use tauri::{AppHandle, Emitter};

#[tauri::command]
async fn sync_user_credentials(app: AppHandle, token: String) -> Result<(), String> {
    // Ambient broadcast vulnerable to cross-window sniffing by untrusted iframes/windows
    app.emit("auth-token-synced", token)
        .map_err(|e| e.to_string())
}
```

#### Production Standard (Correct)
> **Standard**: The Rust handler inspects the calling WebviewWindow label to verify authority and uses emit_to with the explicit target window label, preventing credential interception across heterogeneous webview contexts.
```rust
// GOOD: Explicit window scoping and authenticated window verification
use tauri::{AppHandle, Emitter, WebviewWindow};

#[tauri::command]
async fn sync_user_credentials(
    _app: AppHandle,
    window: WebviewWindow,
    token: String
) -> Result<(), String> {
    // Assert origin label matches the designated high-integrity window
    if window.label() != "main-secure" {
        return Err("Unauthorized IPC caller: Window lacks capability contract".into());
    }

    // Emit strictly to the designated target window frame
    window.emit_to("main-secure", "auth-token-synced", token)
        .map_err(|e| e.to_string())
}
```

### Dynamic Webview Instantiation with Sandboxed Capabilities (TypeScript)

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Dynamic webviews created without explicit sandbox restrictions and inheriting root capability privileges can trigger native commands across shared backend IPC boundaries.
```typescript
// BAD: Creating dynamic webview without isolated scope and executing raw global invoke
import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import { invoke } from '@tauri-apps/api/core';

export async function spawnUntrustedViewer(remoteUrl: string) {
  const child = new WebviewWindow('untrusted-viewer', {
    url: remoteUrl,
  });
  // Ambient execution without isolating capability contracts
  await invoke('execute_privileged_task');
}
```

#### Production Standard (Correct)
> **Standard**: Dynamic frames are explicitly isolated with dedicated channel primitives and incognito flags, ensuring zero IPC command overlap with primary app state.
```typescript
// GOOD: Isolated capability contract and defensive window instantiation
import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import { Channel } from '@tauri-apps/api/core';

interface IsolatedPayload {
  readonly status: 'ready' | 'error';
}

export async function spawnUntrustedViewer(remoteUrl: string): Promise<WebviewWindow> {
  const channel = new Channel<IsolatedPayload>();
  channel.onmessage = (message) => {
    if (message.status !== 'ready') {
      throw new Error('IPC Handshake failed');
    }
  };

  return new WebviewWindow('isolated-untrusted-frame', {
    url: remoteUrl,
    // Ensure sandboxing invariants for mobile/embedded views
    incognito: true,
    acceptFirstMouse: false
  });
}
```

Recommended MCP Servers (mcp-serverlist.com)

Equip agent with system tools to verify code for this stack.

Recommended Agent Skills (askills.dev)

Ready-to-use executable skill functions tailored to this stack.

Architectural Specification & Invariant Rationale

Architectural Invariant Design: Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation

Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation defines an industrial-grade behavioral standard for mobile engineering. Enforces strict window-scoped capability boundaries and isolated IPC channels across heterogeneous webviews in Tauri 2.0 mobile and desktop environments. Prevents cross-frame event sniffing, privilege escalation, and unauthorized core plugin invocation by isolating permissions strictly through Tauri 2.0 capability manifests and runtime WebviewWindow label validation. Modern software architectures require strict adherence to deterministic patterns to guarantee high availability, maintainability, and zero security vulnerabilities.

Framework Paradigm Shift & Drift MechanicsLLMs are trained on millions of open-source repositories containing outdated code, legacy idioms, and unpatched antipatterns. When coding assistants generate implementations for this stack, they default to common statistical tokens: Global IPC Broadcast and Wildcard Permission Escalation Across Untrusted Heterogeneous Webviews Without an explicit system instruction file, developers spend hours debugging silent failures.
Failure Modes & Production Blast Radius

Hazard Analysis: What Breaks Without This Rule

The following failure modes have been cataloged from hundreds of hours of production code reviews where AI assistants produced non-compliant implementations:

Failure ModeAI Symptom (The Anti-Pattern)SeverityProduction Impact & Remedy
AI Hallucination & Deprecation DriftGlobal IPC Broadcast and Wildcard Permission Escalation Across Untrusted Heterogeneous WebviewsCritical
Violating this industrial standard introduces regression bugs, security risks, and unexpected runtime failures in production.
Enforce explicit behavioral system directives across all AI coding assistants in your repository.
Silent Architecture InconsistencyAI assistants produce mixed paradigms across files, creating fragmented codebase conventions.Medium
Increases cognitive load during code reviews and leads to maintenance debt across engineering teams.
Pin project conventions in .cursor/rules, CLAUDE.md, and AGENTS.md so all team agents follow identical guardrails.
Architectural Directives in Detail

Step-by-Step Production Directives

Each rule constraint below is injected into the AI agent's system prompt to establish deterministic boundaries:

1

Engineers MUST ALWAYS isolate permissions using Tauri 2.0 Capability JSON manifests targeted explicitly to precise window labels (`windows

Engineers MUST ALWAYS isolate permissions using Tauri 2.0 Capability JSON manifests targeted explicitly to precise window labels (`windows: ["auth-webview", "main"]`) rather than using wildcard asterisks (`windows: ["*"]`).

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
2

Engineers MUST NOT emit IPC events using global broadcast methods (`app.emit(...)`) when sending sensitive data

Engineers MUST NOT emit IPC events using global broadcast methods (`app.emit(...)`) when sending sensitive data; engineers MUST target specific window instances via `app.emit_to(...)` or window-scoped emitter channels.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
3

Command handlers MUST validate the calling window context via `tauri

Command handlers MUST validate the calling window context via `tauri::ipc::Request` or `tauri::WebviewWindow` arguments in Rust before executing privileged native operations.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
4

Frontend components NEVER invoke global IPC channels directly from dynamic or untrusted secondary webview frames without asserting cryptographic session tokens or ephemeral single-use channel nonces.

Frontend components NEVER invoke global IPC channels directly from dynamic or untrusted secondary webview frames without asserting cryptographic session tokens or ephemeral single-use channel nonces.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
5

Services MUST declare granular command access lists (`permissions

Services MUST declare granular command access lists (`permissions: ["core:default", "fs:allow-read-text-file"]`) per capability file instead of assigning ambient administrative capabilities across multiple webview frames.

Rationale:AI models frequently generate unconstrained code here because statistical language distributions lack project-specific architectural context. Mandating this directive ensures that generated code adheres to verified industrial production requirements.
Enforcement:Integrated into the Agent Pack rule file. When Cursor, Claude Code, or Codex processes this prompt, it applies this constraint before emitting syntax.
Technical Questions & Answers

Frequently Asked Technical Questions

Common questions developers face when configuring AI coding assistants for this stack:

Q:Why is Tauri 2.0 Multi-Window Dynamic IPC Channel Sandbox Isolation critical for AI coding assistants?

Enforces strict window-scoped capability boundaries and isolated IPC channels across heterogeneous webviews in Tauri 2.0 mobile and desktop environments. Prevents cross-frame event sniffing, privilege escalation, and unauthorized core plugin invocation by isolating permissions strictly through Tauri 2.0 capability manifests and runtime WebviewWindow label validation. Without explicit behavioral boundaries, AI coding assistants (Cursor, Claude Code, Windsurf, Codex) rely on training data averages, which frequently produce deprecated, inefficient, or vulnerable code patterns.

Q:How does adopting this rule prevent AI hallucinations?

This rule explicitly declares what the AI must avoid (Global IPC Broadcast and Wildcard Permission Escalation Across Untrusted Heterogeneous Webviews) and prescribes verified positive examples. Grounding the LLM with negative and positive pairs eliminates guesswork.

Q:Which AI coding environments are supported?

This specification is multi-platform compatible: Cursor (.cursor/rules/*.mdc & .cursorrules), Anthropic Claude Code (CLAUDE.md), Windsurf (.windsurfrules), Codex / Cline (AGENTS.md), and GitHub Copilot (.github/copilot-instructions.md).

Q:Can I combine this rule with other technology stacks?

Yes. Use the Interactive Stack Builder or download an Agent Pack to merge this rule with other frontend, backend, database, security, and DevOps rules without syntax collision.

Open Specification · CC BY 4.0·Free for Personal, Team & Commercial In-Repo Use

Citation & Open Source Attribution Guidelines

This specification is licensed under Creative Commons Attribution 4.0 International (CC BY 4.0). You are completely free to adapt and share this rule in your workspace. If citing, including in public AI benchmark datasets, or redistributing, attribution to AgentRules.org is required.

Related MOBILE Rules

View all rules →
1 Rule in Stack

Tauri