← Plugin docs

Publishing

How to submit your plugin to the in-app marketplace.

The Projelli marketplace is a public GitHub repository, projelli/community-plugins. Each plugin is one folder under entries/, containing the manifest, the built bundle, and screenshots. To publish, fork the repo, add your entry, and open a pull request. After review, your plugin appears in the in-app marketplace and users can install it with one click.

Fork projelli/community-plugins on GitHub General submission guide
Before you start: publish-via-PR keeps the marketplace lightweight and reviewable. There's no signup, no API key, no separate dashboard. The repo is the source of truth. The general flow (templates and plugins) is documented at Marketplace Submissions; this page covers the plugin-specific bits.

Prerequisites

Step 1: Fork the repo

Go to github.com/projelli/community-plugins and click Fork. Clone your fork locally.

git clone https://github.com/<your-username>/community-plugins.git
cd community-plugins

Step 2: Build your bundle

From your plugin project, run:

npm run build

This produces dist/index.js (the bundled worker entry the runtime loads).

Step 3: Add your entry

In your fork of community-plugins, create a folder under entries/ matching your plugin id:

entries/my-plugin/
  manifest.json           ← copy of your plugin's manifest
  index.js                ← copy of your built bundle (from dist/index.js)
  screenshots/
    main.png              ← 1280x800 PNG, primary screenshot
    settings.png          ← optional, additional screenshots

The folder name must match the id field in your manifest. The repo's GitHub Action regenerates the installable tarball and SHA-256 checksum on merge, so you don't need to ship those yourself.

Step 4: Verify locally

Run the marketplace's build script from the repo root:

npm install --no-save zod@^4.3.6
PROJELLI_CATALOG_KIND=plugins node scripts/build-catalog.mjs

This validates every manifest.json against the production schema, builds a deterministic tarball per entry, and writes catalog.json. If validation fails you'll see the field path and reason. Fix any errors before opening the PR.

Step 5: Open a pull request

git checkout -b add-my-plugin
git add entries/my-plugin/
git commit -m "Add my-plugin v1.0.0"
git push origin add-my-plugin

Open a PR against main on projelli/community-plugins. Use this title format: Add <plugin-name> v<version>.

In the PR description, include:

Step 6: Review

A maintainer reviews every submission. Reviews focus on:

Most reviews take a few days. If we ask for changes, push another commit to the same branch and the PR updates automatically. Once merged, your plugin appears in the in-app marketplace.

Updating an existing plugin

To ship a new version: bump version in your manifest, build a new tarball with the new version in the filename (my-plugin-1.1.0.tgz), drop both into your existing entries/my-plugin/ folder, and open a PR. Old versions stay in the folder so users on older Projelli builds can still install compatible releases.

Removing a plugin

If you want to delist a plugin, open a PR that removes its entry folder and explain why in the PR description. Existing installations keep working; the plugin just disappears from the marketplace.

Reporting a malicious plugin

If you find a plugin in the marketplace that's doing something it shouldn't (asking for permissions it doesn't need, exfiltrating data, hiding behavior), open an issue on projelli/community-plugins with the plugin id and details. We take takedowns seriously.

Next: Examples →