Skip to content

The Swiss Army Knife of Go CLIs. Drop a folder, gain a profile. One binary to rule your workflows.

License

Notifications You must be signed in to change notification settings

ikaitla/framework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ikaitla Engine – Multi-Profile CLI System

Ikaitla Engine - Multi-Profile CLI System

Get Ikaitla

mkdir -p my-cli-project && cd my-cli-project
# ...WIP

Perspective

  1. One binary with infinite profiles.
  2. Add a profile by creating a folder in cmd/<profile-name>/ with commands.
  3. We build once and get all the profiles automatically.

Core Principles

  1. No boilerplate: The filesystem structure IS the configuration
  2. Auto-discovery: Commands and profiles discovered at generation time
  3. Single build: One go build command generates everything
  4. Profile isolation: Each profile is independent and self-contained
  5. No manual registration: No init(), no explicit wiring, no central declarations

Design Philosophy

  1. Convention over configuration: Structure implies behavior
  2. Fail fast: Invalid profiles fail at generation, not runtime
  3. Developer ergonomics: Minimal cognitive load, maximum clarity
  4. Production ready: Type-safe, testable, maintainable

Architecture

.
├── 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

Commands

# 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/

Adding a New Profile

  1. Create cmd/newprofile/metadata.go
  2. Add command files with NewXxxCmd() functions
  3. Run go build
  4. Done. Binary newprofile is ready.

Future Extensions

  • 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

About

The Swiss Army Knife of Go CLIs. Drop a folder, gain a profile. One binary to rule your workflows.

Resources

License

Stars

Watchers

Forks

Packages

No packages published