cmdr alternatives and similar packages
Based on the "Standard CLI" category.
Alternatively, view cmdr alternatives based on common mentions on social networks and blogs.
-
urfave/cli
A simple, fast, and fun package for building command line apps in Go -
elvish
Elvish = Expressive Programming Language + Versatile Interactive Shell -
The Platinum Searcher
A code search tool similar to ack and the_silver_searcher(ag). It supports multi platforms and multi encodings. -
readline
Readline is a pure go(golang) implementation for GNU-Readline kind library -
pflag
Drop-in replacement for Go's flag package, implementing POSIX/GNU-style --flags. -
flaggy
Idiomatic Go input parsing with subcommands, positional values, and flags at any position. No required project or package layout and no external dependencies. -
wmenu
An easy to use menu structure for cli applications that prompts users to make choices. -
commandeer
Automatically sets up command line flags based on struct fields and tags. -
flag
Flag is a simple but powerful command line option parsing library for Go support infinite level subcommand -
wlog
A simple logging interface that supports cross-platform color and concurrency. -
go-getoptions
Fully featured Go (golang) command line option parser with built-in auto-completion support. -
argv
A Go library to split command line string as arguments array using the bash syntax. -
command-chain
A go library for easy configure and run command chains. Such like pipelining in unix shells. -
Go-Console
GoConsole: the golang component that eases the creation of beautiful command line interfaces. -
subcmd
Another approach to parsing and running subcommands. Works alongside the standard flag package.
Deliver Cleaner and Safer Code - Right in Your IDE of Choice!
Do you think we are missing an alternative of cmdr or a related project?
Popular Comparisons
README
cmdr
<!-- https://gowalker.org/github.com/hedzr/cmdr -->
cmdr
is a POSIX-compliant, command-line UI (CLI) library in Golang.
It is a getopt-like parser of command-line options,
be compatible with the getopt_long
command line UI, which is an extension of the syntax recommended by POSIX.
We made many enhancements beyond the standard library flag
.
There is a fully-functional Options Store
(configurations) for your
hierarchical configuration dataset too.
The .netCore version Cmdr.Core is available now. And, a cxx version cmdr-cxx
was pre-released just now (Happy Spring Festival 2021).
<!-- built by https://ezgif.com/ -->
See the image frames at #1.
See our extras:
- cmdr-docs: documentations (Working)
- cmdr-addons: a new daemon plugin
dex
for linux/macOS/windows. - cmdr-examples: collects the samples for cmdr
- cmdr-go-starter: public template repo to new your cli app
and Bonus of #cmdr Series:
News
docs (WIP):
- english documentation NOT completed yet
- documentation at: https://hedzr.github.io/cmdr-docs/
v1.10.27 (WIP)
v1.10.23
- fix: unknown switch char not an error now
- imp: refined gen zsh code, and gen shell codes
- fea: support fish-shell completion generating now
- fea: added root.
RunAsSubCommand
, treat 'app' as a synonym of 'app subcmd1 subcmd2' - imp/fix/fea: clarify the slice append or replace mode - SetNx &
SetNxOverwrite
for Option Store - fea: added
VendorHidden
field for when you wanna a never shown flag or command - fea: conf package - add
Serial
,SerialString
for CI tool - imp: erase man1 folder after
--man
- fix/imp: prints description with color escaped, when multiline
- fix: restore Match() but with new name MatchAndTest()
- fix: high-order fn hold the older copy, so pass it by holding a pointer to original variable
- imp: review most of the tests
- NOTE: cleanup the deprecated codes [
cmd.NewFlagV
,cmd.NewFlag
,cmd.NewSubCommand
, ...] - fea: more completion supports
v1.10.19
- temporary build for earlier testing
- confirmed: backward compatible with go1.12
v1.10.13
- fix/imp: adapt windir to *nix name to fit for generic config file loading
- fea/imp: improved Aliases algor, support more tmpl var substitute
- fix: fallback the unknown type as string type
- fea: add flag to control whether write the changes back to alternative config file or not,
WithAlterConfigAutoWriteBack
- imp: name/desc fields of builtin commands and flags
- CHANGE: use bgo build-tool now, Makefile thrown
v1.10.11
- fix: setNx bug at last commit
- fix: send 1.10.10 failure
v1.10.9
- fix: setNx with slices merging
- fix: aliases might be added to multiple groups
- fea: secondary config file locations
v1.10.8
- fix/fea/imp: make cmdr aliases subsystem better
v1.10.7
- fix: generate shell may be lost buffered contents on writing to file
v1.10.6
- fix: internal commands and flags has wrong group declarations since last refactored.
- fea:
-o file
forgenerate shell
command.
v1.10.5
- fix: logex might crash on a nil skip field
v1.10.3
- last release failed because some deps cannot committed due to weak network
v1.10.1
- move to go1.17 to get a split declaration
- fix: added the forgotten long-desc field
- fix: transfer proper log-level to hedzr/log if in debug/trace mode
- fix/imp: log.ForDir, ForFile
- fix: log.LeftPad
- fea: added InvokeCommand to run a sub-command from somewhere
v1.10.0
- fix: toggle-group key not sync while set via envvar
- imp: speed up by extracting a re compiling code
- imp: upgrade deps with more enh-helpers from hedzr/log
- imp: yaml indent size
- imp: StripOrderPrefix
- imp/fix: sync debug/trace mode back to hedzr/log
- fix: options after tail args (positional args) might be ignored
- fix: ResetOptions not clean up internal hierarchy-list
- fea: added
Checkpoints
on Option Store
you may save and restore multiple checkpoints for cmdr Option Store, so that some temporary changes can be made. - fix/imp:
--man
crashes if manpages not installed - the responding manpage will be generated temporarily and instantly now - add
GitSummary
field into conf package - imp: speed up by reduce get worker
- centralize rxxtOptions to store()
- flatten backtrace(Flg|Cmd)Names, added dottedPathToCommand
- NOTE: the phrase wrapped by backtick(```
) in
Descriptionfield will be extracted as
DefaultValuePlaceholder` field automatically, so beware this feature. - fea:
-vv
(dup-v
more than once) will print the hidden commands & flags in help screen NOW.
To take a sight of runningfluent generate --help --verbose -verbose
. - ...
More details at [CHANGELOG](./CHANGELOG)
Features
[Features.md](old/Features.md)
Old README.md: [README.old.md](old/README.old.md)
For Developer
[For Developer](old/Developer.md)
Import cmdr
With go-modules enabled:
import "github.com/hedzr/cmdr"
About the Docker build
Here is a docker build for cmdr/examples/fluent so that you can run it without go building or downloading the release files:
# from Docker Hub:
$ docker run -it --rm hedzr/cmdr-fluent
$ docker run -it --rm hedzr/cmdr-fluent --help
# from Github Packages (please following the guide of GitHub Packages Site):
$ docker run -it --rm docker.pkg.github.com/hedzr/cmdr/cmdr-fluent
$ docker run -it --rm docker.pkg.github.com/hedzr/cmdr/cmdr-fluent --help
Examples
[short](./examples/short/README.md)
simple codes with structured data style.[demo](./examples/demo/README.md)
normal demo with external config files.[wget-demo](./examples/wget-demo/README.md)
partial-covered for GNUwget
.[fluent](./examples/fluent)
demostrates how to define your command-ui with the fluent api style.[ffdemo](./examples/ffdemo)
a demo to show you how to migrate from go flag
smoothly.
cmdr-http2
http2 server with daemon supports, graceful shutdownawesome-tool
awesome-tool
is a cli app that fetch the repo stars and generate a markdown summary, accordingly with most of awesome-xxx list in github (such as awesome-go).
See Also the examples index: [Examples.md](old/Examples.md) (zh-cn TODO: [Examples.zh-cn.md](old/Examples.zh-cn.md))
Uses
- https://github.com/hedzr/consul-tags
- https://github.com/hedzr/ini-op
- https://github.com/hedzr/awesome-tool
- austr
- Issue me to adding yours
Contrib
Feel free to issue me bug reports and fixes. Many thanks to all contributors.
Thanks to JODL
Thanks to JetBrains for donating product licenses to help develop cmdr
License
MIT
*Note that all licence references and agreements mentioned in the cmdr README section above
are relevant to that project's source code only.