A lightweight and flexible library for building command-line interfaces (CLIs) in Go. This library provides a simple and intuitive way to define commands, flags (including short names), aliases and more.
- Simple Command Definition: Easily define commands and subcommands with names, usage descriptions, and detailed descriptions.
- Flag Handling: Supports string, integer, and boolean flags with default values and the ability to allow arguments.
- Short Flag Names: Implements short names for flags (e.g.,
-nfor--name). - Root Flags: Allows defining flags at the root level that are accessible to all subcommands.
- Environment Variable Integration: Provides convenient functions to retrieve values from environment variables with default fallbacks.
- Built-in Help Generation: Automatically generates help messages for the root command and subcommands.
- Customizable Logging: Includes a basic logging system with different levels (info, warning, error, success).
- Command Aliases: Supports creating aliases for commands and subcommands.
- Shell Completion: Generates shell completion scripts for Bash, Zsh, and Fish.
go get github.com/mirkobrombin/go-cli-builderpackage main
import (
"fmt"
"os"
"github.com/mirkobrombin/go-cli-builder/v1/root"
"my-cli/commands"
)
func main() {
rootCmd := root.NewRootCommand("mycli", "mycli [command]", "A simple CLI example", "1.0.0")
rootCmd.AddBoolFlag("verbose", "v", "Enable verbose output", false, false)
rootCmd.AddCommand(commands.NewAddCommand())
rootCmd.AddCommand(commands.NewRemoveCommand())
rootCmd.AddCommand(commands.NewListCommand())
if err := rootCmd.Execute(); err != nil {
fmt.Fprintf(os.Stderr, "Error: %v\n", err)
os.Exit(1)
}
}Note, the verbose flag was registered at the root level, so it can be accessed
by all subcommands via the rootFlags parameter in the Run function, e.g.:
func runSubcommand(cmd *command.Command, rootFlags *command.RootFlags, args []string) error {
if rootFlags.GetBool("verbose") {
cmd.Logger.Info("Verbose output enabled")
}
// ...
return nil
}For more detailed information, please refer to the documentation files in the docs/ directory.
- Command Management
- Flag Handling
- Environment Variables
- Logging
- Root Command
- Aliases
- Shell Completion
This project is licensed under the MIT License. See the LICENSE file for details.