{"id":50847882,"url":"https://github.com/jwmoss/restctl-template","last_synced_at":"2026-06-14T11:04:18.653Z","repository":{"id":361280041,"uuid":"1253852650","full_name":"jwmoss/restctl-template","owner":"jwmoss","description":"Cookiecutter template for Go REST API CLI tools","archived":false,"fork":false,"pushed_at":"2026-05-29T22:48:57.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-30T00:09:37.131Z","etag":null,"topics":["cli","cobra","cookiecutter","go","goreleaser","homebrew","rest-api","template"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/jwmoss.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":"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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-29T22:03:26.000Z","updated_at":"2026-05-29T22:49:02.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jwmoss/restctl-template","commit_stats":null,"previous_names":["jwmoss/restctl-template"],"tags_count":null,"template":true,"template_full_name":null,"purl":"pkg:github/jwmoss/restctl-template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwmoss%2Frestctl-template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwmoss%2Frestctl-template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwmoss%2Frestctl-template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwmoss%2Frestctl-template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jwmoss","download_url":"https://codeload.github.com/jwmoss/restctl-template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jwmoss%2Frestctl-template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34318528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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","cobra","cookiecutter","go","goreleaser","homebrew","rest-api","template"],"created_at":"2026-06-14T11:04:14.568Z","updated_at":"2026-06-14T11:04:18.649Z","avatar_url":"https://github.com/jwmoss.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# restctl-template\n\nCookiecutter template for Go CLI tools that wrap REST APIs.\n\n`restctl-template` is a starter kit for quickly spinning up repeatable,\nscriptable, release-ready command-line clients for REST APIs. It provides a\nready-to-customize repository skeleton with command structure, client plumbing,\nconfiguration, tests, automation, and publishing defaults already wired in.\n\nThe generated project includes:\n\n- Cobra command structure with `config`, `doctor`, `raw`, example resource,\n  `completion`, `version`, and root `--version` support.\n- A small internal REST client with auth headers, request timeouts, JSON helpers,\n  dry-run blocking for mutating calls, API error wrapping, and optional HTTP\n  tracing.\n- Config loading from flags, environment variables, and a YAML config file.\n- Human, JSON, and plain output helpers.\n- Go tests for the client, config loader, output formatter, and CLI command\n  wiring.\n- GitHub Actions CI, Dependabot, issue templates, pull request template,\n  CODEOWNERS, AGENTS.md, SECURITY.md, CHANGELOG.md, and MIT license scaffolding.\n- GoReleaser v2 release config with Homebrew tap publishing support.\n\n## Usage\n\nInstall `uv` if needed:\n\n```bash\nbrew install uv\n```\n\nGenerate a project:\n\n```bash\nuvx cookiecutter gh:jwmoss/restctl-template\n```\n\nFor local development against this checkout:\n\n```bash\nuvx cookiecutter --no-input -o /tmp .\ncd /tmp/acme-api-cli\nmake check\n```\n\n## Template Inputs\n\nThe most important prompts are:\n\n| Prompt | Purpose |\n| --- | --- |\n| `project_name` | Human-readable tool name |\n| `project_slug` | Repository directory and default GitHub repo name |\n| `binary_name` | CLI executable name |\n| `module_path` | Go module path |\n| `api_name` | API/service name used in docs and help |\n| `api_base_url` | Default API base URL |\n| `env_prefix` | Environment variable prefix |\n| `resource_name_plural` | Example generated resource command |\n| `homebrew_package_type` | `cask`, `formula`, or `none` |\n| `homebrew_tap_repo` | Tap repository, default `homebrew-tap` |\n\n## Generated Layout\n\n```text\n{{cookiecutter.project_slug}}/\n  cmd/{{cookiecutter.binary_name}}/main.go\n  internal/api/\n  internal/cli/\n  internal/config/\n  internal/output/\n  .github/workflows/\n  .goreleaser.yaml\n  Makefile\n  README.md\n```\n\n## Development\n\nRun the template self-test:\n\n```bash\nmake test\n```\n\nRender only:\n\n```bash\nmake render\n```\n\n## Homebrew\n\nGenerated projects are ready to publish to `jwmoss/homebrew-tap` by default.\nCreate the tap repo once, add a `HOMEBREW_TAP_TOKEN` secret to generated\nprojects, then push semver tags such as `v0.1.0`.\n\nSee [docs/homebrew.md](docs/homebrew.md) for the generated release contract.\nSee [docs/ecosystem.md](docs/ecosystem.md) for the longer-term ecosystem shape.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwmoss%2Frestctl-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjwmoss%2Frestctl-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjwmoss%2Frestctl-template/lists"}