Publish an adapter
You need openssl and jq, and an owner or admin account in your organisation on
Adapter Studio.
1. Make a signing key
ZAITRACK accepts one algorithm: ECDSA on the P-256 curve over SHA-256, the signature in ASN.1 DER, base64.
openssl ecparam -name prime256v1 -genkey -noout -out key.pem
openssl ec -in key.pem -pubout -out key.pub.pem
Keep key.pem secret: anyone holding it can sign versions as you. In Adapter Studio, Signing keys → Register a
key, give it a name (2 to 80 characters) and paste key.pub.pem. The studio shows the key's fingerprint,
SHA256: and the base64 SHA-256 of the DER public key.
2. Create the project
Projects → New project: a slug (lowercase letters, digits and hyphens), the family (codec,
connector, datasource, action or ai), a display name, a summary and description, an SPDX licence
(LicenseRef-… for your own) and the visibility: public (any organisation can see and install its approved
versions) or tenant-only (your organisation only).
3. Write the manifest
adapter.json says who the adapter is, what it can do, the permissions it asks for and the settings an
installation must give:
{
"id": "acme-fleet-export",
"family": "connector",
"version": "1.0.0",
"displayName": "Acme fleet export",
"capabilities": ["export"],
"permissions": ["trips:read"],
"config": [
{"key": "sftpHost", "type": "url", "required": true, "label": "SFTP host"},
{"key": "password", "type": "secret", "required": true, "label": "Password"}
]
}
id: 3 to 64 characters, lowercase letters, digits and hyphens, starting with a letter and not ending with a hyphen. The version must be new for the project.version: semantic versioning (1.0.0,1.1.0-rc.1).displayName: at least 3 characters.config[].key: a letter, then letters, digits or_(48 at most), each key once.config[].type:text,number,url,secretorport. Asecretsetting is never shown back once given.
4. Sign the canonical manifest
The registry signs and checks the canonical manifest: keys sorted, no insignificant whitespace, no trailing
newline. Make it with jq, then sign it:
jq -cSj . adapter.json > manifest.canonical.json
openssl dgst -sha256 -sign key.pem manifest.canonical.json | base64 -w0 > signature.b64
Keep the characters &, < and > out of the manifest's strings: the registry writes them as \u0026,
\u003c and \u003e and jq does not, so the signature would not match. On macOS, use base64 without -w0
(it does not wrap).
5. Submit the version
Projects → your project → Submit a version: paste adapter.json, the content of signature.b64 and choose
the key. Optionally give the artifact's address (https:// or oci://). The registry makes the manifest canonical,
hashes it with SHA-256 and checks the signature against your key. A wrong signature or a revoked key is refused.
The version waits as pending-review.
6. Review
ZAITRACK staff run the conformance suite and record its result: coverage and how many checks passed and failed. A version is approved only with a run of at least 85 % coverage and no failures; staff approve with a note, or reject with a reason.
7. Installations
Organisations install an approved version and fill in the settings your manifest declares. They can upgrade to another approved version, change settings, suspend, resume and uninstall. You see one installation per organisation, with its version and status.
An active installation is a registry state, not proof of a connected device or a prepared runtime. Before deployment, follow Codec readiness; keep approval, installation and device evidence separate.
Revoking a key
Signing keys → Revoke, with a reason. In one step it revokes every version that key signed and suspends their installations; the key goes on the revocation list with when and why. An installation resumes once it is upgraded to a version that is not revoked: sign the next version with a new key.