Publishing
Submit your script to
super-clipboard/userscriptsand it will appear in the in-plugin marketplace.
Repo layout
super-clipboard/userscripts/
scripts/
<kebab-case-id>/
<kebab-case-id>.user.js # script + metadata header
README.md # short description + screenshot
package.json # optional: deps, tags<kebab-case-id> must equal the last segment of @namespace, e.g.
text
// @namespace com.example.json-format→ directory json-format/.
Submission flow
Add your folder under
scripts/.Validate locally:
bashpnpm validateRuns the
@super-clipboard/userscriptparser and checks:- Required metadata fields present and well-formed
- Every
@grantis whitelisted - Every
@requireis on a whitelisted registry and carries SRI - File / directory name matches the
@namespacetail
Open a PR; CI re-runs
pnpm validateand rebuildsscripts.index.json.After merge, plugins refresh the index on next launch.
Versioning & updates
- Use SemVer for
@version. - Already-installed scripts get an update available hint when
scripts.index.jsonshows a higher version. Updates are never silent — the user must opt-in. @updateURLoverrides the default source.internal://<id>is reserved for builtin scripts shipped with the plugin.
README contents
At minimum:
- One-sentence summary
- Trigger condition (clip type, multi-select supported?)
- Screenshot or short GIF
- Permissions: list every
@grantwith a one-line reason - Dependencies: list every
@requirewith source + license
Builtin vs marketplace
| Aspect | Builtin | Marketplace |
|---|---|---|
| Install | Seeded on first launch; re-seeded when the plugin upgrades the bundled set | User installs from marketplace |
| If user uninstalls | Stays uninstalled | Stays uninstalled |
| Update source | @updateURL internal://<id> | Marketplace index, optionally overridden |
| Scope | High-traffic universal tools | Anything specific |
If your script is broadly useful and you'd like it bundled, mention it in the PR and a maintainer will evaluate.
Recommended practices
- Namespace — reverse-DNS:
com.<author>.<id>. - Tags (
@tag) — at least one oftext/image/file/utility/ai… - Timeout — tune
@timeoutto your worst-case callback (default 30 s is generous). - Minimise deps — prefer iframe-native APIs; pin every
@requireto an exact version. - Use
globalNativeApi.errorinstead ofthrowso users can see failures in the script manager.