NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #3845 most downloaded on npm
base library for oclif CLIs
Last release 18 days ago
31 Aug 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
479 releases · first in 2020
One column per quarter.
### Bug Fixes * extra parens in debug logs
deps: bump get-func-name from 2.0.0 to 2.0.2
deps: bump postcss from 8.4.30 to 8.4.31
dont drop ts-node options if there are no extends
### Bug Fixes * check for ENOENT code (44fb9dc) * handle non-existent tsconfig (0b15536) * support jsonc tsconfig (026f835) * use tsconfck to handle j
### Features * read extended tsconfigs
support hasDynamicHelp for v2 commands
### Bug Fixes * restore exit(0) behavior
### Features * export ModuleLoader
### Features * run tsPath on hooks
clear commands belogning to legacy plugins before reloading
### Features * remove ux.makeStubs
safely fail if pnpapi cannot be found
### Bug Fixes * compile error (15d6556) ### Features * don't error on exit code 0
### Bug Fixes * compile error (15d6556) ### Features * better support yarn PnP (c5d87fc) * don't error on exit code 0 (c62fb01) * support pnp plugins
no longer use wrapped process.stdout and process.stderr
allow github-installed plugins to be auto-transpiled
clear commands belogning to legacy plugins before reloading
deps: bump @babel/traverse from 7.23.0 to 7.23.2
add frequency and frequencyUnit to warn-if-update
Nothing published for this version
add types for warn-if-update-available
add Cache class for caching root plugin
add hiddenAliases property to Command
### Bug Fixes * remove tslib
deps: bump semver from 5.7.1 to 5.7.2
use _flags for linked v2 plugins
### Bug Fixes * warn about ts-node and node 20
avoid fs.access for checking for file existence
avoid fs.access for checking for file existence
### Bug Fixes * custom flags with union type
### Bug Fixes * only Command.Loadable in Help
dont run postrun hook for uinstalled plugins
add macos to plugin PJSON interface
The end-of-life date for Node.js 14 was April 30, 2023.
The end-of-life date for Node.js 14 was April 30, 2023.
The end-of-life date for Node.js 16 was September 11, 2023. This date is earlier than previously published. Node.js’s blog explains why they chose this earlier end-of-life date.
In order to support ESM and CommonJS plugin interoperability you will need to update your bin scripts to match these:
You will also need to update any references to the bin scripts to include the .js extension.
If you'd like to migrate your plugin to ESM, please read our guide here
ts-node as a dependencyWe removed ts-node as a dependency to reduce the package size. By doing this, it means that linked plugin must have ts-node as a devDependency in order for auto-transpilation to work.
Config.pluginsConfig.plugins is now a Map where the keys are the plugin names and the values are the loaded Plugin instances. Previously it was an array of loaded Plugin instances.
By using a Map we can now do more efficient lookups during command execution. Config.getPluginsList was added in case you still would like a flat array of Plugin instances.
ConfigVarious properties on Config are now readonly
nameversionchannelpjsonrootarchbincacheDirconfigDirdataDirdirnameerrLoghomeplatformshelluserAgentwindowsdebugnpmRegistryuserPJSONpluginsbinPathbinAliasesnsisCustomizationvalidflexibleTaxonomycommandsPluginThe _manifest and warn methods on Plugin are now private
global['cli-ux'] -> global.uxThe global cli-ux object has been renamed to ux to be consistent with the module's name
handleThe exported handle function for handling errors in bin scripts is now asynchronous
noCacheDefault flag property replaces isWritingManifestVersion 2 allowed you to optionally return non-sensitive input if the default or defaultHelp flag/arg properties were called during manifest creation. This is helpful if you don't want sensitive data to be put into the oclif.manifest.json and then released to npm. To do this you had to handle the isWritingManifest parameter passed in to the default and defaultHelp callbacks.
export const mySensitiveFlag = Flags.string({
default: async (context, isWritingManifest) => {
if (isWritingManifest) {
return undefined
}
return 'sensitive info'
},
})
Version 3 removes the isWritingManifest parameter in favor of a flag and arg property, noCacheDefault. Setting it to true will automatically keep it from being cached in the manifest.
export const mySensitiveFlag = Flags.string({
noCacheDefault: true,
default: async (context) => {
return 'sensitive info'
},
})
The following exports have been removed:
toCachedtsPathoclif.manifest.jsonisESM, relativePath) in the oclif.manifest.jsonDEBUG=perf output.ts-node from dependencies to reduce the package size.You can now define single character flag aliases using the charAliases property.
There's a new flag type that infers the flag's type from the provided options.
In v2 you would have needed to do something like this,
type Options = 'foo' | 'bar'
export default class MyCommand extends Command {
static flags = {
name: Flags.custom<Options>({
options: ['foo', 'bar'],
})(),
}
}
Now in v3 you can do this,
export default class MyCommand extends Command {
static flags = {
name: Flags.option({
options: ['foo', 'bar'] as const,
})(),
}
}
You can now configure the style of the spinner when using ux.action.start. See spinners for all the different options.
ux.action.start('starting spinner', 'spinning', {style: 'arc'})
await ux.wait(2500)
ux.action.status = 'still going'
await ux.wait(2500)
ux.action.stop()
### Bug Fixes * remove OCLIF_NEXT_VERSION
### Bug Fixes * remove OCLIF_NEXT_VERSION
collect perf results from outside oclif
### Bug Fixes * move styledJson to index
### Bug Fixes * force release
move @types/cli-progress to devDeps
### Bug Fixes * update util import
### Bug Fixes * use ES2022
### Features * remove ts-node
### Features * set spinner style
allow undefined from flag parser
final v3 features (#779) (bd2461b), closes #791 #792
skip ts-node register for ESM plugins
remove ux and interfaces export
### Bug Fixes * revert styledJSON change
### Features * revert exports changes
### Bug Fixes * revert ux changes
remove ux and interfaces export
### Bug Fixes * interface exports
### Bug Fixes * export CustomOptions
### Bug Fixes * add main to package.json
Nothing published for this version
forwards compatibility for config reload
### Features * ESM support
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →