Publishing Extension Packs
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
Greentic designer extensions are published as signed .gtxpack artifacts. The pack bundles the extension’s describe.json (the source of truth for its metadata), the built wasm32-wasip2 component, and the publisher’s Ed25519 signature. The production registry is store.greentic.cloud, configured by default as the greentic-store registry.
This page uses the gtdx CLI. The end-to-end flow is: generate a signing key, log in to the registry, then publish a signed pack.
1. Generate a Signing Key
Section titled “1. Generate a Signing Key”Extensions are signed with an Ed25519 keypair. Generate one with gtdx keygen. Publishing with --key-id <id> loads the private key from ~/.greentic/keys/<id>.key, so write the key there:
gtdx keygen --out ~/.greentic/keys/my-key.keyThe private key file is written with mode 0600 and must not already exist. Omit --out to print the key to stdout instead.
2. Log In to the Registry
Section titled “2. Log In to the Registry”gtdx login stores a registry token at ~/.greentic/credentials.toml:
gtdx login --registry greentic-storeBy default this opens a browser device login. For headless or CI use, pass --token <token> (or set the GTDX_TOKEN environment variable), which makes login non-interactive. Use --no-browser to print the login URL instead of opening it, or --paste to paste a token manually.
Inspect the configured registries at any time:
gtdx registries listThe default install ships greentic-store pointing at https://store.greentic.cloud and set as the default registry. Add or change registries with gtdx registries add <name> <url>, gtdx registries remove, and gtdx registries set-default.
3. Validate Before Publishing
Section titled “3. Validate Before Publishing”gtdx publish --dry-run runs the full build + pack + validate path without writing to the registry:
gtdx publish --registry greentic-store --dry-runYou can also validate the describe and signature independently:
gtdx validate . # validate the extension directory against the describe.json schemagtdx lint ./describe.json # cross-field invariants beyond JSON Schemagtdx verify ./my-extension.gtxpack # signature + manifest binding + ledgergtdx verify accepts a describe.json file, an extension directory, or a .gtxpack archive. Pass --trusted-key <base64-ed25519> to assert the signature was produced by a specific publisher key; without it, only describe self-consistency is checked.
4. Publish a Signed Pack
Section titled “4. Publish a Signed Pack”Build, sign, and publish in one step:
gtdx publish --registry greentic-store --sign --key-id my-keyPublishing returns the artifact path, its sha256, whether it was signed, and a registry receipt. By default a copy of the artifact is also written to ./dist (override with --dist). Use --format json for machine-readable output.
Useful publish options:
--sign— sign the.gtxpack. Requires a key via--key-id,--key, or--key-env.--key-id <id>— load the PKCS8 PEM key at~/.greentic/keys/<id>.keyand label the signature with<id>.--key <file>— explicit PKCS8 PEM key file (overrides--key-id).--key-env <var>— read the PKCS8 PEM key from an environment variable (CI / headless). Defaults toGREENTIC_EXT_SIGNING_KEY_PEM.--version <version>— override thedescribe.jsonversion for this run (CI version bumps).--trust <loose|normal|strict>— trust policy for the publish (defaultloose).--force— overwrite an existing version.--wizard/-w— interactive prompts for registry, mode, signing, and trust instead of the full flag string.--registry <uri>— a named entry from~/.greentic/config.toml, afile://<path>, or anoci://<host>/<namespace>URI (defaultlocal).
How the Store Verifies a Pack
Section titled “How the Store Verifies a Pack”When an extension is registered, the store and admin verify the published .gtxpack:
- The artifact
sha256is checked against what was published. - The Ed25519 signature is verified against the trusted publisher keys.
- The
describe.jsonis the single source of truth for the extension’s metadata; the store validates it against its schema (for example,describe-mcp-v1forwasix:mcp/routercomponents).
A pack that fails signature or hash verification is rejected.
Versioning
Section titled “Versioning”Version the extension and its describe intentionally:
- Bump the
versionindescribe.json/Cargo.tomlfor every published change. - Keep the extension
idstable across versions. - Treat component operation and tool names as part of the runtime contract.
- Branch-suffix conventions used by CI:
research→-research,develop→-dev,main→ a stable version with no prerelease suffix.
For automated, CI-driven publishing on a version bump, see Extension CI.