This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
mobilecritical PriorityID: tauri2-multiwebview-ipc-zero-copy-isolation

Tauri 2.0 Multi-WebView IPC Zero-Copy Deserialization Isolation

Mandates strict boundary fencing and memory region ownership handoffs for binary payload transfers between native Rust backends and multi-webview runtimes in Tauri 2.0 mobile architectures. Enforces single-consumer buffer ownership, zero-copy channel isolation, and explicit webview origin/label verification to prevent cross-webview data leaks, buffer mutation races, and privilege escalation.

Prohibited Anti-Pattern: Unfenced Global Binary IPC Broadcast with Mutable Shared Buffer Reuse

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Tauri 2.0 Multi-WebView IPC Zero-Copy Deserialization Isolation - Mandates strict boundary fencing and memory region ownership handoffs for binary payload transfers between native Rust backends and multi-webview runtimes in Tauri 2.0 mobile architectures. Enforces single-consumer buffer ownership, zero-copy channel isolation, and explicit webview origin/label verification to prevent cross-webview data leaks, buffer mutation races, and privilege escalation.
globs: src-tauri/src/**/*.rs, src/**/*.{ts,tsx}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/tauri2-multiwebview-ipc-zero-copy-isolation"
---

# Tauri 2.0 Multi-WebView IPC Zero-Copy Deserialization Isolation

> **Severity**: CRITICAL | **Category**: mobile
> **Anti-Pattern Warning**: Unfenced Global Binary IPC Broadcast with Mutable Shared Buffer Reuse

## System Constraints
You are a Principal Software Architect enforcing Tauri 2.0 Multi-WebView IPC Zero-Copy Deserialization Isolation. You must ensure that binary buffers exchanged between Rust and mobile webviews strictly enforce ownership handoff, zero-copy channel segregation, and webview label fencing without JSON/Base64 overhead or cross-context memory contamination.

## Strict Guidelines
- Engineers MUST ALWAYS transfer binary payloads via typed `tauri::ipc::Response` or dedicated `tauri::ipc::Channel<Vec<u8>>` instances targeted to an explicit `Webview` or `WebviewWindow` label.
- Engineers MUST NOT serialize raw binary arrays into JSON strings or Base64 across IPC boundaries on mobile runtimes due to GC pause spikes and heap exhaustion.
- Code SHOULD immediately freeze, detach, or discard the client-side `ArrayBuffer` after handing ownership to the IPC invocation layer to prevent Time-of-Check to Time-of-Use (TOCTOU) buffer mutation races.
- Services MUST validate the calling webview's identity (`ipc::InvokeResolver` or `Webview::label`) before granting access to native memory-mapped buffers or hardware camera/sensor frames.
- Components NEVER broadcast raw memory buffers via global un-scoped event channels (`emit` or `emit_all`) when secondary webviews (such as authentication or ad frames) are active in the multi-webview hierarchy.

## Bad vs Good Implementations
### Client-Side Zero-Copy Binary IPC Dispatch with Buffer Isolation

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Encodes binary data into Base64 (causing 33% memory expansion and GC pressure on mobile devices), dispatches over an un-fenced global event channel accessible to every active webview, and leaves the underlying buffer open to concurrent mutation races.
```typescript
import { emit } from '@tauri-apps/api/event';

export async function dispatchFrame(rawBuffer: Uint8Array): Promise<void> {
  // Anti-pattern: Base64 serialization over global bus without webview fencing
  const base64Data = btoa(String.fromCharCode(...rawBuffer));
  await emit('process-camera-frame', { data: base64Data });
  
  // Memory hazard: rawBuffer remains mutable in caller context while native processes it
  rawBuffer.fill(0);
}
```

#### Production Standard (Correct)
> **Standard**: Transfers binary data directly via native IPC channels using ArrayBuffer, scopes the invocation to a specific webview target, and returns an isolated typed response without JSON/Base64 serialization overhead.
```typescript
import { invoke } from '@tauri-apps/api/core';

export async function dispatchFrame(rawBuffer: Uint8Array): Promise<Uint8Array> {
  // Invariant: Enforce single-owner transfer and target specific webview endpoint
  const isolatedBuffer = rawBuffer.slice(0).buffer;
  
  // Invoke command with binary response; Rust returns raw bytes via IPC Response
  const result = await invoke<ArrayBuffer>('process_isolated_frame', isolatedBuffer, {
    headers: {
      'X-Target-Webview': 'camera-preview-primary'
    }
  });

  // Enforce caller buffer detachment by disallowing subsequent writes
  return new Uint8Array(result);
}
```

### Rust-Side Zero-Copy Deserialization with Webview Label Verification

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Deserializes binary data through a generic serde_json dynamic object, failing to verify webview identity and forcing dynamic string allocations on the native thread.
```rust
use tauri::{AppHandle, Manager};

#[tauri::command]
pub fn process_isolated_frame(app: AppHandle, payload: serde_json::Value) -> Result<String, String> {
    // Anti-pattern: Parsing payload as untyped JSON without caller fencing
    let base64_str = payload["data"].as_str().ok_or("Missing data")?;
    let decoded = tauri::utils::debug_eprintln!("Decoded frame len: {}", base64_str.len());
    Ok("processed".to_string())
}
```

#### Production Standard (Correct)
> **Standard**: Validates the calling Webview label to prevent cross-frame privilege escalation, extracts the payload as a raw byte slice directly from `ipc::Request<'_>`, and returns a zero-copy `Response` envelope without JSON intermediaries.
```rust
use tauri::ipc::{Request, Response};
use tauri::Webview;

#[tauri::command]
pub fn process_isolated_frame(webview: Webview, request: Request<'_>) -> Result<Response, String> {
    // Invariant 1: Boundary fencing based on authorized webview label
    if webview.label() != "camera-preview-primary" {
        return Err("Unauthorized caller webview".to_string());
    }

    // Invariant 2: Direct slice acquisition without JSON deserialization
    let binary_payload: &[u8] = request.body();
    if binary_payload.is_empty() {
        return Err("Zero-length payload rejected".to_string());
    }

    // Process binary slice in-place or transfer ownership
    let mut response_data = Vec::with_capacity(binary_payload.len());
    response_data.extend_from_slice(binary_payload);

    // Return binary response with explicit mime-type, bypassing serialization
    Ok(Response::new(response_data))
}
```

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-WebView IPC Zero-Copy Deserialization Isolation

Tauri 2.0 Multi-WebView IPC Zero-Copy Deserialization Isolation defines an industrial-grade behavioral standard for mobile engineering. Mandates strict boundary fencing and memory region ownership handoffs for binary payload transfers between native Rust backends and multi-webview runtimes in Tauri 2.0 mobile architectures. Enforces single-consumer buffer ownership, zero-copy channel isolation, and explicit webview origin/label verification to prevent cross-webview data leaks, buffer mutation races, and privilege escalation. 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: Unfenced Global Binary IPC Broadcast with Mutable Shared Buffer Reuse 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 DriftUnfenced Global Binary IPC Broadcast with Mutable Shared Buffer ReuseCritical
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 transfer binary payloads via typed `tauri

Engineers MUST ALWAYS transfer binary payloads via typed `tauri::ipc::Response` or dedicated `tauri::ipc::Channel<Vec<u8>>` instances targeted to an explicit `Webview` or `WebviewWindow` label.

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 serialize raw binary arrays into JSON strings or Base64 across IPC boundaries on mobile runtimes due to GC pause spikes and heap exhaustion.

Engineers MUST NOT serialize raw binary arrays into JSON strings or Base64 across IPC boundaries on mobile runtimes due to GC pause spikes and heap exhaustion.

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

Code SHOULD immediately freeze, detach, or discard the client-side `ArrayBuffer` after handing ownership to the IPC invocation layer to prevent Time-of-Check to Time-of-Use (TOCTOU) buffer mutation races.

Code SHOULD immediately freeze, detach, or discard the client-side `ArrayBuffer` after handing ownership to the IPC invocation layer to prevent Time-of-Check to Time-of-Use (TOCTOU) buffer mutation races.

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

Services MUST validate the calling webview's identity (`ipc

Services MUST validate the calling webview's identity (`ipc::InvokeResolver` or `Webview::label`) before granting access to native memory-mapped buffers or hardware camera/sensor 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.
5

Components NEVER broadcast raw memory buffers via global un-scoped event channels (`emit` or `emit_all`) when secondary webviews (such as authentication or ad frames) are active in the multi-webview hierarchy.

Components NEVER broadcast raw memory buffers via global un-scoped event channels (`emit` or `emit_all`) when secondary webviews (such as authentication or ad frames) are active in the multi-webview hierarchy.

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-WebView IPC Zero-Copy Deserialization Isolation critical for AI coding assistants?

Mandates strict boundary fencing and memory region ownership handoffs for binary payload transfers between native Rust backends and multi-webview runtimes in Tauri 2.0 mobile architectures. Enforces single-consumer buffer ownership, zero-copy channel isolation, and explicit webview origin/label verification to prevent cross-webview data leaks, buffer mutation races, and privilege escalation. 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 (Unfenced Global Binary IPC Broadcast with Mutable Shared Buffer Reuse) 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