Epos is an opinionated engine for building Chromium browser extensions with React. While frameworks like WXT and Plasmo prioritize flexibility, Epos focuses on a zero-config experience with powerful features that work out of the box. At a high level, Epos gives you: - A cross-context messaging system - Shared state with persistence and sync - Storage for files and data - Extension APIs available in any context - Automatic script injection + Shadow DOM - A simpler setup through epos.json
👨💻 I've been building browser extensions full-time for the past 5 years. Not small demo projects, but large, data-heavy products with complex UI, lots of features, real users, and revenue.
Over that time I kept running into the same problems in extension development, so I built internal tools to solve them. During the past year, I started combining those tools into one fully preconfigured engine, and today I want to share it with you.
⚡ Epos is not a framework or a boilerplate. It is a browser extension that connects to your local folder, runs your code directly in the browser, and exports a production-ready bundle when you are ready to ship.
The goal is to remove as many annoying extension-specific chores as possible so you can focus on building the actual product. There are several features that make Epos stand out, but instead of listing everything here, I want to highlight two of my favorites:
🔄 Unified Messaging
It provides a simple API for cross-context communication. You just call `.on()` and `.send()` to register and send events, and Epos handles the routing automatically. It requires no configuration and works in every extension context, even on regular web pages.
📚 Shared State
Epos provides a shared state object that you can work with like a regular JavaScript object, while under the hood it is automatically synced across all contexts and persisted to IndexedDB. Thinking about state as a normal object makes the whole application much easier to reason about. You just manage the data and let Epos handle the hard parts.
HARPA AI
Hey everyone,
👨💻 I've been building browser extensions full-time for the past 5 years. Not small demo projects, but large, data-heavy products with complex UI, lots of features, real users, and revenue.
Over that time I kept running into the same problems in extension development, so I built internal tools to solve them. During the past year, I started combining those tools into one fully preconfigured engine, and today I want to share it with you.
⚡ Epos is not a framework or a boilerplate. It is a browser extension that connects to your local folder, runs your code directly in the browser, and exports a production-ready bundle when you are ready to ship.
The goal is to remove as many annoying extension-specific chores as possible so you can focus on building the actual product. There are several features that make Epos stand out, but instead of listing everything here, I want to highlight two of my favorites:
🔄 Unified Messaging
It provides a simple API for cross-context communication. You just call `.on()` and `.send()` to register and send events, and Epos handles the routing automatically. It requires no configuration and works in every extension context, even on regular web pages.
📚 Shared State
Epos provides a shared state object that you can work with like a regular JavaScript object, while under the hood it is automatically synced across all contexts and persisted to IndexedDB. Thinking about state as a normal object makes the whole application much easier to reason about. You just manage the data and let Epos handle the hard parts.