Official plugin repository for CFP Directory. This repo hosts plugin source code and the registry.json that the plugin gallery fetches.
| Plugin | Version | Description |
|---|---|---|
| AI Paper Reviewer | 1.36.0 | Intelligent submission analysis with cost tracking, budget management, speaker context, criteria-based scoring, and Google Search grounding for fact-checking |
| Example: Webhook Notifications | 1.1.0 | A starter template for plugin developers demonstrating hooks, config schemas, HMAC signatures, and background job retries |
The CFP Directory admin panel includes a Plugins Gallery that fetches registry.json from this repository. Each entry in the registry points to a downloadable zip file attached to a GitHub release.
- Open your CFP Directory admin panel
- Go to Admin > Plugins > Available Plugins
- Browse the gallery and click Install on any plugin
- Configure the plugin settings and enable it
See the Plugin SDK Guide for comprehensive documentation on building plugins, including:
- Manifest format and configuration schemas
- Hooks API (submission, review, event, email lifecycle events)
- Capabilities (submissions, users, reviews, events, storage, email, data store)
- Background jobs with retry support
- UI extension slots and admin pages
- Service account creation
Use the example-webhook plugin in this repo as a starter template.
cfp-directory-official-plugins/
├── registry.json # Gallery fetches this
├── plugins/
│ ├── ai-paper-reviewer/ # AI-powered submission analysis
│ │ ├── README.md
│ │ ├── manifest.json
│ │ ├── index.ts
│ │ ├── components/
│ │ │ ├── ai-review-panel.tsx
│ │ │ ├── admin-sidebar-item.tsx
│ │ │ ├── admin-dashboard.tsx
│ │ │ ├── admin-review-history.tsx
│ │ │ └── admin-personas.tsx
│ │ ├── lib/
│ │ │ ├── prompts.ts
│ │ │ ├── providers.ts
│ │ │ ├── json-repair.ts
│ │ │ └── similarity.ts
│ │ └── dist/ # Pre-compiled bundles (generated)
│ │ ├── admin-pages.js
│ │ ├── admin-pages.js.map
│ │ ├── admin-pages.manifest.json
│ │ ├── server.mjs # Server-side ESM bundle
│ │ └── server.mjs.map
│ └── example-webhook/ # Developer starter template
│ ├── manifest.json
│ └── index.ts
├── tests/
│ └── ai-paper-reviewer/ # Plugin tests
├── docs/
│ └── ai-paper-reviewer.md # Extended documentation
└── scripts/
├── build-archives.sh # Builds release zips
├── build-admin-components.js # Compiles admin page components
└── build-server-bundle.js # Compiles server-side ESM bundles
To create zip archives for a GitHub release:
npm run buildThis runs three steps:
- Compiles admin components - Uses esbuild to bundle admin page components (
components/admin-*.tsx) into browser-ready JavaScript (dist/admin-pages.js). These bundles use the host app's React instance via window globals. - Compiles server bundles - Uses esbuild to bundle server-side plugin code (
index.ts+lib/) into ESM (dist/server.mjs). This enables build-time plugin loading on the hosted platform without runtime TypeScript compilation. - Creates zip archives - Packages each plugin (including the compiled bundles) into
dist/<plugin-name>.zip
Attach the zip to a GitHub release matching the downloadUrl pattern in registry.json.
Plugin admin pages (like Review History and Personas) use React hooks and need to run client-side. The build process:
- Compiles TypeScript/JSX to browser-ready IIFE bundles
- Replaces React imports with
window.__PLUGIN_REACT__(provided by host app) - Bundles dependencies like lucide-react icons
- Generates a manifest listing available components
This allows plugins to provide interactive admin UIs without requiring runtime transpilation.
- Update the plugin version in
manifest.jsonandregistry.json - Run
./scripts/build-archives.sh - Create a GitHub release tagged as
v<version>(e.g.,v1.28.0) - Attach the zip from
dist/to the release
- Create a new directory under
plugins/<plugin-name>/ - Add
manifest.json,index.ts, and aREADME.md - Add tests under
tests/<plugin-name>/ - Add an entry to
registry.json - Run
./scripts/build-archives.shto verify packaging
Apache License 2.0 - See LICENSE for details.