{"id":50107133,"url":"https://github.com/memran/go-consolekit","last_synced_at":"2026-05-23T11:11:47.910Z","repository":{"id":357090656,"uuid":"1235194552","full_name":"memran/go-consolekit","owner":"memran","description":"A Go framework for building beautiful console applications with minimal boilerplate. It has command registry, Cobra adapter, fluent DX API, and renderer abstraction for CLI and TUI.","archived":false,"fork":false,"pushed_at":"2026-05-11T08:29:29.000Z","size":98,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-11T10:36:50.950Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/memran.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"docs/security.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-11T05:16:14.000Z","updated_at":"2026-05-11T08:29:33.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/memran/go-consolekit","commit_stats":null,"previous_names":["memran/go-consolekit"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/memran/go-consolekit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memran%2Fgo-consolekit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memran%2Fgo-consolekit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memran%2Fgo-consolekit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memran%2Fgo-consolekit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/memran","download_url":"https://codeload.github.com/memran/go-consolekit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/memran%2Fgo-consolekit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33392939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-23T11:11:43.175Z","updated_at":"2026-05-23T11:11:47.904Z","avatar_url":"https://github.com/memran.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ConsoleKit\n\nA Go framework for building beautiful console applications with minimal boilerplate. Symfony Console-style command registry, Cobra adapter, fluent DX API, and renderer abstraction.\n\n## Installation\n\n```bash\ngo get github.com/memran/go-consolekit\n```\n\n## Quick Start\n\n```go\npackage main\n\nimport (\n    \"go-consolekit/console\"\n)\n\nfunc main() {\n    app := console.New(\"myapp\").\n        Version(\"1.0.0\").\n        Description(\"My console application\")\n\n    app.Command(\"hello\").\n        Description(\"Say hello\").\n        Argument(\"name\").\n            Required().\n            Description(\"Who to greet\").\n        Handle(func(ctx *console.Context) error {\n            ctx.Success(\"Hello, \" + ctx.Arg(\"name\") + \"!\")\n            return nil\n        })\n\n    app.Run()\n}\n```\n\n## Class-Based Commands\n\n```go\ntype InstallCommand struct{}\n\nfunc (c *InstallCommand) Name() string           { return \"install\" }\nfunc (c *InstallCommand) Description() string    { return \"Install a new project\" }\n\nfunc (c *InstallCommand) Configure(config *console.CommandConfig) {\n    config.Argument(\"name\").Required().Description(\"Project name\")\n    config.Option(\"db\").Shortcut(\"d\").Default(\"sqlite\").Description(\"Database driver\")\n}\n\nfunc (c *InstallCommand) Handle(ctx *console.Context) error {\n    ctx.Title(\"Installer\")\n    ctx.Success(\"Project: \" + ctx.Arg(\"name\"))\n    ctx.Info(\"Database: \" + ctx.Option(\"db\"))\n    return nil\n}\n\nfunc main() {\n    app := console.New(\"app\")\n    app.Register(\u0026InstallCommand{})\n    app.Run()\n}\n```\n\n## Fluent Command Builder\n\n```go\napp.Command(\"greet\").\n    Description(\"Greet someone\").\n    Argument(\"name\").\n        Required().\n        Description(\"Name to greet\").\n    Option(\"lang\").\n        Shortcut(\"l\").\n        Default(\"en\").\n        Description(\"Language\").\n    Handle(func(ctx *console.Context) error {\n        ctx.Success(\"Hello, \" + ctx.Arg(\"name\"))\n        return nil\n    })\n```\n\n## Interactive Input\n\n```go\nname := ctx.Input().\n    Ask(\"Project name\").\n    Required().\n    Default(\"my-app\").\n    Run()\n\nok := ctx.Input().\n    Confirm(\"Continue?\").\n    Default(true).\n    Run()\n\ndb := ctx.Input().\n    Select(\"Database\").\n    Options(\"SQLite\", \"PostgreSQL\", \"MySQL\").\n    Default(\"SQLite\").\n    Run()\n\npassword := ctx.Input().\n    Secret(\"Password\").\n    Required().\n    Run()\n```\n\n## Styled Output\n\n```go\nctx.Output().Line(\"Text\")\nctx.Output().Info(\"Info message\")\nctx.Output().Success(\"Success message\")\nctx.Output().Warning(\"Warning message\")\nctx.Output().Error(\"Error message\")\nctx.Output().Title(\"Section Title\")\n\nctx.Output().\n    Text(\"Deployment complete\").\n    Green().\n    Bold().\n    Prefix(\"OK\").\n    Print()\n```\n\n## Progress Bar\n\n```go\nctx.Output().\n    Progress(\"Installing\", 100).\n    Run(func(p *console.Progress) {\n        for i := 0; i \u003c 100; i++ {\n            p.Advance()\n        }\n    })\n```\n\n## Table Rendering\n\n```go\nctx.Output().\n    Table().\n    Headers(\"Name\", \"Role\").\n    Row(\"Emran\", \"Admin\").\n    Row(\"Marwa\", \"User\").\n    Render()\n```\n\n## Running Examples\n\n```bash\ngo run ./cmd/example hello Emran\ngo run ./cmd/example install blog --db postgres\ngo run ./cmd/example make model User --table users\ngo run ./cmd/example table demo\ngo run ./cmd/example progress demo\ngo run ./cmd/example input demo\n```\n\n## TUI Renderer\n\nSwitch from CLI to a full-screen TUI by setting a renderer:\n\n```go\napp := console.New(\"myapp\").\n    Renderer(console.NewTUIRenderer()).\n    Version(\"1.0.0\")\n\napp.Command(\"demo\").\n    Handle(func(ctx *console.Context) error {\n        ctx.Title(\"Dashboard\")\n        ctx.Success(\"All systems go\")\n        ctx.Warning(\"Disk space low\")\n        ctx.Info(\"5 jobs running\")\n        ctx.Error(\"1 failed job\")\n        return nil\n    })\n\napp.Run()\n```\n\nThe TUI renderer (Bubble Tea) launches on first output call, uses the alternate\nscreen buffer, and stays open after the command finishes. Navigate with\n`↑`/`↓`/`j`/`k`, jump with `g`/`G`, quit with `q` or `Ctrl+C`.\n\n```go\n// Run the existing TUI demo:\ngo run ./cmd/example tui demo Emran\n```\n\n## Running Examples\n\n```bash\ngo run ./cmd/example hello Emran\ngo run ./cmd/example install blog --db postgres\ngo run ./cmd/example make model User --table users\ngo run ./cmd/example tui demo Emran\ngo run ./cmd/example table demo\ngo run ./cmd/example progress demo\ngo run ./cmd/example input demo\n```\n\n## Architecture\n\n```\nconsolekit/\n├── cmd/example/           # Example commands (13 files)\n├── console/               # Library (52 files, all package console)\n│   ├── app.go             # App entry point, Cobra adapter\n│   ├── command.go         # Command interface, CommandBuilder\n│   ├── registry.go        # Command registry\n│   ├── config.go          # CommandConfig, ArgumentConfig, OptionConfig\n│   ├── context.go         # Execution context\n│   ├── input.go           # Fluent input API (Ask, Confirm, Select, Secret)\n│   ├── output.go          # Output rendering, text builder\n│   ├── renderer.go        # Renderer interface, CLIRenderer, TUIRenderer\n│   ├── tui_model.go       # Bubble Tea TUI model\n│   ├── progress.go        # Progress bar\n│   ├── spinner.go         # Spinner\n│   ├── table.go           # Table builder\n│   ├── errors.go          # Error types\n│   └── *_{test,other}.go  # Tests, utilities, subsystems\n├── docs/                  # Package documentation (20 files)\n├── go.mod\n└── README.md\n```\n\n## Roadmap\n\n- [x] CLI renderer\n- [x] Bubble Tea-based TUI renderer\n- [ ] Command autocompletion\n- [ ] Event system\n- [ ] Plugin support\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemran%2Fgo-consolekit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmemran%2Fgo-consolekit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmemran%2Fgo-consolekit/lists"}