The starter template for building Oyster plugins. Click Use this template above to create your own plugin repo, or install this one as-is — it's a fully functional Pomodoro timer.
- The minimum viable Oyster plugin:
manifest.json+ an HTML entrypoint. - The
runtime: "static"plugin kind — a self-contained HTML file loaded as an artifact on the Oyster surface. - Persisting user preferences via
localStorage(scoped to the iframe, no Oyster API needed).
git clone https://github.com/mattslight/oyster-sample-plugin ~/.oyster/userland/pomodoroRestart Oyster. The artifact appears on your surface.
Future tiers (oyster install mattslight/oyster-sample-plugin, in-app browser) will land once the CLI and community registry ship — see Oyster's plugin system design.
- Click Use this template → Create a new repository.
- Edit
manifest.json:- Change
idto your plugin's ID (lowercase, no spaces — becomes the folder name). - Change
name,description,author,authorUrl,repo. - Bump
versionon every release.
- Change
- Replace
src/index.htmlwith your plugin. - Tag and release on GitHub:
git tag v0.1.0 && git push --tags.
| Field | Required | Purpose |
|---|---|---|
id |
yes | Unique plugin ID. Never change after release. |
name |
yes | Human-readable display name. |
version |
yes | Semver. |
minOysterVersion |
yes | Minimum Oyster version this plugin needs. |
description |
yes | One-line summary. Shown in plugin browser. |
author |
yes | Your name or handle. |
authorUrl |
no | Link to your homepage / GitHub. |
repo |
yes | owner/name on GitHub. Used for updates. |
type |
yes | Artifact type (app, notes, diagram, etc.). |
runtime |
yes | static today. bundle, mcp, panel in future. |
entrypoint |
yes | Path to the HTML file (for static) or main.js (for bundle). |
ports |
yes | Declared ports the plugin needs (empty for static). |
storage |
yes | none or path for persistent server-side storage. |
capabilities |
yes | Opt-in capability list (empty for sandboxed static plugins). |
status |
yes | "ready" when published. |
builtin |
yes | false for third-party plugins. |
created_at, updated_at |
yes | ISO 8601 timestamps. |
This template is pure static HTML — no build step. Open src/index.html directly in a browser to iterate, then drop the folder into ~/.oyster/userland/<your-id>/ to test inside Oyster.
For plugins that need bundling (JavaScript libraries, TypeScript), wait for the runtime: "bundle" kind — it'll add an esbuild workflow similar to Obsidian's sample plugin.
When the registry ships, submit a PR to mattslight/oyster-community-plugins adding one entry to community-plugins.json:
{
"id": "your-plugin-id",
"name": "Your Plugin",
"author": "Your Name",
"description": "…",
"repo": "your-username/your-plugin-repo"
}Your plugin will appear at oyster.to/plugins and in the in-app browser.
MIT — use this as a template freely.