Skip to content
WEB EXTENSION ENGINE

A better way to
build browser
extensions.

Epos gives you a zero-config workflow and powerful built-in features that work across all execution contexts with no extra setup.
WORKFLOW
01

Install

Install Epos from the Chrome Web Store.
02

Connect

Connect a local project folder.
03

Develop

Epos runs your code in the browser.
04

Export

Click Export to get a ZIP bundle.

Extension Runtime

Epos is not a boilerplate, framework, or bundler. It is a web extension runtime that runs your code directly in the browser during development.

Simple Setup

Just describe which files to load and where.

epos.json
{
  "name": "My Extension",
  "targets": [
    {
      "matches": "*://*.example.com/*",
      "load": ["main.css", "main.js"]
    },
    {
      "matches": "<popup>",
      "load": ["popup.css", "popup.js"]
    },
    {
      "matches": "<background>",
      "load": ["background.js"]
    }
  ]
}

Powerful Features

  • Cross-context messaging with auto routing
  • Reactive state with automatic synchronization
  • State persistence to IndexedDB
  • File storage for files and data
  • Automatic code injection
  • Preconfigured Shadow DOM
  • Simple React integration
  • CORS-free fetch for web pages
  • Browser APIs support for every extension context
  • Invisible web pages for background automation
  • Granular reloading without full extension reload
  • Dedicated project dashboard
  • One-click export
  • And plenty more!

Unified Messaging

The simplest API for cross-context communication. Smart automatic routing. Works in every context.

// In background:
epos.bus.on('math:sum', (a, b) => a + b)

// On web page:
const result = await epos.bus.send('math:sum', 1, 2)

State with Real-Time Sync

Modify your state in one context, see the changes in all other contexts instantly.

const state = await epos.state.connect()

// Modify like a regular object.
// All changes are synced real-time!
state.items = []
state.items.push('Hello world!')

Storage for Files and Data

Store and access your files and data in every context. Powered by IndexedDB.

// Store in background:
await epos.storage.set('user-pic', imageFile)

// Access later in popup:
const pic = await epos.storage.get('user-pic')

Works Out of the Box

Every feature works seamlessly across all extension contexts. All required setup is handled automatically.

// The same API for every context:
// background, popup, side panel, web pages, iframes
import epos from 'epos'

Start building with Epos

Install Epos and start building your next extension.

MIT Licensed
EposLabs, 2026