Project Name | Stars | Downloads | Repos Using This | Packages Using This | Most Recent Commit | Total Releases | Latest Release | Open Issues | License | Language |
---|---|---|---|---|---|---|---|---|---|---|
Clap | 12,033 | 7,669 | 12,824 | a day ago | 368 | July 21, 2023 | 262 | apache-2.0 | Rust | |
A full featured, fast Command Line Argument Parser for Rust | ||||||||||
Picocli | 4,426 | 209 | 250 | 2 days ago | 83 | June 03, 2023 | 124 | apache-2.0 | Java | |
Picocli is a modern framework for building powerful, user-friendly, GraalVM-enabled command line apps with ease. It supports colors, autocompletion, subcommands, and more. In 1 source file so apps can include as source & avoid adding a dependency. Written in Java, usable from Groovy, Kotlin, Scala, etc. | ||||||||||
Caporal.js | 3,370 | 669 | 504 | a month ago | 17 | May 11, 2020 | 23 | mit | TypeScript | |
A full-featured framework for building command line applications (cli) with node.js | ||||||||||
Clikt | 2,192 | 29 | 28 | 4 days ago | 16 | June 20, 2020 | 19 | apache-2.0 | Kotlin | |
Multiplatform command line interface parsing for Kotlin | ||||||||||
Commandlineconfig | 2,014 | 4 months ago | 20 | September 29, 2022 | 1 | mit | Python | |||
A library for users to write (experiment in research) configurations in Python Dict or JSON format, read and write parameter value via dot . in code, while can read parameters from the command line to modify values. 一个供用户以Python Dict或JSON格式编写(科研中实验)配置的库,在代码中用点.读写属性,同时可以从命令行中读取参数配置并修改参数值。 | ||||||||||
Argh | 1,125 | 4 months ago | 16 | bsd-3-clause | C++ | |||||
Argh! A minimalist argument handler. | ||||||||||
Clipp | 996 | 7 months ago | 46 | mit | C++ | |||||
easy to use, powerful & expressive command line argument parsing for modern C++ / single header / usage & doc generation | ||||||||||
Mow.cli | 787 | 102 | 177 | 2 years ago | 11 | July 25, 2021 | 28 | mit | Go | |
A versatile library for building CLI applications in Go | ||||||||||
Deno Cliffy | 781 | 7 days ago | 28 | mit | TypeScript | |||||
Command line framework for deno 🦕 Including Commandline-Interfaces, Prompts, CLI-Table, Arguments Parser and more... | ||||||||||
Argparse | 578 | a month ago | 18 | mit | C | |||||
Command-line arguments parsing library. |
A collection of CLI argument types for the flag
package.
import "github.com/sgreben/flagvar"
Or just copy & paste what you need. It's public domain.
package main
import (
"flag"
"fmt"
"github.com/sgreben/flagvar"
)
var (
fruit = flagvar.Enum{Choices: []string{"apple", "banana"}}
urls flagvar.URLs
settings flagvar.Assignments
)
func main() {
flag.Var(&fruit, "fruit", fmt.Sprintf("set a fruit (%s)", fruit.Help()))
flag.Var(&urls, "url", "add a URL")
flag.Var(&settings, "set", fmt.Sprintf("specify a setting (%s)", settings.Help()))
flag.Parse()
}
$ go run main.go -set abc=xyz -url https://github.com
# no error
$ go run main.go -set abc=xyz -url ://github.com
invalid value "://github.com" for flag -url: parse ://github.com: missing protocol scheme
$ go run main.go -fruit kiwi
invalid value "kiwi" for flag -fruit: "kiwi" must be one of [apple banana]
$ go run main.go -h
Usage:
-fruit value
set a fruit (one of [apple banana])
-set value
specify a setting (a key/value pair KEY=VALUE)
-url value
add a URL
Strings
, Assignments
) can be specified repeatedly, the values are collected in a slice..Value
for singular types and in .Values
for plural types.Text
for singular types and in .Texts
for plural typesEnumSet
, StringSet
) de-duplicate provided values.IntsCSV
, EnumsCSV
) accept comma-separated values and accumulate values across flag instances if their .Accumulate
field is set to true
.interface{ Help() string }
, which produces a string suitable for inclusion in a help message.Here's a compact overview:
flagvar type |
example CLI arg | type of resulting Go value |
---|---|---|
Alternative | ||
Assignment | KEY=VALUE | struct{Key,Value} |
Assignments | KEY=VALUE | []struct{Key,Value} |
AssignmentsMap | KEY=VALUE | map[string]string |
CIDR | 127.0.0.1/24 | struct{IPNet,IP} |
CIDRs | 127.0.0.1/24 | []struct{IPNet,IP} |
CIDRsCSV | 127.0.0.1/16,10.1.2.3/8 | []struct{IPNet,IP} |
Enum | apple | string |
Enums | apple | []string |
EnumsCSV | apple,banana | []string |
EnumSet | apple | []string |
EnumSetCSV | apple,banana | []string |
File | ./README.md | string |
Files | ./README.md | []string |
Floats | 1.234 | []float64 |
FloatsCSV | 1.234,5.0 | []float64 |
Glob | src/**.js | glob.Glob |
Globs | src/**.js | []glob.Glob |
Ints | 1002 | []int64 |
IntsCSV | 123,1002 | []int64 |
IP | 127.0.0.1 | net.IP |
IPs | 127.0.0.1 | []net.IP |
IPsCSV | 127.0.0.1,10.1.2.3 | []net.IP |
JSON | '{"a":1}' | interface{} |
JSONs | '{"a":1}' | []interface{} |
Regexp | [a-z]+ | *regexp.Regexp |
Regexps | [a-z]+ | []*regexp.Regexp |
Strings | "xyxy" | []string |
StringSet | "xyxy" | []string |
StringSetCSV | y,x,y | []string |
TCPAddr | 127.0.0.1:10 | net.TCPAddr |
TCPAddrs | 127.0.0.1:10 | []net.TCPAddr |
TCPAddrsCSV | 127.0.0.1:10,:123 | []net.TCPAddr |
Template | "{{.Size}}" | *template.Template |
Templates | "{{.Size}}" | []*template.Template |
TemplateFile | "/path/to/template.file" | string |
Time | "10:30 AM" | time.Time |
Times | "10:30 AM" | []time.Time |
TimeFormat | "RFC3339" | string |
UDPAddr | 127.0.0.1:10 | net.UDPAddr |
UDPAddrs | 127.0.0.1:10 | []net.UDPAddr |
UDPAddrsCSV | 127.0.0.1:10,:123 | []net.UDPAddr |
UnixAddr | /example.sock | net.UnixAddr |
UnixAddrs | /example.sock | []net.UnixAddr |
UnixAddrsCSV | /example.sock,/other.sock | []net.UnixAddr |
URL | https://github.com | *url.URL |
URLs | https://github.com | []*url.URL |
Wrap | ||
WrapCSV | ||
WrapFunc | ||
WrapPointer |