# Webext Core

> Utilities for browser extensions - proxy services for cross-context RPC, type-safe messaging, URL match patterns, fake browser for testing, job scheduling, and shadow DOM isolation.

- Skill: `timeraa/webext-core` (Agent Skill, multi-file: 10 files)
- Install (CLI): `npx skillmds@latest add timeraa/webext-core`
- Raw SKILL.md: https://api.skillmd.com/api/skills/timeraa/webext-core/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: timeraa (https://skillmd.com/u/timeraa)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/timeraa/webext-core

---


# webext-core - Browser Extension Utilities

## When to Use

Apply this skill when:
- `package.json` has any `@webext-core/*` dependency
- Code imports `defineProxyService`, `flattenPromise` from `@webext-core/proxy-service`
- Code imports `defineExtensionMessaging`, `defineWindowMessaging` from `@webext-core/messaging`
- Code uses `MatchPattern` from `@webext-core/match-patterns`
- Tests use `fakeBrowser` from `@webext-core/fake-browser`
- Code uses `defineJobScheduler` from `@webext-core/job-scheduler`
- Code uses `createIsolatedElement` from `@webext-core/isolated-element`

## Quick Reference

| Package | Purpose | Reference |
|---------|---------|-----------|
| `@webext-core/proxy-service` | Cross-context RPC — call background services from anywhere | [references/proxy-service.md](references/proxy-service.md) |
| `@webext-core/messaging` | Type-safe extension/window/custom event messaging | [references/messaging.md](references/messaging.md) |
| `@webext-core/match-patterns` | URL pattern matching utilities | [references/match-patterns.md](references/match-patterns.md) |
| `@webext-core/fake-browser` | In-memory browser API for unit testing | [references/fake-browser.md](references/fake-browser.md) |
| `@webext-core/job-scheduler` | Background job scheduling via Alarms API | [references/job-scheduler.md](references/job-scheduler.md) |
| `@webext-core/isolated-element` | Shadow DOM containers for content script UIs | [references/isolated-element.md](references/isolated-element.md) |
| `@webext-core/storage` | localStorage-like wrapper (prefer WXT storage if using WXT) | [references/storage.md](references/storage.md) |
| Cross-package patterns and anti-patterns | — | [references/patterns.md](references/patterns.md) |

## Most Common Pattern

```ts
// services/counter.ts
import { defineProxyService } from '@webext-core/proxy-service';

const [registerCounter, getCounter] = defineProxyService('CounterService', () => {
  let count = 0;
  return {
    increment: () => ++count,
    getCount: () => count,
  };
});

export { registerCounter, getCounter };

// background.ts — register the real implementation
registerCounter();

// popup or content script — call via proxy (all methods return Promise)
const counter = getCounter();
const newCount = await counter.increment();
```

