base library for oclif CLIs
Last release 8 days ago
19 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
478 releases · first in 2020
Release timeline
478 releases since 2020Releases
- 3.10.46 Nov 2023
Release notes2 sources agree
Open source → - 3.10.36 Nov 2023
Release notes2 sources agree
Open source → - 3.10.26 Nov 2023
Release notes2 sources agree
Open source → - 3.10.13 Nov 2023
- 3.10.02 Nov 2023
- 3.9.230 Oct 2023
Release notes2 sources agree
Open source → - 3.9.127 Oct 2023
- 3.9.026 Oct 2023
- 3.8.025 Oct 2023
- 3.7.124 Oct 2023
Release notes
Open source →3.3.3-dev.0 (2023-10-18)
Bug Fixes
- clear commands belogning to legacy plugins before reloading (6a53997)
- 3.7.024 Oct 2023
- 3.6.023 Oct 2023
Release notes
Open source → - 3.5.019 Oct 2023
Release notes
Open source → - 3.4.1-dev.019 Oct 2023pre-release
- 3.4.019 Oct 2023
- 3.3.319 Oct 2023
- 3.3.3-dev.018 Oct 2023pre-release
Release notes
Open source →Bug Fixes
- clear commands belogning to legacy plugins before reloading (6a53997)
- 3.3.217 Oct 2023
Release notes2 sources agree
Open source →Bug Fixes
- deps: bump @babel/traverse from 7.23.0 to 7.23.2 (d53498a)
- 3.3.116 Oct 2023
Release notes
Open source →Additional notes
Open source → - 3.3.016 Oct 2023
Nothing published for this version
- 3.2.113 Oct 2023
Additional notes
Open source →Bug Fixes
3.2.0 (2023-10-13)
Bug Fixes
- add Cache class for caching root plugin (9452b19)
- bump ejs and other deps (14a0e48)
- ignore .d.mts and .d.cts (4ba853f)
- support baseUrl for ts source (03b824b)
Features
- support .mts and .cts file extensions (5f16e0b)
Performance Improvements
- promise.all flag and arg caching (c592ce0)
3.1.0 (2023-10-13)
Features
- 3.2.013 Oct 2023
Release notes
Open source →Bug Fixes
- add Cache class for caching root plugin (9452b19)
- bump ejs and other deps (14a0e48)
- ignore .d.mts and .d.cts (4ba853f)
- support baseUrl for ts source (03b824b)
Features
- support .mts and .cts file extensions (5f16e0b)
Performance Improvements
- promise.all flag and arg caching (c592ce0)
- 3.1.013 Oct 2023
Release notes
Open source → - 3.0.912 Oct 2023
- 3.0.812 Oct 2023
Release notes2 sources agree
Open source → - 3.0.712 Oct 2023
Release notes2 sources agree
Open source → - 3.0.611 Oct 2023
- 3.0.511 Oct 2023
Release notes
Open source → - 3.0.5-dev.010 Oct 2023pre-release
Release notes2 sources agree
Open source →Bug Fixes
- avoid fs.access for checking for file existence (c4277a9)
- 3.0.49 Oct 2023
- 3.0.35 Oct 2023
- 3.0.25 Oct 2023
Release notes2 sources agree
Open source → - 3.0.15 Oct 2023
- 3.0.04 Oct 2023
Release notes
Open source →BREAKING CHANGES ❗
Dropping node 14 and node 16 support
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.
Bin Scripts for ESM/CJS Interoperability
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
Dropped
ts-nodeas a dependencyWe removed
ts-nodeas a dependency to reduce the package size. By doing this, it means that linked plugin must havets-nodeas adevDependencyin order for auto-transpilation to work.Config.pluginsConfig.pluginsis now aMapwhere the keys are the plugin names and the values are the loadedPlugininstances. Previously it was an array of loadedPlugininstances.By using a
Mapwe can now do more efficient lookups during command execution.Config.getPluginsListwas added in case you still would like a flat array ofPlugininstances.Readonly properties on
ConfigVarious properties on
Configare nowreadonlynameversionchannelpjsonrootarchbincacheDirconfigDirdataDirdirnameerrLoghomeplatformshelluserAgentwindowsdebugnpmRegistryuserPJSONpluginsbinPathbinAliasesnsisCustomizationvalidflexibleTaxonomycommands
Private methods on
PluginThe
_manifestandwarnmethods onPluginare nowprivateglobal['cli-ux']->global.uxThe global
cli-uxobject has been renamed touxto be consistent with the module's namehandleThe exported
handlefunction for handling errors in bin scripts is now asynchronousnoCacheDefaultflag property replacesisWritingManifestVersion 2 allowed you to optionally return non-sensitive input if the
defaultordefaultHelpflag/arg properties were called during manifest creation. This is helpful if you don't want sensitive data to be put into theoclif.manifest.jsonand then released to npm. To do this you had to handle theisWritingManifestparameter passed in to thedefaultanddefaultHelpcallbacks.export const mySensitiveFlag = Flags.string({ default: async (context, isWritingManifest) => { if (isWritingManifest) { return undefined } return 'sensitive info' }, })Version 3 removes the
isWritingManifestparameter 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' }, })Removed Unnecessary Exports
The following exports have been removed:
toCachedtsPath
Features 🎉
Performance Improvements
- Cache command permutations for flexible taxonomy in the
oclif.manifest.json - Cache additional command properties (
isESM,relativePath) in theoclif.manifest.json - Improved accuracy in the
DEBUG=perfoutput. - Remove
ts-nodefromdependenciesto reduce the package size.
charAliases Flag Property
You can now define single character flag aliases using the
charAliasesproperty.Flags.option
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, })(), } }Set spinner styles
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() - 3.0.0-beta.253 Oct 2023pre-release
- 3.0.0-beta.243 Oct 2023pre-release
- 3.0.0-beta.232 Oct 2023pre-release
- 3.0.0-beta.222 Oct 2023pre-release
- 3.0.0-beta.212 Oct 2023pre-release
- 3.0.0-beta.202 Oct 2023pre-release
Release notes
Open source → - 3.0.0-beta.1929 Sept 2023pre-release
- 3.0.0-beta.1828 Sept 2023pre-release
- 3.0.0-beta.1725 Sept 2023pre-release
- 3.0.0-beta.1622 Sept 2023pre-release
- 3.0.0-beta.1522 Sept 2023pre-release
- 3.0.0-beta.1422 Sept 2023pre-release
- 3.0.0-beta.136 Sept 2023pre-release
- 3.0.0-beta.121 Sept 2023pre-release
Release notes
Open source →Bug Fixes
- update imports in Config (96ca180)
3.0.0-beta.11 (2023-09-01)
Bug Fixes
- revert styledJSON change (cec0ef2)
3.0.0-beta.10 (2023-09-01)
Features
3.0.0-beta.9 (2023-08-31)
Bug Fixes
- revert ux changes (84c9718)
3.0.0-beta.8 (2023-08-31)
Features
- remove ux and interfaces export (979cf86)
3.0.0-beta.7 (2023-08-31)
Bug Fixes
- interface exports (e798bcd)
3.0.0-beta.6 (2023-08-31)
Bug Fixes
- export CustomOptions (dcb264b)
3.0.0-beta.5 (2023-08-31)
Bug Fixes
- add main to package.json (6254f9c)
3.0.0-beta.4 (2023-08-31)
3.0.0-beta.3 (2023-08-31)
3.0.0-beta.2 (2023-08-31)
Features
3.0.0-beta.1 (2023-08-21)
- 3.0.0-beta.111 Sept 2023pre-release
- 3.0.0-beta.101 Sept 2023pre-release
- 3.0.0-beta.931 Aug 2023pre-release
- 3.0.0-beta.831 Aug 2023pre-release
- 3.0.0-beta.731 Aug 2023pre-release
- 3.0.0-beta.631 Aug 2023pre-release
- 3.0.0-beta.531 Aug 2023pre-release
- 3.0.0-beta.431 Aug 2023pre-release
Nothing published for this version
- 3.0.0-beta.331 Aug 2023pre-release
- 3.0.0-beta.231 Aug 2023pre-release
- 3.0.0-beta.121 Aug 2023pre-release
Nothing published for this version
- 2.16.08 Apr 2024
Nothing published for this version