Loaders for cmdr/v2
June 22, 2025 ยท View on GitHub
Local configuration file loaders for various file formats, such as YAML, TOML, HCL, and much more.
This is an addon library especially for cmdr/v2.
The typical app is cmdr-test/examples/large.

A tiny app using cmdr/v2 and cmdr-loaders is:
package main
import (
"context"
"os"
loaders "github.com/hedzr/cmdr-loaders"
"github.com/hedzr/cmdr/v2"
"github.com/hedzr/cmdr/v2/cli"
"github.com/hedzr/cmdr/v2/examples/common"
"github.com/hedzr/cmdr/v2/examples/blueprint/cmd"
"github.com/hedzr/cmdr/v2/examples/devmode"
"github.com/hedzr/cmdr/v2/pkg/logz"
)
const (
appName = "blueprint"
desc = `a good blueprint for you.`
version = cmdr.Version
author = `The Examples Authors`
)
func main() {
ctx := context.Background()
app := prepareApp(cmd.Commands...) // define your own commands implementations with cmd/*.go
if err := app.Run(ctx); err != nil {
logz.ErrorContext(ctx, "Application Error:", "err", err) // stacktrace if in debug mode/build
os.Exit(app.SuggestRetCode())
} else if rc := app.SuggestRetCode(); rc != 0 {
os.Exit(rc)
}
}
func prepareApp(commands ...cli.CmdAdder) cli.App {
return loaders.Create(
appName, version, author, desc,
append([]cli.Opt{
cmdr.WithAutoEnvBindings(true), // default it's false
cmdr.WithSortInHelpScreen(true), // default it's false
// cmdr.WithDontGroupInHelpScreen(false), // default it's false
// cmdr.WithForceDefaultAction(false),
})...,
).
// importing devmode package and run its init():
With(func(app cli.App) { logz.Debug("in dev mode?", "mode", devmode.InDevelopmentMode()) }).
WithBuilders(
common.AddHeadLikeFlagWithoutCmd, // add a `--line` option, feel free to remove it.
common.AddToggleGroupFlags, //
common.AddTypedFlags, //
common.AddKilobytesFlag, //
common.AddValidArgsFlag, //
).
WithAdders(commands...).
Build()
}
and cmd/... at:
See also:
History
See full list in CHANGELOG
License
Apache 2.0