Programming language: Go
Tags: Command Line     Standard CLI    
Latest version: v1.7.21

cmdr alternatives and similar packages

Based on the "Standard CLI" category

Do you think we are missing an alternative of cmdr or a related project?

Add another 'Standard CLI' Package



Build Status Go GitHub tag (latest SemVer) GoDoc FOSSA Status go.dev Go Report Card codecov Coverage Status Mentioned in Awesome Go <!-- https://gowalker.org/github.com/hedzr/cmdr -->

cmdr is a POSIX/GNU style, command-line UI (CLI) Go library. 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.

There are couples of enhancements beyond the standard library flag.

There is a full Options Store (configurations) for your hierarchy configuration data too.

ee99d078e2f7 <!-- built by https://ezgif.com/ -->

To review the image frames, go surfing at https://github.com/hedzr/cmdr/issues/1#issuecomment-567779978

Table of Contents

<!-- Created by gh-md-toc -->

Youtube - 李宗盛2013最新單曲 山丘 官方完整版音檔 / Jonathan Lee - Hill CHT + ENU


The better choice is importing with go-modules enabled:

import "github.com/hedzr/cmdr"

See our extras:


  • docs (WIP):

  • v1.7.31 (WIP)

    • A new feature: the builtin pluggable cmdr-addon/plugin.
  • v1.7.21

  • v1.7.11

    • update: new log.Logger instance in log.GetLogger
    • fixed: ReadPassword in windows
  • v1.7.10

    • fixed: too much empty lines in help screen
  • v1.7.9

    • right align multi-lines desc string in help screen
    • added new envvars: HELP, NO_COLOR (HELP=1 app some sub cmd == app some sub cmd --help)
  • v1.7.8

    • tabStop in help screen will be autosize now
    • deprecated at next minor release (v1.8+): WithHelpTabStop()
    • deprecated at next minor release (v1.8+): plugins/daemon
    • BREAK: some two methods in the interface Painter has been changed.
  • v1.7.7

    • update deps to improve logging supports
    • deprecated: WithLogex(), as its replacement, WithLogx() has a better generic logging interface (hedzr/log.Logger)
  • v1.7.6:

    • using hedzr/log and remove other logging dependencies.
    • added WithLogx(logger): integrating with your logger (via log.Logger interface)
  • v1.7.5:

    • move some helper function to tool sub-package
  • v1.7.3

    • update dependencies to new logger packages
  • v1.7.2

    • update dependencies to new logger packages
  • v1.7.1

    • update dependencies to new logger packages
  • v1.7.0

    • adds AddGlobalPreAction(pre), AddGlobalPostAction(post)
    • using logex v1.2.0 and new logging switching framework
    • added more logging output in trace mode enabled see also: GetTraceMode(), GetDebugMode(), InDebugging(), and logex.GetTraceMode().
    • more...
  • v1.6.51

    • deprecated: daemon plugin
    • implements the required flag logic
  • v1.6.50

    • fixed: correct the error printing while wrong args got
    • fixed: valid-args - ensure the found flag as a value matched
    • fixed: withIgnoredMessage - format with liveArgs
    • cmd.NewFlagV was deprecated since v1.6.50, we recommend the new form: cmdr.NewBool(false).Titles(...)...AttachTo(ownerCmd)
    • better Titles(long, ...) and Name(name)
      Now you can compose the order prefix easily: with .Titles("001.start"), we can recognize the prefix and move it to Name field automatically. > We will remove the deprecated api at next minor version (v1.7)
  • v1.6.49

    • added: Name() for command & flag defining
  • v1.6.48

    • code reviewed
    • maintained
    • unnecessary deps removed.
    • small fixes
  • v1.6.47

    • fixed/improved: reset slice value if an empty slice was been setting
    • improved: add logging output in delve debugging mode
    • fixed: matching the longest short flag for combining flags
    • BROKEN API: the param defaultValue is optional now: cmdr.NewBool(), cmdr.NewInt(), ...
    • added cmdr.NewUintSlice()
  • v1.6.45

    • fixed/improved: ToBool(value, defval...) bool
    • fixed: flag.OnSet trigger for envvar hit
    • fixed/improved: friendly error msg
  • v1.6.43

    • fixed/improved: the matching algorithm and remained args
  • v1.6.41

    • WithPagerEnabled(): enables OS pager for help screen output
  • v1.6.39

    • BROKEN API: the params order exchanged, their new prototypes are OptFlag.Titles(long, short, aliases) and OptCmd.Titles(long, short, alases).
    • improved help screen
    • bug fixed:
    • the value of remained args could be wrong sometimes
    • stop flag split in parsing
    • some coverage test errors
  • v1.6.36

    • ToggleGroup:
    • assume the empty Group field with ToggleGroup
    • set "command-path.toggleGroupName" to the hit flag full name as flipping a toggle-group.
      For example, supposed a toggle-group 'KK' under 'server' command with 3 choices/flags: apple, banana, orange. For the input '--orange', these entries will be set in option store:
      server.orange <== true;
      server.KK <== 'orange';
    • fixed: GetStringSliceXxx() return the value array without expand the envvar.
    • improved: some supports for plan9
    • fixed: can't expand envvar correectly at earlier initializing.
  • For more information to refer to [CHANGELOG](./CHANGELOG)



Old README.md: [README.old.md](./README.old.md)

For Developer

[For Developer](Developer.md)


  1. [short](./examples/short/README.md)
    simple codes with structured data style.

  2. [demo](./examples/demo/README.md)
    normal demo with external config files.

  3. [wget-demo](./examples/wget-demo/README.md)
    partial-covered for GNU wget.

  4. [fluent](./examples/fluent)
    demostrates how to define your command-ui with the fluent api style.

  5. [ffmain](./examples/ffmain)

a demo to show you how to migrate from go flag smoothly.

  1. cmdr-http2
    http2 server with daemon supports, graceful shutdown

  2. awesome-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](./Examples.md) (zh-cn TODO: [Examples.zh-cn.md](./Examples.zh-cn.md))



Feel free to issue me bug reports and fixes. Many thanks to all contributors.

Thanks to JODL

JODL (JetBrains OpenSource Development License) is good:

goland jetbrains



FOSSA Status

*Note that all licence references and agreements mentioned in the cmdr README section above are relevant to that project's source code only.