Publishing a plugin
The marketplace works like Raycast's extension repository: your plugin lives in the public readaware-plugins repository and lands via pull request. Once merged, it appears in the app under Settings → Plugins → Marketplace and installs with one click.
Author in TypeScript
TypeScript is the recommended path. The repository ships a template/ with the typed API (types/plugin-api.d.ts) wired up — copy it, write src/main.ts, and build a single self-contained module:
bun build src/main.ts --outfile main.js --format esmWhat ships is always the built main.js; keep src/ committed so reviewers can read the real code. Plain JavaScript is equally accepted. The official plugins in plugins/ are authored this way — use them as living examples.
Submitting
- Fork the repository.
- Copy
template/toplugins/<your-plugin-id>/, containing at leastmanifest.jsonandmain.js. The folder name must equal the manifestid. - Add a matching entry to
registry.json, keeping the array sorted by id. - Run the same checks CI will run:
node scripts/validate.mjs npx tsc --noEmit - Open a pull request describing what the plugin does and why it needs each permission it declares.
CI enforces registry–manifest consistency, id shape, the permission whitelist, and file existence, and type-checks every TypeScript plugin.
Updates
Same flow: bump version in both manifest.json and registry.json in one pull request. Note the app reads the registry through a CDN, so a merged update can take a little while to appear in the marketplace tab.
Review expectations
- Declare the minimum permissions. Pull requests asking for more than the code uses will be sent back — see the permission table.
main.jsmust be readable, or accompanied by the source it was bundled from.- No obfuscated code, no analytics or tracking, no remote code loading.
Plugins run inside the app with the same access as the app itself. Installation is a trust decision users make per plugin, and this review is the community's first line of defense — write plugins you would be comfortable installing from a stranger.