Uploading your own plugins

When the built-in library does not have what you need, the plugin engine accepts your own: a "pure plugin" is a folder with a manifest, some CSS, some JS and an HTML snippet — uploaded per site from the dashboard and rendered into your pages.

The format

my-plugin/
  plugin.json   ← manifest: id, name, description, slots
  plugin.css    ← styles, scoped to your classes
  plugin.js     ← behavior, plain browser JS
  plugin.html   ← the markup injected into the slot

The manifest is the contract:

{
  "id": "my-plugin",
  "name": "My Plugin",
  "slots": ["content-end"]
}

The id must match the folder name exactly — the loader refuses a mismatch loudly rather than loading something unexpected. slots declares where on the page the plugin may render (top, content start/end, footer, and so on).

Uploading

  1. Zip the folder (the plugin.json at its root).
  2. Dashboard → Plugins → Upload.
  3. The plugin loads, validates and appears among your site's plugins, off by default — enable it like any built-in (see Enabling built-in plugins).

Uploads are per user / per site: your plugin renders on YOUR pages only. Built-in plugins always win an id collision — name your plugin something unique (myname-cursor, not weather-widget).

Writing well

  • Plain browser JS — no build step, no framework required; the file runs as-is.
  • Scope your CSS — prefix classes with your plugin id; you share the page with a theme that has opinions.
  • Respect the host — do not restyle the whole site from a plugin; that is what Custom CSS is for (see Custom CSS).
  • Fail quiet — a plugin that throws on every page is worse than no plugin; wrap the risky half.

Caution

A plugin's JS runs on YOUR public pages for YOUR visitors — the same trust level as your own site code. Only install plugins you wrote or read. A plugin from a stranger can do anything site code can.

Iterating

Development has a short cache TTL — re-upload and the new version is live in seconds (refresh the page to see it). Uploaded plugins survive re-seeds and theme switches; deleting one removes it permanently, so keep the source folder somewhere safe (see Deleting content).

Ideas that fit the format

A "now playing" chip, a prayer-times line, a local currency converter, a subtle canvas-confetti on the hero, a custom 404 easter egg, a WhatsApp float button tuned to your working hours. Small, scoped, single-purpose — the format rewards restraint.

Note

The engine is deliberately called PURE: one manifest, three files, no server. If your idea needs a backend, it is an integration request (see Contacting support) rather than a plugin.