v3.0.0
·
202 commits
to release
since this release
3.0.0 (2026-05-19)
- refactor(feel)!: rename eval to evaluate, drop runtime feelin warning (cc2eebf)
Bug Fixes
- address review comments from PR #347 (5b8f919)
- bpmn,element-template: read piped stdin asynchronously to avoid EAGAIN race (75e9c30)
- bpmn: replace bpmn-js-headless/element-templates with element-templates-cli (2a3a65f)
- bpmn: scope bpmnlint plugin resolution to c8ctl's require (57159a6)
- ci: re-enable --experimental-test-isolation=none for integration tests (closes #312) (11241de), closes nodejs/node#56802 #189 #282 #326 #182 #189 nodejs/node#56802
- constrain heading base to 2 or 3 (b599748)
- default-plugins: fix all lint errors and warnings in default-plugins (a082e4d)
- element-template: error on empty name + --group filter intersection (154786d)
- element-template: gate --in-place before reading stdin (43f7925)
- element-template: make --set win on re-apply (f45ad30), closes bpmn-io/bpmn-js-properties-panel#767
- element-template: silence DOM-related label-bounds errors via no-op TextRenderer (1c91966)
- element-template: treat pinned version 0 as a real version (407f058)
- element-template: validate --group ids against the full template (fcccb62)
- feel: accept SDK error shape with either status or statusCode (8b61861)
- feel: classify bare "fetch failed" as a connection error (2bdcda2)
- feel: guard setNestedValue against prototype-polluting key paths (4a12923)
- freeze array (91af6b7)
- plugin-host: leave ctx.profile undefined so env vars can win (827589f)
- plugin-loader: preserve multiple-flag arrays when forwarding to plugin handler (b37b364)
- plugins: block short alias conflicts with built-in flags (32d9161)
- plugins: built-in commands take precedence over plugin commands (ea433a6)
- plugins: decouple default plugins from c8ctl internals (898167f)
- plugins: guard against prototype-chain matches in plugin-loader (43c6aad)
- plugins: harden plugin flag parsing (553ee76)
- plugins: move plugin dispatch after help/menu handling (b8724f3)
- plugins: preserve arity of bare-function commands when flags absent (fc256be)
- plugins: skip blocked flags in extraction and normalize repeated string flags (1c04dbb)
- plugins: strip blocked-flag tokens before plugin reparse (70f60a3)
- plugins: use Object.hasOwn for plugin command lookup in index.ts (c7c77cd)
- reject unsatisfiable plugin required+collision flags at dispatch (#364) (a4e3146)
- resolve .c8ignore from target directory instead of cwd (d01362f)
- resolve .c8ignore from target directory instead of cwd (b375315), closes #258
- revert deploy default extensions to .bpmn/.dmn/.form and add opt-in flags (13df974), closes #275 #350
- tests: bind mock servers to kernel-assigned ports (closes #316) (15d23f6), closes #313
- Update default-plugins/element-template/marketplace.js (5ca15a0)
- watch: emit readiness banner only after fs.watch + SIGINT handler are registered (133715c)
Features
- add --dry-run support to element-template apply (dbbd5d9)
- add --json global flag and C8CTL_OUTPUT_MODE env for per-invocation output (c6d296f), closes #356
- add c8ctl doctor plugin and document collision policy (#363) (d154051), closes 366/#367
- bpmn: add bpmn default plugin with lint and apply-element-template (7a25054)
- bpmn: add bpmnlint and element-template dependencies (8a4bda0)
- bpmn: align lint output columns and color severity/summary (695fa82)
- bpmn: print success line on clean lint, add --quiet flag (99d49ce)
- element-template: add --limit to search (a71278c)
- element-template: add --no-icon flag to get subcommand (3e04644)
- element-template: add get subcommand for raw template JSON (f2634b3)
- element-template: apply, search and sync OOTB connector templates (6b5bdbf)
- element-template: redesign inspect surface as info + get-properties (8778424)
- element-template: send User-Agent on outbound HTTP calls (f7893fb)
- element-template: show dropdown choices in condensed get-properties (bfa523e)
- element-template: split into element-template and bpmn verbs, add --set and list-properties (acb2ecd)
- element-template: support URLs for template paths (0c38f9f)
- feel: add feel plugin for evaluating FEEL expressions (7b57e30)
- feel: richer evaluate warnings (d7d0fdd)
- framework: add multiple flag support to FlagDef (7b6222d)
- generate standalone Docusaurus command reference page (e739ab3)
- generate standalone Docusaurus command reference page (a154419)
- help: scope top-level Flags section to global flags only (35953f3)
- honour --help on every (verb, resource) form (35580f3), closes #373 #373 #256 #373
- introduce passthrough:true plugin contract opt-in (#366) (11fd3f8), closes #251
- lint: add Biome plugin forbidding process.exit under src/commands/** (#289) (41c1896), closes #288 #306
- plugin host context, declarative --help, and --version (#377) (695bb6e)
- plugins: add flag support for plugin commands (382d630)
- runtime: expose getUserDataDir to plugins (64306a2)
- scope plugin flag conflicts to GLOBAL_FLAGS only (#373) (6694892), closes #364
- show resource aliases in resource-specific flags and escape angle brackets for MDX (faac13e)
- surface plugin collisions in
c8ctl list plugin(#363) (cac2585), closes #369
BREAKING CHANGES
- 'c8ctl feel eval' is now 'c8ctl feel evaluate'. No
backwards-compat alias — the verb's other subcommands (apply, info,
get-properties, lint, ...) all use full words; eval was the only
abbreviation.
The one-time 'feelin doesn't support all Camunda FEEL extensions'
runtime warning is gone — the same caveat lives in the verb's
helpDescription and in the LOCAL_HINT shown when cluster failures
suggest --engine local, so users see it where it's actionable
(during help / on cluster errors) instead of as noise on every
local-engine run.