{"id":50114971,"url":"https://github.com/bahamut45/pyclif","last_synced_at":"2026-05-23T14:01:34.664Z","repository":{"id":352231349,"uuid":"1214370415","full_name":"bahamut45/pyclif","owner":"bahamut45","description":"Structured Python CLI framework with rich output, auto-configuration, and built-in project scaffolding.","archived":false,"fork":false,"pushed_at":"2026-05-20T11:50:51.000Z","size":2293,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-20T16:01:08.629Z","etag":null,"topics":["cli","click","framework","python","rich"],"latest_commit_sha":null,"homepage":"https://bahamut45.github.io/pyclif/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bahamut45.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"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-04-18T13:36:28.000Z","updated_at":"2026-05-20T11:50:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bahamut45/pyclif","commit_stats":null,"previous_names":["bahamut45/pyclif"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bahamut45/pyclif","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahamut45%2Fpyclif","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahamut45%2Fpyclif/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahamut45%2Fpyclif/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahamut45%2Fpyclif/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bahamut45","download_url":"https://codeload.github.com/bahamut45/pyclif/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bahamut45%2Fpyclif/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33398391,"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":["cli","click","framework","python","rich"],"created_at":"2026-05-23T14:01:33.954Z","updated_at":"2026-05-23T14:01:34.659Z","avatar_url":"https://github.com/bahamut45.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/bahamut45/pyclif/main/docs/assets/logo.png\" alt=\"pyclif logo\" width=\"200\"\u003e\n\u003c/p\u003e\n\n# pyclif\n\n![version](https://img.shields.io/badge/version-0.1.7-green)\n[![codecov](https://codecov.io/gh/bahamut45/pyclif/graph/badge.svg)](https://codecov.io/gh/bahamut45/pyclif)\n\n**PYthon Command Line Interface Framework** — a decorator-driven CLI framework built on\n[click-extra](https://github.com/kdeldycke/click-extra) and [rich-click](https://github.com/ewels/rich-click).\n\npyclif provides four decorators (`@app_group`, `@group`, `@command`, `@option`) that give\nyour CLI applications automatic configuration management, environment variable binding,\nRich-enhanced logging, global option propagation, and standardized output formatting —\nwith zero boilerplate.\n\n## Installation\n\n\u003e **Note:** PyPI release is pending ([pypi/support#10302](https://github.com/pypi/support/issues/10302)). In the meantime, install directly from GitHub:\n\n```bash\n# pip\npip install git+https://github.com/bahamut45/pyclif.git\n\n# uv\nuv add git+https://github.com/bahamut45/pyclif.git\n\n# poetry\npoetry add git+https://github.com/bahamut45/pyclif.git\n```\n\nRequires Python 3.10+.\n\n## Development\n\nRequires [Task](https://taskfile.dev/#/installation).\n\n```bash\ntask install       # install dev + docs dependencies\npre-commit install # activate git hooks (ruff check + format on every commit)\n```\n\n```bash\ntask check         # lint + test\ntask test          # run test suite\ntask tox           # run tests across Python 3.10–3.13\n```\n\n```bash\ntask release:patch # bump patch version, commit, tag and push\ntask release:minor\ntask release:major\n```\n\nRun `task --list` to see all available tasks.\n\n## Quick Start\n\n```python\n\"\"\"CLI application using pyclif.\"\"\"\nfrom pyclif import app_group, command, option, Response\n\n\n@app_group(handle_response=True)\ndef main():\n    \"\"\"My CLI application.\"\"\"\n    pass\n\n\n@main.command()\n@option(\"--name\", \"-n\", default=\"World\", help=\"Your name\")\ndef hello(name: str) -\u003e Response:\n    \"\"\"Say hello.\"\"\"\n    return Response(success=True, message=f\"Hello {name}!\")\n\n\nif __name__ == \"__main__\":\n    main()\n```\n\n```bash\n$ python app.py --help\n Usage: app.py [OPTIONS] COMMAND [ARGS]...\n\n My CLI application.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│     --version                                    Show the version and exit.  │\n│     --log-file       FILE                        Path to the log file (with  │\n│                                                  daily automatic rotation).  │\n│                                                  [env var: MYAPP_LOG_FILE]   │\n│ -v  --verbosity      LEVEL                       Either TRACE, DEBUG, INFO,  │\n│                                                  WARNING, ERROR, CRITICAL.   │\n│                                                  [env var: MYAPP_VERBOSITY]  │\n│                                                  [default: WARNING]          │\n│ -C  --config         CONFIG_PATH                 Configuration file          │\n│                                                  location. Supports glob     │\n│                                                  patterns and remote URLs.   │\n│                                                  [env var: MYAPP_CONFIG]     │\n│                                                  [default:                   │\n│                                                  /etc/myapp/*.{toml,yaml,    │\n│                                                  yml,json,ini,xml},          │\n│                                                  ~/.config/myapp/*.{toml,    │\n│                                                  yaml,yml,json,ini,xml}]     │\n│ -o  --output-format  [json|yaml|table|rich|raw]  Specify the output format   │\n│                                                  for the command. [env var:  │\n│                                                  MYAPP_OUTPUT_FORMAT]        │\n│                                                  [default: table]            │\n│ -h  --help                                       Show this message and exit. │\n╰──────────────────────────────────────────────────────────────────────────────╯\n╭─ Commands ───────────────────────────────────────────────────────────────────╮\n│ hello                       Say hello.                                       │\n╰──────────────────────────────────────────────────────────────────────────────╯\n\n$ python app.py hello --name Alice\nHello Alice!\n\n$ python app.py hello --help\n Usage: app.py hello [OPTIONS]\n\n Say hello.\n\n╭─ Options ────────────────────────────────────────────────────────────────────╮\n│ -n  --name           TEXT                        Your name [env var:         │\n│                                                  MYAPP_HELLO_NAME] [default: │\n│                                                  World]                      │\n│ -v  --verbosity      LEVEL                       Either TRACE, DEBUG, INFO,  │\n│                                                  WARNING, ERROR, CRITICAL.   │\n│                                                  [env var:                   │\n│                                                  MYAPP_HELLO_VERBOSITY]      │\n│                                                  [default: WARNING]          │\n│ -o  --output-format  [json|yaml|table|rich|raw]  Specify the output format   │\n│                                                  for the command. [env var:  │\n│                                                  MYAPP_HELLO_OUTPUT_FORMAT]  │\n│                                                  [default: table]            │\n│ -h  --help                                       Show this message and exit. │\n╰──────────────────────────────────────────────────────────────────────────────╯\n```\n\n## Features\n\n- **Decorator-driven** — four decorators cover the full CLI surface\n- **Autoconfiguration** — TOML/YAML/JSON config files with Linux path conventions (`/etc/\u003capp\u003e/`, `~/.config/\u003capp\u003e/`)\n- **Environment variables** — automatic prefix-based binding for every option\n- **Rich logging** — colored output, custom `TRACE` level, secret masking, rotating log files\n- **Standardized output** — `Response` dataclass with JSON/YAML/Table/Rich/Raw formatters via `--output-format`\n- **Global options** — options marked `is_global=True` propagate automatically to all subcommands\n- **Project scaffolding** — `pyclif project init` generates a ready-to-use project structure\n\n## Documentation\n\nFull documentation at **[bahamut45.github.io/pyclif](https://bahamut45.github.io/pyclif/)**.\n\n## License\n\nMIT — see [LICENSE](LICENSE).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahamut45%2Fpyclif","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbahamut45%2Fpyclif","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbahamut45%2Fpyclif/lists"}