mkdir -p my-cli-project && cd my-cli-project
# ...WIP- One binary with infinite profiles.
- Add a profile by creating a folder in
cmd/<profile-name>/with commands. - We build once and get all the profiles automatically.
- No boilerplate: The filesystem structure IS the configuration
- Auto-discovery: Commands and profiles discovered at generation time
- Single build: One
go buildcommand generates everything - Profile isolation: Each profile is independent and self-contained
- No manual registration: No init(), no explicit wiring, no central declarations
- Convention over configuration: Structure implies behavior
- Fail fast: Invalid profiles fail at generation, not runtime
- Developer ergonomics: Minimal cognitive load, maximum clarity
- Production ready: Type-safe, testable, maintainable
.
├── bin
├── build.sh
├── cmd
│ └── <profile> # Profile discovered by name
│ ├── generated.go # list of commands (generated on build)
│ ├── metadata.go # Profile config (version, brand, settings)
│ └── <command-name>.go # Command: New<OperationName>Cmd()
├── framework
│ ├── autodiscovery.go # Auto-discovery generator
│ ├── framework.go # config (EngineName, EngineVersion, EngineTagline)
│ ├── build-info.go # config (RepoModulePath, ProfilePackageImportPath,
│ │ # CmdProfilesImportBase, ProfileWiringOutputFile,
│ │ # MainRegistryOutputFile)
│ ├── profile
│ │ └── profile-metadata.go
│ └── ui # UI Library
│ ├── colors.go
│ ├── output.go
│ ├── progress.go
│ ├── table.go
│ └── ui_test.go
├── generated_profiles.go # list of profiles (generated on build)
├── go.mod
├── go.sum
├── LICENSE
├── main.go # Entry point: binary name → profile selector
└── Makefile# Development
go generate ./... # Generate all wiring code
go build # Build binary + create symlinks
go test ./... # Run all tests
# Single-command build
go build # Runs generation automatically via build tags
# Installation
make install # Copy to ~/.local/bin/- Create
cmd/newprofile/metadata.go - Add command files with
NewXxxCmd()functions - Run
go build - Done. Binary
newprofileis ready.
- Plugin system for external profiles
- Dynamic command loading
- Profile inheritance and composition
- Built-in update mechanism
- Telemetry and crash reporting
- License: Dual (Numerimondes + EPL-2.0)
- Creator: El Moumen Yassine
