Extension Types
Plugin developers can build three types of extensions, each suited to different use cases. All three are defined in an extension manifest and load content inside a tile.
IFrame
An iframe extension embeds a URL in a standard HTML iframe. This is the simplest option – point it at any website and it renders in the tile. No SDK access, no event system, no special permissions required.
Use iframe when you want to embed an existing site (a wiki, a character builder, a reference tool) and don’t need it to communicate with other tiles.
Webview
A webview extension also loads a URL, but uses Electron’s webview tag instead of an iframe. This gives the extension access to the Overseer SDK, which enables the event system for sending and receiving messages between tiles. Webview extensions can also inject JavaScript into the loaded page (with user permission).
Use webview when your extension needs to interact with other extensions on the GM screen – for example, a dice roller that broadcasts results to a character sheet.
Bundled
A bundled extension ships its own HTML, CSS, and JavaScript files with the plugin. Instead of pointing at a URL, the manifest references a local HTML file via $ref. The file loads directly in the tile with full SDK access.
Use bundled when you’re building a custom tool that doesn’t exist as a hosted website – an initiative tracker, a stat block viewer, a homebrew generator. You have full control over the UI and can use any front-end framework or plain HTML.
Comparison
| IFrame | Webview | Bundled | |
|---|---|---|---|
| Content source | External URL | External URL | Local HTML files |
| SDK access | No | Yes | Yes |
| Event system | No | Yes | Yes |
| JS injection | No | Yes | N/A |
| Best for | Embedding existing sites | Sites needing app integration | Custom-built tools |
| Complexity | Lowest | Medium | Most flexible |
Which should I use?
- Start with iframe if you just want to put a website in a tile.
- Switch to webview if you need the event system or SDK access for a hosted URL.
- Use bundled if you’re building something from scratch and want full control.
For implementation details, see Building Extensions.