Minor Changes
-
#1040
e6f7311Thanks @ascorbic! - Addsemdash-plugin.jsoncmanifest support. Plugin authors can now declare profile fields (license, author, security contact, name, description, keywords, repo) once in a hand-edited JSONC file instead of passing them as flags on every publish. The CLI loads./emdash-plugin.jsoncautomatically; explicit flags still win for CI use.New
emdash-plugin validatecommand checks a manifest against the schema offline withtsc-style file:line:column diagnostics.The manifest's optional
publisherfield pins the publishing identity. On first successful publish, the CLI writes the active session's DID back to the manifest. Subsequent publishes verify the active session matches the pinned publisher and refuse on mismatch to prevent accidental cross-account publishes.JSON Schema for IDE completion ships in the package at
schemas/emdash-plugin.schema.json; reference it via"$schema": "./node_modules/@emdash-cms/plugin-cli/schemas/emdash-plugin.schema.json". -
#1057
c0ce915Thanks @ascorbic! - Renames@emdash-cms/registry-clito@emdash-cms/plugin-cliand the binary fromemdash-registrytoemdash-plugin. The package's job has outgrown the original name —init,build,dev,bundle,publish,search,info,login,logout,whoami, andswitchcover plugin authoring + identity + discovery, not just registry interaction. Adopt the new name on first install; the old package is no longer published.This release also adds
emdash-plugin buildandemdash-plugin devand consolidates the build pipeline sobundleis a thin packaging step on top ofbuild.emdash-plugin buildreadsemdash-plugin.jsoncandsrc/plugin.ts, then emits:dist/plugin.mjs(+dist/plugin.d.mts) — runtime bytes (hooks + routes). The same artifact is consumed both in-process (when the plugin is inplugins: []) and by the sandbox loader (when insandboxed: []).dist/manifest.json— wire-shapePluginManifestincluding hooks + routes harvested from probingsrc/plugin.ts.bundlepacks this verbatim into the registry tarball; on the npm path it's metadata that consumers can read without parsing JSONC.dist/index.mjs(+dist/index.d.mts) — descriptor module that default-exports a barePluginDescriptorobject. Emitted only when a siblingpackage.jsonexists (registry-only plugins skip this, since nothing would import it).
emdash-plugin devwatchessrc/**,emdash-plugin.jsonc, andpackage.json, debouncing rebuilds at 150ms. On a failed rebuild it leaves the last gooddist/in place so a downstream site importing the plugin keeps working until the next successful build. Stop with Ctrl-C.A typical plugin
package.json:{ "scripts": { "build": "emdash-plugin build", "dev": "emdash-plugin dev" } }versioninemdash-plugin.jsoncis now optional. The build reconciles the manifest'sversionwithpackage.json#version:- Both set and matching → fine.
- Both set and different → hard error.
- One set → that value wins.
- Neither set → hard error.
The recommended pattern for npm-distributed plugins is to omit
versionfrom the manifest and letpackage.jsonbe the source of truth. Registry-only plugins (nopackage.json) must setversionin the manifest.emdash-plugin bundlehas been reduced to a packaging step: it now callsbuildto producedist/, validates the bundle contents (no Node-builtin imports, no oversized files, capability sanity), collects optional assets (README, icon, screenshots), and tarballs. Inside the tarball,plugin.mjsis renamed tobackend.jsto match the registry's wire-side filename.validateOnlystill skips tarball creation but now produces thedist/artifacts (since "validate" implies "build first").
Patch Changes
-
#1091
6725e91Thanks @ascorbic! - Renames the multi-word flags onbuild,dev, andbundlefrom camelCase to kebab-case for consistency withpublishand standard Unix CLI convention.--outDir->--out-dir--validateOnly->--validate-only
The short alias
-ofor--out-diris unchanged. -
#1092
6788829Thanks @ascorbic! - Renames the--aggregatorflag onsearchandinfoto--registry-urlfor consistency with theEMDASH_REGISTRY_URLenv var and the rest of the user-facing surface. Internally the override still selects the aggregator service to query — the rename only affects what users type.Old:
emdash-plugin search "image" --aggregator https://registry.example.comNew:
emdash-plugin search "image" --registry-url https://registry.example.com