This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
mobilecritical PriorityID: tauri2-multiwindow-granular-capability-scoping

Tauri 2.0 Multi-Window Granular Capability Scoping Standard

Enforces compile-time Access Control List (ACL) capability partitioning and strict window label binding in Tauri 2.0 desktop and mobile targets. Eliminates privilege escalation by preventing auxiliary webviews (such as OAuth flows, document viewers, and untrusted embeds) from inheriting ambient native capabilities or wildcard IPC permissions.

Prohibited Anti-Pattern: Wildcard Window Capability Granting Arbitrary IPC and Plugin Execution to Untrusted Child Webviews

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Tauri 2.0 Multi-Window Granular Capability Scoping Standard - Enforces compile-time Access Control List (ACL) capability partitioning and strict window label binding in Tauri 2.0 desktop and mobile targets. Eliminates privilege escalation by preventing auxiliary webviews (such as OAuth flows, document viewers, and untrusted embeds) from inheriting ambient native capabilities or wildcard IPC permissions.
globs: src-tauri/capabilities/**/*.json, src-tauri/tauri.conf.json, src-tauri/src/**/*.rs, src/**/*.{ts,tsx}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/tauri2-multiwindow-granular-capability-scoping"
---

# Tauri 2.0 Multi-Window Granular Capability Scoping Standard

> **Severity**: CRITICAL | **Category**: mobile
> **Anti-Pattern Warning**: Wildcard Window Capability Granting Arbitrary IPC and Plugin Execution to Untrusted Child Webviews

## System Constraints
You are a Principal Security Architect enforcing the Tauri 2.0 Multi-Window Granular Capability Scoping Standard. Mandate compile-time separation of IPC permissions across all webview contexts. Auxiliary and child webviews must never inherit core or elevated permissions. Block any configuration or runtime implementation that uses wildcard window patterns or fails to explicitly isolate native mobile/desktop plugin access per window label.

## Strict Guidelines
- Engineers MUST ALWAYS isolate distinct webview windows by binding explicit, non-overlapping window labels in dedicated capability files under `src-tauri/capabilities/`.
- Engineers MUST NOT specify wildcard patterns (`"windows": ["*"]`) in any capability manifest granting privileged permissions (`fs:*`, `shell:*`, `http:*`, or native platform APIs).
- Child windows and auxiliary webviews (e.g., OAuth redirects, previews, report renders) MUST be restricted to zero-trust capabilities containing strictly defined IPC endpoints.
- Engineers MUST configure isolated Content Security Policies (CSP) per window or webview context, disallowing `unsafe-inline` and `unsafe-eval` in windows handling dynamic content.
- Rust IPC command handlers MUST inspect caller identity using `tauri::ipc::Request` or verify the emitting window label when executing multi-tenant or state-mutating actions.
- Dynamic window creation in frontend TypeScript MUST use statically declared window labels that map directly to pre-compiled capability sets.

## Bad vs Good Implementations
### Per-Window Capability Definition and Safe Window Instantiation

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Creating webviews with dynamic or unconstrained labels alongside wildcard capabilities (`windows: ["*"]`) permits any dynamically spawned window to execute critical native commands (e.g., filesystem, shell, backup routines), leading to complete sandbox breakout if the viewer displays untrusted content.
```typescript
// ANTI-PATTERN: Spawning secondary window without capability boundaries,
// relying on default broad capability matching with wildcard windows.
import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import { invoke } from '@tauri-apps/api/core';

export async function openReportViewer(reportUrl: string): Promise<void> {
  // Anti-pattern: Generates dynamic, uncontrolled labels that fall back to wildcard ACLs
  const randomId = Math.random().toString(36).substring(7);
  const viewer = new WebviewWindow(`viewer-${randomId}`, {
    url: reportUrl,
    title: 'Report Preview',
    // Exposes native internal IPC hooks to untrusted or external documents
  });

  await viewer.once('tauri://created', () => {
    // Anti-pattern: Child window can invoke root-level administrative commands
    invoke('execute_system_backup');
  });
}
```

#### Production Standard (Correct)
> **Standard**: Enforces a static, audited window label (`isolated-document-preview`) configured in `src-tauri/capabilities/preview.json` with zero access to shell or host fs APIs. Any attempt from this window to call unlisted core commands is rejected at compile time and runtime by the Tauri 2.0 IPC kernel.
```typescript
// PRODUCTION STANDARD: Strictly bounded window creation with compile-time scoped capabilities.
import { WebviewWindow } from '@tauri-apps/api/webviewWindow';
import { invoke } from '@tauri-apps/api/core';

// Static, strictly mapped window label validated by `src-tauri/capabilities/preview.json`
export const PREVIEW_WINDOW_LABEL = 'isolated-document-preview' as const;

export async function openReportViewer(safeReportId: string): Promise<void> {
  const existing = await WebviewWindow.getByLabel(PREVIEW_WINDOW_LABEL);
  if (existing) {
    await existing.setFocus();
    return;
  }

  // Statically mapped window label: permissions restricted strictly to `preview.json`
  const viewer = new WebviewWindow(PREVIEW_WINDOW_LABEL, {
    url: `/preview?reportId=${encodeURIComponent(safeReportId)}`,
    title: 'Sanitized Document Preview',
    // Enforce webview isolation: no ambient privilege leak
  });

  await viewer.once('tauri://created', async () => {
    // Command is explicitly scoped to PREVIEW_WINDOW_LABEL in Rust capability manifest
    await invoke('fetch_sanitized_report', { reportId: safeReportId });
  });
}
```

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 Granular Capability Scoping Standard

Tauri 2.0 Multi-Window Granular Capability Scoping Standard defines an industrial-grade behavioral standard for mobile engineering. Enforces compile-time Access Control List (ACL) capability partitioning and strict window label binding in Tauri 2.0 desktop and mobile targets. Eliminates privilege escalation by preventing auxiliary webviews (such as OAuth flows, document viewers, and untrusted embeds) from inheriting ambient native capabilities or wildcard IPC permissions. 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: Wildcard Window Capability Granting Arbitrary IPC and Plugin Execution to Untrusted Child 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 DriftWildcard Window Capability Granting Arbitrary IPC and Plugin Execution to Untrusted Child 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 distinct webview windows by binding explicit, non-overlapping window labels in dedicated capability files under `src-tauri/capabilities/`.

Engineers MUST ALWAYS isolate distinct webview windows by binding explicit, non-overlapping window labels in dedicated capability files under `src-tauri/capabilities/`.

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 specify wildcard patterns (`"windows"

Engineers MUST NOT specify wildcard patterns (`"windows": ["*"]`) in any capability manifest granting privileged permissions (`fs:*`, `shell:*`, `http:*`, or native platform APIs).

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

Child windows and auxiliary webviews (e.g., OAuth redirects, previews, report renders) MUST be restricted to zero-trust capabilities containing strictly defined IPC endpoints.

Child windows and auxiliary webviews (e.g., OAuth redirects, previews, report renders) MUST be restricted to zero-trust capabilities containing strictly defined IPC endpoints.

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

Engineers MUST configure isolated Content Security Policies (CSP) per window or webview context, disallowing `unsafe-inline` and `unsafe-eval` in windows handling dynamic content.

Engineers MUST configure isolated Content Security Policies (CSP) per window or webview context, disallowing `unsafe-inline` and `unsafe-eval` in windows handling dynamic content.

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

Rust IPC command handlers MUST inspect caller identity using `tauri

Rust IPC command handlers MUST inspect caller identity using `tauri::ipc::Request` or verify the emitting window label when executing multi-tenant or state-mutating actions.

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.
6

Dynamic window creation in frontend TypeScript MUST use statically declared window labels that map directly to pre-compiled capability sets.

Dynamic window creation in frontend TypeScript MUST use statically declared window labels that map directly to pre-compiled capability sets.

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 Granular Capability Scoping Standard critical for AI coding assistants?

Enforces compile-time Access Control List (ACL) capability partitioning and strict window label binding in Tauri 2.0 desktop and mobile targets. Eliminates privilege escalation by preventing auxiliary webviews (such as OAuth flows, document viewers, and untrusted embeds) from inheriting ambient native capabilities or wildcard IPC permissions. 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 (Wildcard Window Capability Granting Arbitrary IPC and Plugin Execution to Untrusted Child 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