Signatures required to publish
Every publish needs a developer signature. Projects with Dev status need only that signature. Production Cognite Data Fusion (CDF) projects without Dev status need both that signature and Cognite’s app certification signature (.cert.sig) from Application certification. Each signature is tied to the exact bundle bytes. This guide covers the developer signature only.
Prerequisites
- The latest Cognite CLI (
npx @cognite/cli@latest). - A Flows custom app with
app.json(withinfraset toappsApi). - Access to the CDF project you’ll deploy to.
- Builder certification, or signing instructions from the team reviewing your app.
- Application certification if you’re publishing to a production project and need Cognite’s
.cert.sig.
Generate and register a signing key
Do this after you claim the builder certificate. Every publish needs a developer signature from a key that Cognite has registered. Generate a signing key and submit the Zendesk URL that the CLI prints. You need one registered key to publish apps to any CDF project.Generate a signing key
kid), give the key a short name for this machine, such as juno-laptop. The key expires in 12 months. On macOS, the private key goes in Keychain (a password prompt is expected). On Windows, it goes in Credential Manager. Don’t email the .pub.pem file. The Zendesk URL already includes the public key.These flags change how the CLI collects the name and how you get the Zendesk URL.--kid and --email together, the CLI skips prompts and prints the URL plus a YAML block. Use the URL. Don’t paste YAML into a blank ticket.Register the public key
keys generate printed. Don’t paste YAML into a blank ticket.Support checks that you completed Cognite Flows Foundation and the hands-on workshop, then replies when they add the key. New keys become available on weekdays during business hours in Central European Time (CET). Until then, apps status can show KEY_NOT_IN_REGISTRY. If publish fails with a 403 that mentions CDF capabilities, that message is generic. It is not an access problem. See 403: signing key is not in the public key registry.Upload, sign, and publish the app
After your public key is registered, use these steps to upload, sign, and publish each version of the app.Build and upload
apps deploy packages dist/, uploads it as a DRAFT, and keeps a copy of the exact bytes at .cognite-bundles/<externalId>-<versionTag>.zip so signing operates on what the platform actually received. The app scaffold gitignores .cognite-bundles/. Don’t commit bundle files from that folder.Sign the bundle
apps sign uses externalId and versionTag from app.json. It finds the matching .cognite-bundles/<app>-<version>.zip, writes <bundle>.dev.sig next to it, and submits the signature to the platform. Override with --signing-identity <kid>, --scope <org>/<project>, or an explicit bundle path.Run apps status to verify the signature was accepted before you publish.Publish
apps publish transitions the version from DRAFT to PUBLISHED. Signatures were already submitted by apps sign; publish re-submits any local .dev.sig (and .cert.sig if present) as a safety net, then flips the lifecycle state.Confirm
kid), the role (developer or certifier), the time the signature was issued, and the platform’s verdict.You’ll see one of three shapes depending on where you are in the flow:Before apps deploy:apps deploy, before apps sign + apps publish:VALID means the platform won’t accept that signature for serve-time verification. The verdict table explains each result and what to do.VALID for the expected kid. Anything else needs action before the version will serve.Production certification (Cognite signature)
Production CDF projects without Dev status need both a developer signature and an app certification signature. The two signatures are independent. Cognite signs the same bundle bytes with their own key and returns the signature to you. Complete the Upload, sign, and publish the app steps through Sign the bundle, then add these steps before you publish the application:Submit the app for review
apps submit packages a source archive (src-<sha>.zip), copies the deploy bundle into dist/submit/, and opens a pre-filled Zendesk request with the app metadata. Attach everything in dist/submit/ plus a screen recording of the app, then submit.Receive the certification signature from Cognite
.cert.sig file. Save it to your app’s .cognite-bundles/ folder next to the deploy bundle, named <externalId>-<versionTag>.cert.sig.For example, for app sign-test-app version 0.0.3:.cognite-bundles/ in your file manager from the app folder:- macOS
- Windows
- Linux
.cert.sig to git. The scaffold gitignores .cognite-bundles/ for this reason.Publish
apps publish picks up both .dev.sig and .cert.sig, submits the certifier signature, and transitions the version to PUBLISHED.Run apps status . to confirm both signatures show as VALID.Sign again when the bundle changes
The signature is bound to the exact bytes of the bundle. Anything that changes the bundle invalidates the signature:- Re-running
npm run build - Editing files in
dist/ormanifest.json - Bumping the app version
apps deploy, apps sign, and apps publish in order. deploy overwrites the bundle file at the same path, so the next sign picks up the new bytes automatically.
Rotate or replace a key
Generate a new key when the old one expires, you move to a new machine, or you suspect the private key is compromised:npx @cognite/cli@latest keys generate --interactive.- Register the new public key.
- Sign new bundles with the new key.
- Ask your Cognite contact to revoke the old key if needed.
Troubleshooting
No signing identities were found
No signing identities were found
npx @cognite/cli@latest keys generate --interactive, then retry the signing command.Publish fails with bundle hash mismatch
Publish fails with bundle hash mismatch
npx @cognite/cli@latest apps deploy— refreshes.cognite-bundles/<app>-<version>.zipwith the bytes the platform has.npx @cognite/cli@latest apps sign— signs the refreshed bundle.npx @cognite/cli@latest apps publish .— submits the new signature.
apps status shows KEY_NOT_IN_REGISTRY
apps status shows KEY_NOT_IN_REGISTRY
apps sign stores the signature even if the key isn’t in the registry yet. Wait until the key is available on a weekday during business hours, Central European Time. Don’t sign or publish again while you wait. apps status flips to VALID on its own. If publish returned 403, see 403: signing key is not in the public key registry and run apps publish again after the key is available.403: signing key is not in the public key registry
403: signing key is not in the public key registry
kid isn’t in the public key registry. The second sentence is a generic message the CLI shows for any 403. It is not an access problem. Don’t contact your CDF administrator for this error.Either you signed with a different local key than the one you registered, or the registered key is not available yet. Run npx @cognite/cli@latest keys list. If you signed with the wrong key, sign again with --signing-identity <kid> and publish again. If you used the registered key, wait until the key is available on a weekday during business hours, Central European Time (CET), then run apps publish again. You don’t need to sign again.If the error continues during business hours, Central European Time, contact Cognite support.apps status shows IAT_IN_FUTURE or SIGNED_BEFORE_KEY_ISSUED
apps status shows IAT_IN_FUTURE or SIGNED_BEFORE_KEY_ISSUED
apps sign and apps publish.Publish fails with two signatures required
Publish fails with two signatures required
.cert.sig Cognite returns.Multiple signing keys
Multiple signing keys
npx @cognite/cli@latest keys list, find the correct kid, and pass it with --signing-identity <kid>.Lost access to Mac or Keychain
Lost access to Mac or Keychain