[epos] Web Extension Engine
A browser extension for building browser extensions
1 follower
A browser extension for building browser extensions
1 follower
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

![[epos] Web Extension Engine gallery image](https://ph-files.imgix.net/b6046ed1-8e93-4331-8373-5089989ba819.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=442&h=220&fit=max&frame=1)
![[epos] Web Extension Engine gallery image](https://ph-files.imgix.net/1e5aa602-7cc6-4a55-ba5d-358ab0eb0755.png?auto=compress&codec=mozjpeg&cs=strip&auto=format&w=403&h=220&fit=max&frame=1)
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.