The official plugin and template registry for the GoCodeAlone/workflow engine.
Registry API: https://gocodealone.github.io/workflow-registry/v1/
This registry catalogs all built-in plugins, community extensions, and reusable templates that can be used with the workflow engine. It serves as the source of truth for the wfctl CLI's marketplace and wfctl publish command.
- What is this?
- Usage via wfctl
- Plugin Tiers
- Built-in Plugins
- External Plugins
- Templates
- Schema
- Submitting a Plugin
- Automatic Version Tracking
- Registry Structure
The workflow engine is built around a plugin system. Every capability — HTTP servers, messaging brokers, state machines, AI steps, CI/CD pipelines — is provided by a plugin. This registry tracks:
- Plugins: Packages that extend the engine with new module types, pipeline steps, triggers, and workflow handlers
- Templates: Starter configurations for common workflow patterns
The registry is consumed by:
wfctl marketplace— browse and search available pluginswfctl publish— submit your plugin to the registry- The workflow UI Marketplace page
- The static JSON API at
https://gocodealone.github.io/workflow-registry/v1/
# Search for plugins by keyword
wfctl marketplace search http
# Get details for a specific plugin
wfctl marketplace info payments
# Install a plugin into your project
wfctl install payments
# List all installed plugins
wfctl plugin list
# Update all plugins to latest versions
wfctl plugin update| Tier | Description |
|---|---|
| core | Maintained by GoCodeAlone, shipped with the engine, guaranteed compatibility |
| community | Third-party plugins submitted via PR, reviewed by maintainers |
| premium | Commercial plugins with additional licensing requirements |
All plugins in this registry must pass manifest schema validation before merging.
These plugins ship with the workflow engine and are always available:
| Plugin | Description | Tier |
|---|---|---|
| http | HTTP server, router, middleware, proxy, static files | core |
| messaging | In-memory broker, EventBus, NATS, Kafka, Slack, webhooks | core |
| statemachine | State machine engine, tracker, connector | core |
| scheduler | Cron-based job scheduling | core |
| observability | Metrics, health checks, tracing, OpenAPI | core |
| storage | S3, GCS, local, SQLite, SQL databases | core |
| pipelinesteps | Generic pipeline steps (validate, transform, jq, db, etc.) | core |
| auth | JWT auth, user store, auth middleware wiring | core |
| api | REST handlers, CQRS, API gateway, data transformer | core |
| featureflags | Feature flag service and pipeline steps | core |
| platform | Infrastructure-as-code provider, resource, context modules | core |
| modularcompat | CrisisTextLine/modular framework compatibility (scheduler, cache) | core |
| secrets | HashiCorp Vault and AWS Secrets Manager | core |
| cicd | CI/CD steps: shell, Docker, scan, deploy, gate | core |
| integration | Integration workflow handler for multi-system connectors | core |
| ai | AI steps (complete, classify, extract), dynamic components, sub-workflows | core |
These plugins run as separate subprocesses via the go-plugin IPC framework:
| Plugin | Description | Tier |
|---|---|---|
| bento | Stream processing via Bento — 100+ connectors, Bloblang transforms, at-least-once delivery | core |
| ratchet | Autonomous AI agent orchestration — agent coordination, task management, MCP integration, secrets/vault, SSE, and intelligent pipeline execution (13 step types, 15 wiring hooks) | community |
Starter configurations for common workflow patterns:
| Template | Description |
|---|---|
| api-service | HTTP API with auth, SQLite, and pipelines |
| event-processor | Event-driven processor with messaging and pipelines |
| full-stack | Full application with HTTP, auth, state machine, messaging, scheduler, and observability |
| plugin | Scaffold for building a new engine plugin |
| ui-plugin | Scaffold for a React UI extension |
| stream-processor | Stream processing pipeline using the Bento plugin |
Initialize a project from a template:
wfctl init my-project --template api-serviceAll plugin manifests must conform to the registry schema. The schema is a JSON Schema (draft 2020-12) defining required fields, enums for type and tier, and the structure of capabilities.
Validate a manifest locally:
# Validate a single manifest
npx ajv-cli validate --spec=draft2020 -s schema/registry-schema.json -d plugins/my-plugin/manifest.json
# Validate all manifests at once
bash scripts/validate-manifests.sh
# Validate template plugin references
bash scripts/validate-templates.shInstall the provided pre-commit hook to catch validation errors before they reach CI:
cp scripts/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commitThe hook runs scripts/validate-manifests.sh when plugins/*/manifest.json or schema/registry-schema.json are staged, and scripts/validate-templates.sh when templates/*.yaml files are staged.
Every pull request and push to main triggers the Validate Registry workflow, which:
- Validates all
plugins/*/manifest.jsonfiles againstschema/registry-schema.json(JSON Schema draft 2020-12 viaajv-cli) - Checks that every plugin referenced in
templates/*.yamlhas a corresponding manifest
The Build & Deploy workflow runs on every push to main, on a daily schedule, and whenever a plugin sends a plugin-release dispatch event. It:
- Generates
v1/index.jsonfrom all manifests - Queries GitHub Releases for each plugin to build
v1/plugins/<name>/versions.json - Deploys the
v1/directory to GitHub Pages
PRs that fail validation cannot be merged.
- Fork this repository
- Create a directory under
plugins/<your-plugin-name>/ - Add a
manifest.jsonthat conforms to the registry schema - Validate your manifest locally:
bash scripts/validate-manifests.sh
- Open a PR with a description of your plugin, what it provides, and a link to the source repository
name,version,author,description,type,tier,licenseare requiredtypemust be"external"for community plugins (only GoCodeAlone sets"builtin")tiermust be"community"for third-party submissionsrepositoryshould point to the public GitHub repository where the plugin livescapabilities.moduleTypes,stepTypes,triggerTypes,workflowHandlersmust accurately reflect what the plugin registersprivate: truemust be set for plugins that are not publicly installable
PRs are reviewed by maintainers for:
- Schema validity
- Accurate capability declarations
- Source repo accessibility
- License compatibility
When you publish a new release of your plugin, you can automatically trigger a registry rebuild so that v1/plugins/<name>/versions.json and v1/plugins/<name>/latest.json are updated within minutes.
See templates/notify-registry.yml for the reusable workflow snippet to add to your plugin's release workflow.
Setup:
- Create a GitHub PAT with
reposcope forGoCodeAlone/workflow-registry - Add it as a secret named
REGISTRY_PATin your plugin repo - Copy the
notify-registryjob from the template into your.github/workflows/release.yml
The registry rebuilds daily at 06:00 UTC as a fallback even without dispatch events.
workflow-registry/
├── plugins/ # Source of truth — one directory per plugin
│ └── <name>/
│ └── manifest.json # Plugin metadata and capabilities
├── templates/ # Reusable workflow config templates
│ ├── notify-registry.yml # Action snippet for plugin release notifications
│ └── *.yaml # Workflow starter templates
├── schema/
│ └── registry-schema.json # JSON Schema for manifest validation
├── scripts/
│ ├── build-index.sh # Generates v1/index.json
│ ├── build-versions.sh # Queries GitHub Releases → v1/plugins/*/versions.json
│ ├── validate-manifests.sh # CI manifest validation
│ └── validate-templates.sh # CI template validation
├── .github/workflows/
│ ├── validate.yml # PR validation gate
│ └── build-pages.yml # Build and deploy static registry to GitHub Pages
└── v1/ # Generated — served via GitHub Pages (not committed)
├── index.json # Array of all plugin summaries, sorted by name
└── plugins/
└── <name>/
├── manifest.json # Copy of source manifest
├── versions.json # Release history from GitHub
└── latest.json # Latest release entry only
| Endpoint | Description |
|---|---|
GET /v1/index.json |
All plugin summaries (name, description, version, capabilities, ...) |
GET /v1/plugins/<name>/manifest.json |
Full manifest for a specific plugin |
GET /v1/plugins/<name>/versions.json |
All release versions with download URLs |
GET /v1/plugins/<name>/latest.json |
Latest release version only |
See the Plugin Manifest Format section below and the registry schema for a complete reference on building, testing, and publishing a workflow engine plugin.
{
"name": "my-plugin",
"version": "1.0.0",
"author": "your-github-username",
"description": "What this plugin provides",
"source": "github.com/yourorg/my-plugin",
"path": ".",
"type": "external",
"tier": "community",
"license": "MIT",
"minEngineVersion": "0.1.0",
"repository": "https://github.com/yourorg/my-plugin",
"keywords": ["tag1", "tag2"],
"capabilities": {
"moduleTypes": ["mymodule.type"],
"stepTypes": ["step.my_step"],
"triggerTypes": [],
"workflowHandlers": []
}
}Full schema documentation: schema/registry-schema.json
MIT — see LICENSE