go-cli-builder

module
v2.0.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 12, 2026 License: MIT

README

Go CLI Builder (V2)

A lightweight and flexible declarative 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 using struct tags.

⚠️ Migration to V2

Version 2.0 is a complete rewrite. It moves from an imperative approach (calling methods to add flags) to a declarative, code-first approach (using struct tags). V1 code is not compatible with V2. Please refer to the Basic Usage section to see the new pattern.

Features

  • Declarative Command Definition: Define commands and flags using struct tags (cmd, cli, arg, help).
  • Type-Safe Flag Handling: Automatically binds flags to basic types (int, bool, string, time.Duration, []string) and structs.
  • Dependency Injection: Automatically injects Logger and Context into your commands via embedding.
  • Environment Variable Integration: Map environment variables directly to flags using the env:"VAR_NAME" tag.
  • Built-in Help Generation: Automatically generates formatted help messages based on your structs and tags.
  • Customizable Logging: Includes a built-in logger (Info, Success, Warning, Error) available in every command.
  • Lifecycle Hooks: Supports Before() and After() methods for command initialization and cleanup.

Getting Started

Installation
go get github.com/mirkobrombin/go-cli-builder/v2
Basic Usage
package main

import (
	"fmt"
	"os"

	"github.com/mirkobrombin/go-cli-builder/v2/pkg/cli"
)

// Define your root CLI struct
type CLI struct {
	// Global flags
	Verbose bool `cli:"verbose,v" help:"Enable verbose output" env:"VERBOSE"`

	// Subcommands
	Add  AddCmd  `cmd:"add" help:"Add a new item"`
	List ListCmd `cmd:"list" help:"List all items"`

	// Embed Base to get Logger and Context
	cli.Base
}

// Optional: Lifecycle hook
func (c *CLI) Before() error {
	if c.Verbose {
		c.Logger.Info("Verbose mode enabled")
	}
	return nil
}

type AddCmd struct {
	Item string `arg:"" required:"true" help:"Item to add"`
	cli.Base
}

// Run is the entry point for the command
func (c *AddCmd) Run() error {
	c.Logger.Success("Adding item: %s", c.Item)
	return nil
}

type ListCmd struct {
	cli.Base
}

func (c *ListCmd) Run() error {
	c.Logger.Info("Listing items...")
	return nil
}

func main() {
	app := &CLI{}

	// Run the app - the library handles parsing, binding, and execution
	if err := cli.Run(app); err != nil {
		fmt.Fprintf(os.Stderr, "Error: %v\n", err)
		os.Exit(1)
	}
}

Documentation

For more detailed examples, check the examples/v2 directory.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Directories

Path Synopsis
pkg
cli
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL