Changelog
0.6.0
Strategyremoved- Added
recipes/astro— runsastro buildlocally, then uploads the generated artifacts to the new release - Added
recipes/vitepress— runsvitepress buildlocally, then uploads the generated static files to the new release - Added
recipes/nuxt— exposesdeploy:buildfornuxt buildand a manualnuxt:generatetask - Added
recipes/directus— exposes Directus database migration and schema snapshot tasks - Added
recipes/redis— exposesredis:db:flushfor one or many configured DBs, plusredis:db:flush_allforFLUSHALL recipes/gitnow clones or resets directly intoreleases/<release>while keeping a bare mirror in.catapult/reporecipes/rsyncnow always syncs the contents of the configured source directory into the release, normalises the trailing slash automatically, and keeps--deleterecipes/adonisjsnow wires the built-indeploy:installanddeploy:buildtasks, with migrations exposed asace:*tasks- Pipeline insertion now deduplicates tasks — if a task is added again with
before()orafter(), the previous occurrence is removed and the last position wins - Added
--config/-cglobal flag — points to an alternative deploy config file (default:deploy.ts)
Released at _2026-05-11
0.5.0
rollbackcommand now accepts--interactive/-iflag — lists available releases and prompts for selection, with the current release marked and disabled--hostflag now has a-Hshort alias — available on all commands--branchflag ondeploynow has a-bshort alias- Added
local(command, options?)to the task DSL — executes a shell command on the local machine, with optionalcwd; flushes queued SSH commands first - Fixed
upload()anddownload()not interpolating template variables (e.g.) inremotePath
Released at 2026-04-24
0.4.0
- Added
Verbose.TRACElevel (2) betweenNORMALandDEBUG—NORMALnow only shows task progress,TRACEshows SSH commands,DEBUGstreams stdout; existing indices shifted (DEBUGis now3) Verbose.SILENT(0) no longer displays anything — task progress previously shown atSILENTis now gated atNORMAL- CLI flags extended:
-vvvsetsVerbose.DEBUG(level 3);-v→NORMAL,-vv→TRACE isVerbose()signature changed: now takes aVerboselevel and returnsboolean— e.g.isVerbose(Verbose.TRACE)- Added
upload(localPath, remotePath)anddownload(remotePath, localPath)to the task DSL — transfer files via SCP, reusing the SSH multiplexing socket upload()anddownload()now resolve relativeremotePathvalues againsthost.deployPath
Released at 2026-04-23
0.3.0
- Added
list:revisionscommand — displays the last 10 deployments from.catapult/revisions.login a table (release, branch, commit, author, date) sshcommand now opens the session directly indeployPathinstead of the home directory- Removed
--ansiglobal flag — it only affected Ace's UI components, not the deploy logger, so it was misleading - Added
Verboseenum (Verbose.SILENT,Verbose.NORMAL,Verbose.DEBUG) — replaces the raw0 | 1 | 2type for theverboseconfig option; available via@catapultjs/deploy/enums - Added
@catapultjs/deploy/enumsexport — exposesStrategy,PackageManagerandVerbose
Released at 2026-04-17
0.2.0
- Added
catapult/typesexport — types can now be imported directly fromcatapult/types recipes/adonisjs:adonisjs:migratenow runs beforedeploy:publishregardless of the active strategy — replaces the previoushasTaskconditional that placed it afterdeploy:build:copyoradonisjs:build- Fixed:
adonisjs:migratenow passes--forcetoace migration:run, which is required in non-interactive deployment environments - Fixed: default
strategywas incorrectly falling back toStrategy.BUILDinstead ofStrategy.DIRECTwhen not set indefineConfig
Released at 2026-04-15
0.1.0
- Added
Strategyenum (Strategy.BUILD|Strategy.DIRECT) — controls where install/build tasks run before being copied to the release - Added
strategyoption todefineConfig(default:Strategy.DIRECT) — when set toStrategy.BUILD, two new tasks are inserted into the pipeline:deploy:build:shared(symlinks shared paths into the build directory) anddeploy:build:copy(copies build output into the release) - Added
template variable — resolves to{deployPath}/.catapult/builder::: - Added
git:updatetask inrecipes/git— maintains a cached bare mirror of the repository on the server;deploy:update_codenow clones from this local mirror instead of the remote TaskContext: replaceddeployCtxwith two top-level fields —config(the resolved config object) andrelease(the release name string)deploy:log_revisionnow writes structured JSON to.catapult/revisions.loginstead of a plain text line inrevisions.logcata statusnow displays the last deployment revision (branch, commit, author, date) when available- Renamed CLI command
list:pipeline→pipeline - Server paths reorganised under
.catapult/—deploy.lockis now at.catapult/deploy.lock, and new pathsrepo(.catapult/repo) andbuilder(.catapult/builder) are exposed onTaskContext.paths paths.cataConfigadded — resolves to{deployPath}/.catapult- Added
has(key)to the store — returnstrueif the key is set recipes/pm2: removedpm2:ecosystemtask —ecosystem.config.cjsis now read directly from the release path; renamedpm2:start→pm2:startOrReload(starts or reloads); added a newpm2:starttask that only starts processesrecipes/nodejs,recipes/bun: tasks now operate onwhenstrategyisBuild; pipeline positions updated (nodejs:install/bun:installafterdeploy:update_code, build task afterdeploy:build:shared)recipes/adonisjs: tasks are now strategy-aware;adonisjs:migrateis inserted afterdeploy:build:copywhen using the Build strategy
Released at 2026-04-15
0.0.6
- Added
runcommand — executes a shell command on one or more hosts via SSH (npx cata run "pm2 list") - Added
desc(description)function — sets a description for the nexttask()call, displayed incata list:tasks - Added
afterFailurehook — called when a deployment fails, receives{ hosts, error } packageManageris now auto-detected from lock files (bun.lock,pnpm-lock.yaml,yarn.lock,package-lock.json) if not set indefineConfigrecipes/pm2: addedpm2:deletetask — deletes all processes from PM2
Released at 2026-04-11
0.0.5
- Added
recipes/nodejs— registersnodejs:install,nodejs:install:production,nodejs:buildandnodejs:testtasks, inserted automatically afterdeploy:shared - Added
recipes/bun— same tasks prefixed withbun:, for Bun-based projects packageManageris now adefineConfigoption ('npm' | 'pnpm' | 'yarn' | 'bun', default'npm') instead of a store key —pm(),pmInstall()andpmInstallProd()read from configpmInstall()andpmInstallProd()now handlebun(bun install --frozen-lockfile,bun install --production)healthcheckUrl,healthcheckRetriesandhealthcheckDelayMsreplaced by ahealthcheckobject on eachHost({ url?, retries?, delayMs? }) — allows per-host healthcheck configurationkeepReleasesis now optional indefineConfig(default:5)
Released at 2026-04-10
0.0.4
defineConfignow returns a function and must be used asexport default defineConfig({...})— the CLI calls it explicitly, giving full control over execution order- Added a
loggerinstance toTaskContext,onStatus()andonSetup()callbacks — no more direct imports needed inside tasks and recipes ssh()now accepts a{ color: true }option that prependsexport FORCE_COLOR=1to the remote command, enabling colored output from tools like PM2recipes/pm2: addedpm2:showtask — displays detailed PM2 process info for each app defined inecosystem.config.cjsrecipes/pm2:pm2:logsandpm2:listnow use{ color: true }for colored terminal outputtaskcommand now accepts-v/-vvverbose flags (consistent withdeploy)- Fixed:
deploy:unlockis no longer called whendeploy:lockitself fails — a lock held by another deployment is no longer removed on error
Released at 2026-04-09
0.0.3
verboseconfig option changed frombooleanto0 | 1 | 2: level1prints SSH commands, level2also streams stdout- Added
--verbose/-vand-vvCLI flags on thedeploycommand to override the config verbosity at runtime recipes/pm2: addedpm2:ecosystemtask — symlinksecosystem.config.cjsfrom the release into the base deploy path so PM2 always references a stable pathrecipes/pm2:pm2:startandpm2:saverefactored to usecd()/run()DSLdeploy:shared: leading slashes are now stripped fromshared_dirsandshared_filesentries to prevent double slashes in paths
Released at 2026-04-08
0.0.2
deploy:healthcheckis now automatically removed from the pipeline when no host defines ahealthcheckUrl- Added
detectPackageManager— thecata initandcata statuscommands now auto-detect the package manager from lock files - Internal refactoring: task runner and store split into dedicated classes
- Added unit tests
Released at 2026-04-05
0.0.1
Initial release.
- SSH deployment pipeline with
deploy:lock,deploy:release,deploy:update_code,deploy:shared,deploy:publish,deploy:log_revision,deploy:healthcheck,deploy:unlock,deploy:cleanup - Built-in recipes:
git,rsync,adonisjs,pm2 - Commands:
deploy,deploy:setup,rollback,status,task,ssh,list:pipeline,list:tasks,list:releases,init,version before(),after(),remove(),setPipeline()for pipeline customisationset()/get()store for recipe configurationpm(),pmInstall(),pmInstallProd()package manager helpersonSetup()andonStatus()lifecycle hooks- Automatic rollback on deployment failure
- Multi-server support with host selection prompt
--hostand--branchCLI flags
Released at 2026-04-03