Submit an implementation

Send your AIM metadata. The Store validates it, assigns an Implementation ID, signs a trust statement and publishes it.

To see a valid submission, press Load example below, then Validate only — no credentials needed.

Metadata

Required keys: Header, Identifier, APIProfile, Description, ExternalPorts, Implementations. Every /* ... */ placeholder must be filled in or removed.

Used instead of the text box above.

Filled in from Identifier.AIMName. Your metadata must match this AIM's definition — its ports, profile and wiring — or it cannot be published.

Letters, numbers and underscores. One implementation per platform, so give each build its own name.

Checks your metadata without publishing anything. No Implementer ID or token needed.

Archive

You host the archive; the Store signs its URL and hash. The URL must match the ImplementationURI in your metadata.

How to get the SHA-256 and the size

Replace your-aim.zip with your archive file. The SHA-256 is the 64-character value the first command prints; the second prints the size in bytes.

Linux or WSL:

sha256sum your-aim.zip
stat -c %s your-aim.zip

macOS:

shasum -a 256 your-aim.zip
stat -f %z your-aim.zip

Windows PowerShell:

(Get-FileHash your-aim.zip -Algorithm SHA256).Hash.ToLower()
(Get-Item your-aim.zip).Length

Or download the copy you are hosting, then run the commands above on it — Linux, macOS or WSL:

curl -fsSL -o your-aim.zip 'https://you.example/aims/pkg.zip'

Windows PowerShell:

Invoke-WebRequest 'https://you.example/aims/pkg.zip' -OutFile your-aim.zip

The size must match what your server reports.

Authorship signature optional, recommended

Proves you authored this submission, not just that you hold the token. Made with your signing key.

How to produce the authorship signature

Run these where your private key lives — the Store never sees it. Replace the highlighted values with your own.

Your Implementer ID and your archive's URL, SHA-256 and size:

IMPLEMENTER_ID='MPAI0042'
ARCHIVE_URL='https://you.example/aims/pkg.zip'
ARCHIVE_SHA256='paste-the-64-character-sha256-here'
ARCHIVE_SIZE='123456'

The SHA-256 of the metadata file you are submitting — Linux or WSL:

MSHA=$(printf '%s' "$(jq -cSa . your_aim.json)" | sha256sum | cut -d' ' -f1)

macOS:

MSHA=$(printf '%s' "$(jq -cSa . your_aim.json)" | shasum -a 256 | cut -d' ' -f1)

Build the manifest:

jq -cSa -n --arg i "$IMPLEMENTER_ID" --arg m "$MSHA" --arg u "$ARCHIVE_URL" --arg h "$ARCHIVE_SHA256" --argjson s "$ARCHIVE_SIZE" '{_type:"mpai-submission",spec_version:"2.0",implementer_id:$i,metadata_sha256:$m,artifact:{download_url:$u,sha256:($h|ascii_downcase),size:$s}}' | tr -d '\n' > manifest.json

Sign it with your private key:

openssl pkeyutl -sign -inkey mpai_key.pem -rawin -in manifest.json -out sub.sig

Print the signature, and paste it into the Authorship signature field:

xxd -p -c 256 sub.sig | tr -d '\n'

Needs OpenSSL 3.0 or later (check with openssl version). The openssl built into macOS is LibreSSL, which cannot do this; install OpenSSL 3, for example with brew install openssl@3. Keep the a in jq -cSa: without it, any non-ASCII character changes the bytes and the signature will not match.

Publish

The secret string you were given when you registered.