Appearance
Packaging & Deployment
A plugin package is a ZIP archive containing manifest.json, the entry-point artifact, and its runtime dependencies. Upload it through the Packaging API.
Package structure
text
my-plugin.zip
├── manifest.json
├── PluginExamples.dll or plugin.wasm
├── dependencies and required assets
├── README.md (optional)
└── samples/*.toml (optional)Place the manifest and entry-point artifact at the archive root. Include all non-system .NET dependencies needed by the plugin. A README and configuration samples are optional package documentation.
Manifest examples
Use type to select Indexing or Job. The manifest requires a non-empty capabilities array for both types. Replace the sample package ULID with your package's identity and keep it stable for updates.
json
{
"id": "01J00000000000000000000000",
"vendor": "Example Company",
"version": "1.0.0",
"description": "Example indexing plugin",
"type": "Indexing",
"runtime": "Dotnet",
"entryPointAssembly": "PluginExamples.dll",
"entryPoint": "BlueCurve.Examples.PlainTextIndexer",
"capabilities": [
".txt",
"text/plain"
]
}json
{
"id": "01J00000000000000000000000",
"vendor": "Example Company",
"version": "1.0.0",
"description": "Example job plugin",
"type": "Job",
"runtime": "Dotnet",
"entryPointAssembly": "PluginExamples.dll",
"entryPoint": "BlueCurve.Examples.ExampleJob",
"capabilities": [
"example"
]
}json
{
"id": "01J00000000000000000000000",
"vendor": "Example Company",
"version": "1.0.0",
"description": "Example indexing plugin",
"type": "Indexing",
"runtime": "Wasm",
"entryPointAssembly": "plugin.wasm",
"entryPoint": "index_file",
"capabilities": [
".txt",
"text/plain"
]
}json
{
"id": "01J00000000000000000000000",
"vendor": "Example Company",
"version": "1.0.0",
"description": "Example job plugin",
"type": "Job",
"runtime": "Wasm",
"entryPointAssembly": "plugin.wasm",
"entryPoint": "start_job",
"capabilities": [
"example"
]
}Download a manifest: .NET indexer, .NET job, WASM indexer, WASM job.
| Field | Type | Requirement |
|---|---|---|
id | ULID string | Required package identity. |
vendor | string | Required vendor name. |
version | string | Required semantic version. |
description | string | Required description. |
type | string | Required: Indexing or Job. |
runtime | string | Required: Dotnet or Wasm. |
entryPointAssembly | string | Required artifact filename: DLL or WASM module. |
entryPoint | string | Required fully qualified .NET class name or exported WASM function name. |
capabilities | string array | Required, at least one item. Indexers declare supported extensions or MIME types. |
Validation rules
.NET assemblies must use an accepted architecture (Any CPU or Amd64). The current inspection minimum is .NET 9; the examples in this portal target .NET 10. Use the SDK and target framework supported by your deployment.
The current archive inspector allows up to 500 MB uncompressed and 1,000 entries. The upload byte limit is a separate deployment setting; see the Packaging API. Inspection rejects unsafe archive paths and excessive compression ratios.
WASM modules must export memory, alloc, dealloc, and their configured entry point. Only env and wasi_snapshot_preview1 imports are accepted. Compile Kotlin plugins as production executables and use a matching host/SDK ABI. See WASM Development for role-specific build commands.
Inspection Report & Error Codes
When a package is uploaded, the system generates an InspectionReport. This is a bitmask of flags representing any issues found during validation. If everything is valid, the report will be None (0).
Common Error Flags
| Flag | Category | Description |
|---|---|---|
ManifestNotFound | Manifest | The manifest.json file is missing from the root of the zip. |
InvalidManifest | Manifest | The manifest JSON is malformed or missing required fields (id, vendor, etc.). |
EntryPointNotFound | Logic | The specified class or function entry point could not be found in the assembly. |
EntryPointAssemblyNotFound | Logic | The file specified in entryPointAssembly is missing from the package. |
WasmMissingExports | WASM | The WASM module is missing required exports like memory, alloc, or dealloc. |
WasmUnauthorizedImports | WASM | The module attempts to import functions from unauthorized host namespaces. |
WasmInvalidModule | WASM | The WASM binary is malformed or could not be parsed. |
MaxUncompressedSize | Limits | The package exceeds the 500 MB uncompressed limit. |
MaxFiles | Limits | The package exceeds the 1,000 file entries limit. |
SecurityViolation | Security | Detected unsafe paths (e.g., ../) or other security risks. |
CannotProcessPackage | System | An internal error occurred during package inspection. |
TIP
Since the report is a bitmask, multiple flags can be present simultaneously. For example, a value of 17 indicates both ManifestNotFound (1) and EntryPointAssemblyNotFound (16).
Deployment flow
- Build the plugin and package the matching manifest and artifacts.
- Upload the ZIP through REST or gRPC.
- Check the transport result and inspection/deployment result; an HTTP
200alone does not establish successful inspection. - Poll a returned task identifier to completion before using the package.
- Create a job with the package ID, or ingest a file handled by the installed indexer.
Next: Sandboxing & Security