Skip to content
Atsukoro1 edited this page Sep 14, 2026 · 3 revisions

Create plugins and themes for Serein

Serein supports local, opt-in plugins and themes for its native desktop client.

  • A plugin is a sandboxed WebAssembly module. It can add native panels, message or composer tools, bounded local settings, and app-wide appearance overrides after the user grants the requested capabilities.
  • A theme is a declarative JSON package. It can change supported colors, gradients, typography, spacing, control heights, and corner radii without running code.

Creators keep their source and license in their own public Git repository. Serein never clones that repository or runs its scripts on a user's computer. Users install a versioned .serein-extension artifact whose exact bytes are pinned in Serein's reviewed community catalog.

Choose a path

I want to… Start here
Add a native tool or settings panel Create a plugin
Change the app's appearance Create a theme
Test a package locally Test and package
List a finished extension in Serein Publish to the community catalog

What you need

For plugins:

  • Git and a public Git repository for your source and license
  • Rust with the wasm32-unknown-unknown target
  • Python 3 for Serein's small author-side packaging script
  • A local Serein source checkout for offline testing

For themes, a text editor and Serein are enough. Git and a public repository are required when you publish to the catalog.

How publishing works

  1. Build and import the package locally. Importing does not grant capabilities or execute it.
  2. Publish the exact .serein-extension file as a versioned release artifact in your repository.
  3. Record its source commit, HTTPS release URL, exact byte size, and SHA-256 digest.
  4. Submit those values in a pull request to extensions/catalog.json.
  5. Maintainers review the source, artifact, capabilities, and license. Updates require the same review and renewed user consent.

The catalog is free. There are no automatic updates or background catalog refreshes. Disabling a plugin unloads it and removes Serein's downloaded package and plugin data.

Security model

Plugins do not receive network, filesystem, process, credential, microphone, camera, or direct Discord access. They run on demand in a bounded WebAssembly sandbox without WASI or host imports. A theme never executes code.

Read API and security reference before requesting capabilities or storing data.

Clone this wiki locally