← Plugin docs

Manifest Reference

Every field in manifest.json, with types and validation rules.

Every plugin has a manifest.json file at the root of its install folder. Projelli reads this file on install and on every load. If validation fails, the plugin won't load and the error appears in the Plugins panel.

Complete example

{
  "id": "word-counter",
  "name": "Word Counter",
  "version": "1.0.0",
  "apiVersion": "1.0.0",
  "author": {
    "name": "Projelli Examples",
    "url": "https://projelli.com"
  },
  "description": "Live word and character count for the active document.",
  "main": "dist/index.js",
  "permissions": ["editor:selection"],
  "minProjelliVersion": "2.0.0",
  "category": "writing",
  "tags": ["editor", "writing", "stats"],
  "license": "MIT"
}

Required fields

id

stringrequired

Unique identifier for your plugin. Lowercase, alphanumeric, with hyphens. No spaces. The folder name on disk must match this id.

"id": "word-counter"

name

stringrequired

Human-readable display name. Shown in the Plugins panel and the marketplace.

"name": "Word Counter"

version

stringrequired

Your plugin's version, in semver format (major.minor.patch). Bump this every time you ship a new build.

"version": "1.2.3"

apiVersion

stringrequired

Which version of the Projelli plugin API your plugin targets. Currently 1.0.0. Projelli will refuse to load plugins whose apiVersion is incompatible with the host.

"apiVersion": "1.0.0"

author

objectrequired

Who built this plugin. name is required. githubUser and url are optional.

"author": {
  "name": "Jane Doe",
  "githubUser": "janedoe",
  "url": "https://janedoe.dev"
}

description

stringrequired

One sentence describing what the plugin does. Shown in the marketplace card and the Installed list. Keep it under 140 characters.

"description": "Live word and character count for the active document."

main

stringrequired

Path inside your plugin folder to the JS entry file. Must be a built ES module that export defaults an object with an activate function. The scaffolder sets this to dist/index.js.

"main": "dist/index.js"

permissions

string[]required

Array of permission strings your plugin needs. Empty array if you don't need any. The user is prompted to approve these on install. See the permissions guide for the full list.

"permissions": ["editor:selection", "ai:invoke"]

minProjelliVersion

stringrequired

Minimum version of Projelli your plugin requires. If the user's Projelli is older, the plugin won't load.

"minProjelliVersion": "2.0.0"

category

stringrequired

One of: writing, productivity, research, ai, integration, theme, utility, other. Used to group plugins in the marketplace.

"category": "writing"

tags

string[]required

Lowercase keywords that help users find your plugin in marketplace search. 3 to 8 tags is typical.

"tags": ["editor", "writing", "stats"]

Optional fields

maxProjelliVersion

stringoptional

Maximum Projelli version your plugin works with. Leave unset unless you know your plugin won't survive a future major version. If the user's Projelli is newer than this, the plugin won't load.

"maxProjelliVersion": "2.99.99"

screenshots

string[]optional

Array of relative paths to screenshot images. Used in the marketplace listing. PNG or JPG, 1280x800 recommended.

"screenshots": ["screenshots/main.png", "screenshots/settings.png"]

homepage

stringoptional

URL of the plugin's homepage or GitHub repo. Linked from the marketplace listing.

"homepage": "https://github.com/janedoe/projelli-word-counter"

license

stringoptional

SPDX license identifier. The scaffolder sets MIT. Marketplace requires an open-source license; MIT, Apache-2.0, and BSD-3-Clause are common choices.

"license": "MIT"

Validation

The on-disk manifest is validated with Zod on install and again on every load. If a required field is missing, the wrong type, or fails a format check (semver, lowercase id), the plugin is marked as failed and the validation error is shown in the Plugins panel.

You can preflight your manifest by building your plugin and dropping it in the local plugins folder; the Plugins panel will show any validation errors immediately.

Next: Permissions →