Manifests
Manifests: the contract
The shared manifest envelope used by every extension, and the conventions for naming, versioning and YAML keys.
A manifest is how you describe an extension to Verentis. It's a small YAML file using a Kubernetes-style envelope shared by every extension type.
The envelope
api-version: verentis.io/v1 # manifest schema version
kind: Application # Application | ExecutionEngine | Bundle
metadata: # identity & display
id: smart-editor
name: Smart Editor
description: A Monaco-powered editor for text and structured files
icon: file-code
version: 0.1.0
author: Verentis
labels:
category: editor
spec: # kind-specific configuration
# ...
marketplace: # optional catalog presentation
# ...
packaging: # optional .vpkg build configuration
# ...
api-versionstringThe manifest schema version. Use verentis.io/v1.
kindstringThe package type: Application, ExecutionEngine, or Bundle. Determines how spec is interpreted
and how an installed package is registered.
metadataobjectIdentity and display information — see below.
specobjectKind-specific configuration. Applications and execution engines use it; a plain Bundle may omit it.
See the
app manifest and engine manifest
references.
marketplaceobjectOptional catalog presentation: logo, hero, gallery images, README, changelog, and supporting assets. See Packaging.
packagingobjectOptional .vpkg build configuration such as publisher, payload globs, exclusions, and encryption
policy. See Packaging.
metadata
idstringThe manifest's only identifier (lowercase kebab-case). For packages it is used for the marketplace,
dependencies, resolution, registration and updates. Don't change it across versions. A manifest without it
is rejected with metadata.id is required; the removed package-id key is rejected with
metadata.package-id is no longer supported; use metadata.id.
namestringHuman-friendly name shown in the UI and marketplace. Optional; displays fall back to id. The removed
display-name key is rejected with metadata.display-name is no longer supported; use metadata.name.
descriptionstringA short summary of what the extension does.
iconstringAn icon name used in listings.
versionstringSemantic version of the extension (e.g. 1.2.0). Drives updates and marketplace listings.
authorstringThe publisher.
labelsmap<string,string>Free-form key/value labels for categorisation (e.g. category: editor).
annotationsmap<string,string>Machine-readable extension metadata used by optional platform integrations.
YAML key conventions
Manifest keys are hyphenated (mime-types, file-types, json-schema,
api-version, pull-policy, allow-scripts). Lists use standard YAML sequences. Booleans are true /
false.
Names are identity
metadata.id is the extension's permanent identity. Changing it is treated as a different
extension, not an update. Bump metadata.version to ship changes; keep id stable.
One registry, many kinds
Any YAML file with a valid kind + identity envelope is treated as a manifest and registered. Every
kind, package or not (scripts, triggers, schedules, webhook receivers, policies, documents), is identified by
metadata.id and labelled by the optional metadata.name.
Apps and engines simply differ in their kind and spec. This is what lets the platform discover,
register and govern every extension type uniformly.