All notable changes to this project will be documented in this file.
- bumped
@crystallize/js-api-clientto ^7.3.0 and@crystallize/schemato ^6.13.0
- reverse-DNS identifier
- optional plugin URL renamed from vendor url
- fix docs link
- added
plugin create <folder> [skeleton-identifier]command to scaffold a new Crystallize plugin from a selectable git skeleton: downloads the skeleton tarball (re-rooting an optional monorepo subfolder), generates an RSA JWK keypair (reusingplugin keygen's generator, writingpublic.jwk.json0644 /private.jwk.json0600 and ensuringprivate.jwk.jsonis gitignored even in a fresh non-git folder), substitutes mustache tokens, and installs dependencies. Interactive Ink journey by default; fully scriptable headless path via--no-interactive(--name,--identifier,--author,--vendor-url,--bits,--kid,--no-install). plugin createtoken substitution covers file contents and file/directory names across the scaffold (skippingnode_modules/.git, binary files, and symlinks):{{plugin_name}},{{plugin_identifier}},{{author_name}},{{vendor_url}},{{public_jwk}},{{private_jwk}},{{kid}}.plugin creatematerializes*.disttemplates to their final filenames before token substitution (e.g..env.dist→.env,dev-payload.config.jsonc.dist→dev-payload.config.jsonc), without overwriting an existing target, so the generated files receive their tokens too.- the no-lockfile dependency-install default for
plugin createisnpm(lockfiles still auto-detect bun/pnpm/npm/yarn). - added bash completion for the new
plugin createcommand.
- bumped
@crystallize/js-api-clientto ^7.2.0 (renamedsignature→signatureStatus,backendToken→backendTokenStatuson the decrypter result;envelope.config→envelope.configuration; newtenantId,event,signatureSecret,staticAuthTokenfields onCrystallizePluginPayload) and bumpedjoseto ^6 (drops theKeyLikere-export in favor of nativeCryptoKey). plugin decrypt-payloadlean output now dumps every protocol section the payload carries:[Envelope](tenantId / tenantIdentifier / installationId / pluginIdentifier / revisionId / event),[Configuration],[Context],[Secrets],[Plugin Tokens](signatureSecret / staticAuthToken),[JWT](envelope iss / aud / sub / iat / nbf / exp / jti) and[Backend Token]— sections only render when present, so webhook vs iframe variants stay scannable.plugin decrypt-payloadlean output formatsiat/nbf/expclaims as<unix-seconds> (<ISO-8601>)for at-a-glance freshness checks.
- added
plugin encrypt-secretcommand to encrypt a single secret value with a vendor public JWK (RSA-OAEP-256 / A256GCM), producing a compact JWE on stdout — the same shape Crystallize's UI generates for anenvelope.encryptedSecrets[fieldName]entry; useful for local dev / testing where the UI is not in the loop. Plaintext can be passed via--value, piped on stdin, or pasted interactively. Output round-trips throughplugin decrypt-payloadwith the matching private JWK. plugin encrypt-secretrejects private JWKs (those carryingd) and non-RSA keys with exit 2, so aprivate.jwk.jsoncannot be passed by mistake.- added bash completion for the new
plugin encrypt-secretcommand.
- added
plugin keygencommand to generate an RSA JWK keypair (RSA-OAEP-256 / A256GCM) for a Crystallize plugin revision; writespublic.jwk.json(0644) andprivate.jwk.json(0600) or emits both to stdout with--stdout; refuses to clobber existing files without--force(exit 3) and offers to add the private file to a discovered.gitignore - added
plugin decrypt-payloadcommand implementing the full Crystallize plugin payload protocol: outer JWE → inner JWS (RS256) verification against a JWKS → per-fieldencryptedSecretsdecryption → optionalbackendTokenverification (--verify-backend-token); payload can be pasted interactively, piped on stdin, or passed with--payload; signature failures are non-fatal — the envelope + secrets are still reported with the failure reason so you can inspect untrusted payloads against mock issuers. The decrypt pipeline itself is delegated tocreatePluginPayloadDecrypterfrom@crystallize/js-api-client. plugin decrypt-payloaddefault output is a lean human view ([Secrets],[Configuration],[Context],[Token]); pass--jsonfor the full structured document (protected headers, envelope claims, signature status, backend token status) and-v/--verbosefor the "no applicable key" diagnostic (inner JWSkid/algvs JWKS)plugin decrypt-payloadauto-derives--jwks-urland--issuerfrom theCRYSTALLIZE_ENVIRONMENTenv var (prod:https://api.crystallize.com, staging:https://api-dev.crystallize.digital); pass--audience <plugin-id>to enable verification. JWKS can alternatively be loaded from a local file via--jwks-file(offline / local-dev friendly).- added bash completion for the new
plugin keygenandplugin decrypt-payloadcommands - bumped
@crystallize/js-api-clientto ^7.0.0 and@crystallize/schemato ^6.12.0 - added
joseas a runtime dependency (used byplugin keygen)
- added
mass-operation validatecommand to locally validate a Mass Operation file against the schema, with per-operation grouped error display and non-zero exit on failure (no credentials or network required, CI-friendly)
- fix
mass-operation dump-content-modelgenerating thousands of duplicateshape/createandpiece/createplaceholders on tenants with cyclic content models (cycles are now deduplicated across the whole graph, and adjacency edges are deduplicated)
- added
updatecommand to self-update the CLI binary in-place - startup update notification now hints at
crystallize updateinstead of showing the curl reinstall command
- fix dump mass-operation dump-content-model command when the tenant has no Piece.
- added
add-mcpcommand to add the Crystallize MCP server to your environment - added
add-skillscommand to add Crystallize AI skills - added
update-skillscommand to update Crystallize AI skills - added bash completion for
serve,add-mcp,add-skills,update-skillscommands - bumped
@crystallize/schemato 6.11.0 - updated libraries (awilix, commander, ink, jotai, marked, meow, tar, zod, TypeScript 6)
- moved from prettier to
oxfmtfor code formatting
- update the version checker to fetch the remote changelog file instead and get proper changes.
- display operation logs in real-time during
mass-operation run, with color-coded status and a final drain to ensure all logs are shown
- bump the schema lib to 6.9.0
- add a new
mass-operationadd-operationcommand to help people create their mass operation file.
- bump the schema lib to 6.8.0
- bump the schema lib to 6.7.0
- bump the schema lib to 6.6.0
- bump the schema lib to 6.5.0
- adding a new check on start to check if the CLI running version is the last one
- bump the schema lib to 6.3.4
- bump the libs for pricelists fix
- really bump the libs for topics
- really bump the libs.
- really bump the libs.
- bump libs and schema lib to 6.0.0.
- bump libs and schema lib to 5.3.
- add an option to dump the model without any item id references.
- bump libs and schema lib to 5.2.
- bump libs and schema lib to 5.1.
- added more errors on the serve command when authentication is failing.
- piece name are now maintained in the content model dump.
- move a log to a debug log.
- allow relative path in bynary uploads.
- update libs.
- use new js-api-client.
- handle file uploads in extra mutations.
- adds codes to messages that are streamed to FE while tenant is being updated with selected template.
- schema 4.0.0
- compatible with Mass Operations for Customers.
- replace all iteration of the placeholders in the install process.
- Enable CORS.
- Expose the Crystallize Env in the web server default response.
- simplify building.
- expose the CLI enroll command.
- add the enroll command.
- bumping libs.
- bump Bun version to 1.2.4.
- call the bashcompinit if complete does not exist in the shell for autocompletion.
- really fixing typo introduced in 5.4.4.
- fix typo introduced in 5.4.4.
- adding the product configurator boilerplate.
- a bit more messages on the install trace.
- fix the completion file.
- add documentation.
- add doc command.
- add the Furnitut boilerplate.
- Fix duplicates in the content model dump.
- add a command to upload assets.
- add a command to execute mutations with dependencies.
- fix tenantId that was not setup on the .env file after installation.
- add discovery api tenant ignition.
- fix bug introduced in the 5.2.1 for tenant create command.
- capability to replace Root Tenant Id and Vat Type in the install process from the extra mutation.
- new boilerplates
- dump content model as Mass Operations.
- create invite(s) command.
- get Shop Auth token command.
- get Static Auth token command.
- get Pim Auth token command.
- added missing
tenantin the completion command list.
CHANGELOG.mdfile is not present and can be used.- add the
changelogcommand. - script completion file is installed on program run, and the install bash is reloading the SHELL.
- create tenant command.
- revamped the command organization. (BC).
- (internal) Make it work on the Crystallize Staging environement.
This is the new version that will live in the future, built on top of Bun.js it is shipped through Github and does not require anything on the user side.
logincommand to save your credentials~/.crystallize/credentials.json.whoamitells you who is logged-in via~/.crystallize/credentials.json.- (wip)
install-boilerplateto install boilerplates. run-mass-operationto run Mass Operation files.
The 4.x version called @crystallize/cli-next, hosted in NPMJS is now deprecated, it was mainly used to install boilerplates, dump and import.
tenant data. It was using @crystallize/import-utilities which is now deprecated in favor of Mass Operation.
The 3.x version called @crystallize/cli, hosted in NPMJS is now deprecated, it was mainly used to install old-legacy boilerplates.