Prerequisites
- Go programming language (1.18+)
- Basic understanding of Go modules
- Git for version control
Step 1: Create a new Go module
Step 2: Add the Orka Plugin SDK dependency
Step 3: Implement the plugin entrypoint
Create a main.go file with the following structure:Step 4: Build the plugin
SDK Contract
Plugins use thegithub.com/orka-platform/orka-plugin-sdk package to define the request and response types:
- Request fields:
Method(string): The logical operation, e.g., SendMessageArgs(map[string]any): Input arguments for the method
- Response fields:
- Success (bool): Whether the operation succeeded
- Error (string, optional): Error message if the operation failed
- Data (any, optional): Response data (map or scalar)
Supported Function Signatures
The plugin loader supports multiple function signatures:- Primary Symbol: OrkaCall
func(sdk.Request, *sdk.Response) error (RPC-style)
- Fallback Symbol: CallMethod
func(context.Context, sdk.Request) (sdk.Response, error)(context-aware)func(sdk.Request) (sdk.Response, error)(context-free)func(sdk.Request, *sdk.Response)error (RPC-style)
Plugin Configuration
Repository Layout
A typical plugin repository should have the following structure:- main.go: Defines your plugin with exported
OrkaCallorCallMethodfunction config.json: Human-facing metadata and method definitionsgo.mod,go.sum: Go module files
Metadata Configuration (config.json)
Theconfig.json file provides metadata about your plugin and its methods:
Registering Plugins with the Engine
Plugins are registered with the engine through the services/engine/config/plugins.json file:name(string, required): Used as the binary name after buildrepo(string, required): Git URL for the plugin repositoryversion(string, required): If present, the Engine namespaces the cache directory and registry keyservice(string, required): Service name for the plugin
- Clones the plugin repository to
$HOME/.orka/plugins/<name>or$HOME/.orka/plugins/<name>@<version> - Builds the plugin with
go build -buildmode=plugin -o <name>.so. - Loads the shared object and looks for the exported entrypoint
- Reads the plugin’s
config.jsonto populate method metadata
Please note that the ability to register custom, internally developed plugins is reserved exclusively for enterprise customers with a self-hosted, on-premise deployment under an enterprise contract. This restriction exists because custom plugins operate under a single-tenancy model within the Orka engine, and therefore cannot be registered in shared, multi-tenant environments.
In addition, developers have the opportunity to contribute by submitting their own plugins for review and potential inclusion in Orka’s official plugin marketplace.

