No description
  • JavaScript 100%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Ricardo ea97712bec chore: pin activitypub ^4.1.0-beta.7 (one log line per Fedify record)
Log formatting only — no schema, no behaviour, no data migration, so
rolling back to beta.6 is free. The rollback note records what reverting
costs: LogTape's default formatter inspects logged Error objects, so 175
delivery failures over 20h produced a median of 26 lines each and a p90 of
492, about 29% of all container output, which buried the Eleventy build
logs we needed twice on 2026-10-08.
2026-10-09 07:57:32 +02:00
.github/workflows feat: initialize indiekit-plugin-registry repo 2026-05-31 19:38:18 +02:00
scripts feat: add shared compose-core (pure plugin-set compiler) + tests 2026-07-15 12:10:58 +02:00
.gitignore feat: initialize indiekit-plugin-registry repo 2026-05-31 19:38:18 +02:00
CHANGELOG.md feat: initialize indiekit-plugin-registry repo 2026-05-31 19:38:18 +02:00
CLAUDE.md docs: correct consumer claims, document schema and bump workflow, add CLAUDE.md 2026-06-10 22:15:58 +02:00
package-lock.json feat(registry): validation script + JSON schema + key disambiguation 2026-05-31 19:41:33 +02:00
package.json feat: add shared compose-core (pure plugin-set compiler) + tests 2026-07-15 12:10:58 +02:00
plugin-registry.yaml chore: pin activitypub ^4.1.0-beta.7 (one log line per Fedify record) 2026-10-09 07:57:32 +02:00
README.md docs: correct consumer claims, document schema and bump workflow, add CLAUDE.md 2026-06-10 22:15:58 +02:00

indiekit-plugin-registry

Central catalog of Indiekit plugins as a git submodule in indiekit-cloudron.

Status

Currently consumed by: indiekit-cloudron only (as a git submodule, read by scripts/compose-site.mjs).

Planned for: indiekit-deploy integration (not yet implemented).

Files

  • plugin-registry.yaml — the catalog itself
  • scripts/validate.mjs — schema validation (run by CI, Ajv with registry-schema.json)

Schema

Four tiers, each with these fields per entry:

Field Type Purpose
key string Identifier used in sites/*/config/plugins.yaml (kebab-case)
package string npm package name (@scope/name)
version string semver range — omitted when overridden: true
overridden boolean true if indiekit-cloudron/package.json overrides field swaps this for an @rmdes/* fork
library boolean true for helper libraries (imported by plugins, not loaded as plugins; install only)
default_enabled boolean Whether this plugin is enabled by default when a site doesn't explicitly list it

Tiers:

  • core — always installed and loaded; cannot be disabled per-site
  • post_types — content type plugins; per-site can enable/disable
  • syndicators — cross-posting targets; per-site can enable/disable
  • endpoints — feature endpoints; per-site can enable/disable

Consumption Flow

  1. indiekit-cloudron/Makefile provides registry-update and registry-status targets
  2. make registry-update pulls latest from submodule's origin/main
  3. scripts/compose-site.mjs merges plugin-registry.yaml with sites/<site>/config/plugins.yaml
    • core plugins are implicit (always included)
    • Per-site plugins.yaml can enable/disable optional tiers
    • Result: .compiled/indiekit.config.js with merged plugin list
  4. Cloudron's Dockerfile installs all package names from all tiers

Overridden Plugins

Entries with overridden: true have NO version: field here. Their versions live in indiekit-cloudron/package.json's overrides section:

{
  "overrides": {
    "@indiekit/endpoint-auth": "npm:@rmdes/indiekit-endpoint-auth@^1.0.0-beta.30",
    "@indiekit/endpoint-share": "npm:@rmdes/indiekit-endpoint-share@^1.0.3"
  }
}

When npm resolves the upstream package name, it installs the fork under the same name. The default plugin loader calls import("@indiekit/endpoint-share") and gets the fork's code transparently.

Rule: Do NOT bump version for overridden: true entries here; instead, update the override in indiekit-cloudron/package.json.

How to Bump a Plugin Version

Non-overridden plugins

  1. Edit plugin-registry.yaml, update the version: field for the plugin
  2. Run node scripts/validate.mjs to verify
  3. Commit and push to origin/main
  4. In indiekit-cloudron, update the submodule pointer:
    make registry-update
    git add plugin-registry
    git commit -m "chore: bump plugin-registry to <newcommit>"
    

Overridden plugins

  1. Do NOT edit plugin-registry.yaml — the entry stays at overridden: true with no version
  2. Update the override in indiekit-cloudron/package.json:
    {
      "overrides": {
        "@indiekit/endpoint-auth": "npm:@rmdes/indiekit-endpoint-auth@^1.0.0-beta.31"
      }
    }
    
  3. Commit in indiekit-cloudron, then build and deploy as normal

How to Add a New Plugin

  1. Add a new entry to the appropriate tier in plugin-registry.yaml
  2. Set default_enabled: false unless it's truly universal
  3. If the plugin is a helper library (imported by other plugins, not a plugin itself), set library: true
  4. Run node scripts/validate.mjs to verify schema compliance
  5. Commit, push to origin/main
  6. In indiekit-cloudron, update submodule: make registry-update && git add plugin-registry