This page publishes the thin v1 contract for plugin manifest metadata, provenance and signature evidence, and host-owned trust policy.
The host can treat these manifest fields as the public v1 surface:
IdDisplayNameDescriptionVersionCompatibilityCapabilitySummaryProvenance
Provenance carries the source and distribution clues the host can inspect before activation:
SourceKindSourcePublisherPackageIdPackageVersion
Compatibility is host-facing metadata only. It describes the plugin's declared version and runtime fit; it does not grant trust.
Trust decisions can use provenance and signature evidence together:
GraphEditorPluginProvenanceEvidence.PackageIdentityGraphEditorPluginProvenanceEvidence.SignatureGraphEditorPluginSignatureEvidence.StatusGraphEditorPluginSignatureEvidence.KindGraphEditorPluginSignatureEvidence.SignerGraphEditorPluginSignatureEvidence.TimestampUtcGraphEditorPluginSignatureEvidence.TimestampAuthorityGraphEditorPluginSignatureEvidence.ReasonCodeGraphEditorPluginSignatureEvidence.ReasonMessage
The host should use this evidence as input to policy, not as an automatic allow signal.
Trust policy is host-owned.
IGraphEditorPluginTrustPolicyis the host decision pointGraphEditorPluginTrustPolicyContextexposes the manifest, provenance evidence, and package path- the plugin itself cannot authorize loading
- plugin trust decisions are evaluated before any contribution code is allowed to execute
If the host does not configure a policy, the runtime uses GraphEditorPluginTrustEvaluation.ImplicitAllow().
Use this path when evaluating a trusted in-process plugin:
- Author or generate the plugin with Plugin And Custom Node Recipe.
- Validate the
.dll,.nupkg, or plugin directory withAsterGraph.PluginTool validate. - Inspect structured local evidence with
AsterGraph.PluginTool inspect <path> --host-version <version> --jsonwhen you need manifest, host compatibility, node definition, and parameter metadata details. - Generate a standalone SHA-256 evidence line with
AsterGraph.PluginTool hash <path>for allowlist review. - Review the manifest, compatibility, provenance, signature evidence, node definitions, parameter metadata, and SHA-256 hash in the PluginTool output.
- Apply a host-owned
IGraphEditorPluginTrustPolicybefore activation. - Use Consumer Sample as the defended hosted trust hop when validating a real host flow.
PluginTool validation is evidence for host policy. Treat PLUGIN_COMPATIBILITY_OK, PLUGIN_MANIFEST_OK, PLUGIN_NODE_DEFINITIONS_OK, PLUGIN_PARAMETER_METADATA_OK, and PLUGIN_TRUST_EVIDENCE_OK as local review markers. It is not a marketplace approval, a sandbox decision, or an automatic load authorization.
Use these patterns as host-owned policy examples, not runtime fallback modes:
| Pattern | Typical use | Policy input |
|---|---|---|
| Allow all local dev | Inner-loop development on a known machine. | Fixed local plugin directory plus an explicit local-dev reason string. |
| Allow by hash | Small teams sharing known plugin binaries. | PluginTool SHA-256 hash must match the host allowlist. |
| Allow by manifest or publisher | Organization-published plugins. | Manifest id, package id/version, publisher metadata, and signature evidence must match host policy. |
| Block unknown source | Default prerelease or enterprise posture. | Block candidates without an allowlist, hash, or accepted signature match before activation. |
| Enterprise fixed plugin directory | Managed desktop deployments. | Discover only from an admin-controlled directory and keep allowlist import/export records for audit. |
The explicit implicit-allow contract is narrow:
- no host policy configured means the runtime may return an implicit allow result
- an implicit allow still depends on manifest and provenance visibility
- implicit allow is a host/runtime default, not a plugin capability
- a host policy can replace the default with explicit allow or block decisions
Blocked plugins do not activate.
- trust refusal happens before plugin contribution code runs
- signature refusal also happens before activation
- package staging is a pre-activation gate, not a load guarantee
GraphEditorPluginStageOutcome.Refusedmeans the candidate was blocked before activation- staged or cached package material can exist without the plugin being activated
This v1 contract does not include:
- a plugin marketplace
- remote install or update flows
- plugin unload lifecycle management
- sandboxing or isolation guarantees
- untrusted code execution support