oclif alternatives and similar modules
Based on the "Command-line utilities" category.
Alternatively, view oclif alternatives based on common mentions on social networks and blogs.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of oclif or a related project?
oclif: Node.JS Open CLI Framework
<!-- toc -->
- [🗒 Description](#-description)
- [🚀 Getting Started Tutorial](#-getting-started-tutorial)
- [✨ Features](#-features)
- [📌 Requirements](#-requirements)
- [🌈 CLI Types](#-cli-types)
- [🏗 Usage](#-usage)
- [📚 Examples](#-examples)
- [🔨 Commands](#-commands)
- [🏭 Related Repositories](#-related-repositories)
- [🦔 Learn More](#🦔-learn-more)
- [📣 Feedback](#-feedback) <!-- tocstop -->
This is a framework for building CLIs in Node.js. This framework was built out of the Heroku CLI but generalized to build any custom CLI. It's designed both for single-file CLIs with a few flag options, or for very complex CLIs that have subcommands (like git or heroku).
🚀 Getting Started Tutorial
The Getting Started tutorial is a step-by-step guide to introduce you to oclif. If you have not developed anything in a command line before, this tutorial is a great place to get started.
- Flag/Argument parsing - No CLI framework would be complete without a flag parser. We've built a custom one from years of experimentation that we feel consistently handles user input flexible enough for the user to be able to use the CLI in ways they expect, but without compromising strictness guarantees to the developer.
- Super Speed - The overhead for running an oclif CLI command is almost nothing. It requires very few dependencies (only 35 dependencies in a minimal setup—including all transitive dependencies). Also, only the command to be executed will be required with node. So large CLIs with many commands will load equally as fast as a small one with a single command.
- CLI Generator - Run a single command to scaffold out a fully functional CLI and get started quickly. See [Usage](#-usage) below.
- Testing Helpers - We've put a lot of work into making commands easier to test and mock out stdout/stderr. The generator will automatically create scaffolded tests.
- Auto-documentation - By default you can pass
--helpto the CLI to get help such as flag options and argument information. This information is also automatically placed in the README whenever the npm package of the CLI is published. See the multi-command CLI example
- Plugins - Using plugins, users of the CLI can extend it with new functionality, a CLI can be split into modular components, and functionality can be shared amongst multiple CLIs. See Building your own plugin.
- Hooks - Use lifecycle hooks to run functionality any time a CLI starts, or on custom triggers. Use this whenever custom functionality needs to be shared between various components of the CLI.
ts-nodeto run the plugins enabling you to use TypeScript with minimal-to-no boilerplate needed for any oclif CLI.
- Auto-updating Installers - oclif can package your CLI into different installers that will not require the user to already have node installed on the machine. These can be made auto-updatable by using plugin-update.
- Everything is Customizable - Pretty much anything can be swapped out and replaced inside oclif if needed—including the arg/flag parser.
- Autocomplete - Automatically include autocomplete for your CLI. This includes not only command names and flag names, but flag values as well. For example, it's possible to configure the Heroku CLI to have completions for Heroku app names:
<!--* Coming soon: man pages - In addition to in-CLI help through
-helpand the README markdown help generation, the CLI can also automatically create man pages for all of its commands.-->
$ heroku info --app=<tab><tab> # will complete with all the Heroku apps a user has in their account
🌈 CLI Types
With oclif you can create 2 different CLI types, single and multi.
Single CLIs are like
cat. They can accept arguments and flags. Single CLIs can optionally be a single file.
Multi CLIs are like
heroku. They have subcommands that are themselves single CLIs. In the
package.json there is a field
oclif.commands that points to a directory. This directory contains all the subcommands for the CLI. For example, if you had a CLI called
mycli with the commands
mycli create and
mycli destroy, you would have a project like the following:
package.json src/ └── commands/ ├── create.ts └── destroy.ts
Multi-command CLIs may also include plugins.
Creating a single-command CLI:
$ npx oclif single mynewcli ? npm package name (mynewcli): mynewcli $ cd mynewcli $ ./bin/run hello world from ./src/index.js!
Creating a multi-command CLI:
$ npx oclif multi mynewcli ? npm package name (mynewcli): mynewcli $ cd mynewcli $ ./bin/run --version mynewcli/0.0.0 darwin-x64 node-v9.5.0 $ ./bin/run --help USAGE $ mynewcli [COMMAND] COMMANDS hello help display help for mynewcli $ ./bin/run hello hello world from ./src/hello.js!
<!-- commands -->
oclif generate NAME
oclif help [COMMAND]
oclif manifest [PATH]
oclif generate NAME
generate a new CLI
USAGE $ oclif generate [NAME] ARGUMENTS NAME directory name of new project DESCRIPTION generate a new CLI This will clone the template repo 'oclif/hello-world' and update package properties
See code: src/commands/generate.ts
oclif help [COMMAND]
display help for oclif
USAGE $ oclif help [COMMAND] [--all] ARGUMENTS COMMAND command to show help for FLAGS --all see all commands in CLI DESCRIPTION display help for oclif
See code: @oclif/plugin-help
oclif manifest [PATH]
generates plugin manifest json
USAGE $ oclif manifest [PATH] ARGUMENTS PATH [default: .] path to plugin DESCRIPTION generates plugin manifest json
See code: src/commands/manifest.ts
pack CLI into debian package
USAGE $ oclif pack:deb -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION pack CLI into debian package
See code: src/commands/pack/deb.ts
pack CLI into macOS .pkg
USAGE $ oclif pack:macos -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION pack CLI into macOS .pkg
See code: src/commands/pack/macos.ts
packages oclif CLI into tarballs
USAGE $ oclif pack:tarballs -r <value> [-t <value>] [--xz] FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root -t, --targets=<value> [default: linux-x64,linux-arm,win32-x64,win32-x86,darwin-x64] comma-separated targets to pack (e.g.: linux-arm,win32-x64) --[no-]xz also build xz DESCRIPTION packages oclif CLI into tarballs This can be used to create oclif CLIs that use the system node or that come preloaded with a node binary.
See code: src/commands/pack/tarballs.ts
create windows installer from oclif CLI
USAGE $ oclif pack:win -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION create windows installer from oclif CLI This command requires WINDOWS_SIGNING (prefixed with the name of your executable, e.g. OCLIF_WINDOWS_SIGNING_PASS) to be set in the environment
See code: src/commands/pack/win.ts
promote CLI builds to a S3 release channel
USAGE $ oclif promote -r <value> --version <value> --sha <value> --channel <value> [-t <value>] [-d] [-m] [-w] [-a <value>] [--xz] [--indexes] FLAGS -a, --max-age=<value> [default: 86400] cache control max-age in seconds -d, --deb promote debian artifacts -m, --macos promote macOS pkg -r, --root=<value> (required) [default: .] path to the oclif CLI project root -t, --targets=<value> [default: linux-x64,linux-arm,win32-x64,win32-x86,darwin-x64] comma-separated targets to promote (e.g.: linux-arm,win32-x64) -w, --win promote Windows exe --channel=<value> (required) [default: stable] which channel to promote to --indexes append the promoted urls into the index files --sha=<value> (required) 7-digit short git commit SHA of the CLI to promote --version=<value> (required) semantic version of the CLI to promote --[no-]xz also upload xz DESCRIPTION promote CLI builds to a S3 release channel
See code: src/commands/promote.ts
adds commands to README.md in current directory
USAGE $ oclif readme --dir <value> [--multi] FLAGS --dir=<value> (required) [default: docs] output directory for multi docs --multi create a different markdown page for each topic DESCRIPTION adds commands to README.md in current directory The readme must have any of the following tags inside of it for it to be replaced or else it will do nothing: # Usage <!-- usage --> # Commands <!-- commands --> Customize the code URL prefix by setting oclif.repositoryPrefix in package.json.
See code: src/commands/readme.ts
upload deb package built with pack:deb
USAGE $ oclif upload:deb -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION upload deb package built with pack:deb
See code: src/commands/upload/deb.ts
upload macos installers built with pack:macos
USAGE $ oclif upload:macos -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION upload macos installers built with pack:macos
See code: src/commands/upload/macos.ts
upload an oclif CLI to S3
USAGE $ oclif upload:tarballs -r <value> [-t <value>] [--xz] FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root -t, --targets=<value> [default: linux-x64,linux-arm,win32-x64,win32-x86,darwin-x64] comma-separated targets to upload (e.g.: linux-arm,win32-x64) --[no-]xz also upload xz DESCRIPTION upload an oclif CLI to S3 "aws-sdk" will need to be installed as a devDependency to upload.
See code: src/commands/upload/tarballs.ts
upload windows installers built with pack:win
USAGE $ oclif upload:win -r <value> FLAGS -r, --root=<value> (required) [default: .] path to oclif CLI root DESCRIPTION upload windows installers built with pack:win
See code: src/commands/upload/win.ts <!-- commandsstop -->
🏭 Related Repositories
- @oclif/command - Base command for oclif. This can be used directly without the generator.
- @oclif/config - Most of the core setup for oclif lives here.
- @oclif/errors - Renders and logs errors from commands.
- @oclif/cli-ux - Library for common CLI UI utilities.
- @oclif/test - Test helper for oclif.
🦔 Learn More
If you have any suggestions or want to let us know what you think of oclif, send us a message at [email protected]
*Note that all licence references and agreements mentioned in the oclif README section above are relevant to that project's source code only.