This specification is maintained by the AgentRules Working Group. Have enhancements or want to claim maintainership?Submit Specification →
mobilecritical PriorityID: capacitor-7-zero-copy-arraybuffer-transfer-invariant

Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant

Mandates direct ArrayBuffer binary transport across the Capacitor 7 native-to-web bridge, strictly prohibiting Base64 or numeric array serialization. Prevents high-frequency garbage collector thrashing, IPC latency spikes, and 33% heap inflation during binary data streaming (BLE, camera frames, SQLite exports, and audio). Enforces direct TypedArray views and ownership transfer semantics on incoming bridge buffers.

Prohibited Anti-Pattern: Serializing Binary Payloads as Base64 Strings or Number Arrays Over the Bridge

Export Ready-to-Drop Configuration

Select format below to copy code or download file directly.

---
description: Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant - Mandates direct ArrayBuffer binary transport across the Capacitor 7 native-to-web bridge, strictly prohibiting Base64 or numeric array serialization. Prevents high-frequency garbage collector thrashing, IPC latency spikes, and 33% heap inflation during binary data streaming (BLE, camera frames, SQLite exports, and audio). Enforces direct TypedArray views and ownership transfer semantics on incoming bridge buffers.
globs: src/**/*.{ts,tsx}, ios/Plugin/**/*.{swift,m}, android/src/main/**/*.{java,kt}
alwaysApply: true
verified_by: "agentrules.org"
license: "CC-BY-4.0"
source: "https://agentrules.org/rules/capacitor-7-zero-copy-arraybuffer-transfer-invariant"
---

# Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant

> **Severity**: CRITICAL | **Category**: mobile
> **Anti-Pattern Warning**: Serializing Binary Payloads as Base64 Strings or Number Arrays Over the Bridge

## System Constraints
You are a Principal Mobile Architect enforcing Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariants. Mandate that all binary payloads crossing the bridge use native ArrayBuffer transfer mechanisms introduced in Capacitor 7. Prohibit Base64 marshaling, numeric array wrapping, and unnecessary memory copies on both the native and web layers. Reject any PR that causes garbage collector churn or bridge serialization overhead.

## Strict Guidelines
- Engineers MUST ALWAYS transmit binary payloads across the Capacitor 7 bridge as raw ArrayBuffer instances rather than Base64-encoded strings or JSON arrays.
- Engineers MUST NOT invoke Base64 transformation helpers (`btoa`, `atob`, `Buffer.from(..., 'base64')`, or native Base64 encoders) for high-frequency or binary data (>1KB) crossing the bridge.
- Code SHOULD wrap returned bridge `ArrayBuffer` instances directly into appropriate `TypedArray` views (e.g., `Uint8Array`, `Float32Array`, `DataView`) without allocating intermediate copies via `.slice()`.
- Services MUST detach or unreference binary buffers immediately once processed by downstream Web Workers or pipeline consumers to allow prompt native-side memory reclamation.
- Components NEVER execute byte-by-byte iteration or string conversions inside the primary UI thread for incoming bridge event streams.

## Bad vs Good Implementations
### High-Frequency Binary Bridge Transfer (Sensor / BLE Stream)

#### Bad Antipattern (AI Common Hallucination)
> **Why it fails**: Transporting binary data as Base64 strings generates massive string allocations, triggers WebKit/V8 garbage collection pauses, and wastes CPU cycles parsing text back into byte arrays.
```typescript
import { registerPlugin } from '@capacitor/core';

interface LegacyBlePlugin {
  receivePacket(): Promise<{ data: string }>; // Base64 encoded string
}

const BleBridge = registerPlugin<LegacyBlePlugin>('BlePlugin');

export async function getSensorFrame(): Promise<Uint8Array> {
  // ANTI-PATTERN: Base64 serialization causes a 33% payload blowup,
  // string allocation overhead, and synchronous decoding frame drops.
  const response = await BleBridge.receivePacket();
  const binaryString = atob(response.data);
  const bytes = new Uint8Array(binaryString.length);
  for (let i = 0; i < binaryString.length; i++) {
    bytes[i] = binaryString.charCodeAt(i);
  }
  return bytes;
}
```

#### Production Standard (Correct)
> **Standard**: Capacitor 7 native-to-web zero-copy transfer passes raw ArrayBuffer instances directly through native WebView message channels, eliminating GC pressure, Base64 inflation, and decoding latency.
```typescript
import { registerPlugin } from '@capacitor/core';

interface ZeroCopyBlePlugin {
  // Capacitor 7 allows direct ArrayBuffer returns over the native bridge
  receivePacket(): Promise<{ data: ArrayBuffer }>;
}

const BleBridge = registerPlugin<ZeroCopyBlePlugin>('BlePlugin');

export async function getSensorFrame(): Promise<Uint8Array> {
  // PRODUCTION INVARIANT: Native bridge yields ArrayBuffer directly
  // backed by shared native memory. Zero-copy TypedArray view constructed.
  const response = await BleBridge.receivePacket();
  
  if (!(response.data instanceof ArrayBuffer)) {
    throw new TypeError('Bridge invariant violated: expected raw ArrayBuffer');
  }

  return new Uint8Array(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: Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant

Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant defines an industrial-grade behavioral standard for mobile engineering. Mandates direct ArrayBuffer binary transport across the Capacitor 7 native-to-web bridge, strictly prohibiting Base64 or numeric array serialization. Prevents high-frequency garbage collector thrashing, IPC latency spikes, and 33% heap inflation during binary data streaming (BLE, camera frames, SQLite exports, and audio). Enforces direct TypedArray views and ownership transfer semantics on incoming bridge buffers. 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: Serializing Binary Payloads as Base64 Strings or Number Arrays Over the Bridge 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 DriftSerializing Binary Payloads as Base64 Strings or Number Arrays Over the BridgeCritical
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 transmit binary payloads across the Capacitor 7 bridge as raw ArrayBuffer instances rather than Base64-encoded strings or JSON arrays.

Engineers MUST ALWAYS transmit binary payloads across the Capacitor 7 bridge as raw ArrayBuffer instances rather than Base64-encoded strings or JSON arrays.

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 invoke Base64 transformation helpers (`btoa`, `atob`, `Buffer.from(..., 'base64')`, or native Base64 encoders) for high-frequency or binary data (>1KB) crossing the bridge.

Engineers MUST NOT invoke Base64 transformation helpers (`btoa`, `atob`, `Buffer.from(..., 'base64')`, or native Base64 encoders) for high-frequency or binary data (>1KB) crossing the bridge.

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 wrap returned bridge `ArrayBuffer` instances directly into appropriate `TypedArray` views (e.g., `Uint8Array`, `Float32Array`, `DataView`) without allocating intermediate copies via `.slice()`.

Code SHOULD wrap returned bridge `ArrayBuffer` instances directly into appropriate `TypedArray` views (e.g., `Uint8Array`, `Float32Array`, `DataView`) without allocating intermediate copies via `.slice()`.

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 detach or unreference binary buffers immediately once processed by downstream Web Workers or pipeline consumers to allow prompt native-side memory reclamation.

Services MUST detach or unreference binary buffers immediately once processed by downstream Web Workers or pipeline consumers to allow prompt native-side memory reclamation.

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 execute byte-by-byte iteration or string conversions inside the primary UI thread for incoming bridge event streams.

Components NEVER execute byte-by-byte iteration or string conversions inside the primary UI thread for incoming bridge event streams.

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 Capacitor 7 Native-to-WebView Zero-Copy ArrayBuffer Transfer Invariant critical for AI coding assistants?

Mandates direct ArrayBuffer binary transport across the Capacitor 7 native-to-web bridge, strictly prohibiting Base64 or numeric array serialization. Prevents high-frequency garbage collector thrashing, IPC latency spikes, and 33% heap inflation during binary data streaming (BLE, camera frames, SQLite exports, and audio). Enforces direct TypedArray views and ownership transfer semantics on incoming bridge buffers. 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 (Serializing Binary Payloads as Base64 Strings or Number Arrays Over the Bridge) 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

Capacitor