Manifest·
Manifest (PluginManifest)
The required fields of manifest.ts declared with defineManifest(), and zod validation.
manifest.ts is the plugin's SSOT (Single Source of Truth).
You declare it with defineManifest(), which gives you type completion.
// src/manifest.ts
import { defineManifest } from "@niyase/plugin-sdk/manifest";
export const manifest = defineManifest({
id: "@your-org/tasks",
scope: "CERTIFIED",
visibility: "PUBLIC",
targetWorkspace: "BUSINESS",
category: "extension",
displayName: "タスク",
description: "シンプルな業務タスク管理",
iconName: "ListTodo",
defaultRole: "PROVIDER",
audiences: [
{
role: "executive",
nav: {
label: "タスク",
href: "/plugin/tasks",
activeColor: "text-primary",
},
tabs: [{ value: "list", label: "一覧" }],
},
],
tables: [
{
name: "task",
columns: {
title: { type: "TEXT", notNull: true },
status: { type: "TEXT" },
},
},
],
paletteMetadata: {
intentTags: [
"タスクを追加",
"TODO 管理",
"担当者を割り当て",
"期限を設定",
"進捗を確認",
],
intentCategories: ["project"],
capabilityKeywords: ["タスク管理", "TODO"],
scenarios: ["朝の段取り", "週次レビュー"],
},
});
Required fields
| Field | Type | Description |
|---|---|---|
id | @scope/name | Globally unique ID. scope is your claimed namespace |
scope | OFFICIAL | CERTIFIED | PRIVATE | Provider category |
visibility | PUBLIC | PRIVATE | Marketplace visibility |
targetWorkspace | BUSINESS | PERSONAL | BOTH | Target space type |
category | PluginSidebarCategory | Sidebar category |
displayName | string | Display name in the UI |
description | string | A 1–2 line description |
iconName | string | A lucide-react icon name |
defaultRole | PROVIDER | CLIENT | LOCAL | Default role on activation |
audiences | PluginAudience[] | Per-role (executive / employee / customer) nav and tabs |
tables | PluginTableDef[] | Your own table definitions (use [] if none) |
paletteMetadata | PluginPaletteMetadata | For unified-palette search (required, see below) |
paletteMetadata (required)
Required because the unified palette is the primary path for discovering plugins.
intentTags: free text in concrete terms, 5–15 entriesintentCategories: top-level category enum, 1–3 entriescapabilityKeywords: capability wordsscenarios: business scenarios
Optional fields
industries (recommended industry tags) / industryPresets (per-industry i18nTerms, seedData, conditionalTables) / tablePrefix / version / pairedPluginId / requiresCloud, and so on.
Validation
niyase-plugin lint validates the manifest with validateManifest() (zod).
This is identical to the validator the server uses at submission time, so if lint passes, submission will pass too.
niyase-plugin lint
# ✓ tsc --noEmit
# ✓ manifest validation OK (@your-org/tasks)