{"id":21708588,"url":"https://github.com/lucas-labs/coco","last_synced_at":"2026-03-16T02:35:51.821Z","repository":{"id":260388713,"uuid":"862407755","full_name":"lucas-labs/coco","owner":"lucas-labs","description":"🥥 coco » interactive cli for creating conventional commits.","archived":false,"fork":false,"pushed_at":"2024-10-31T02:37:02.000Z","size":759,"stargazers_count":3,"open_issues_count":6,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T11:02:25.135Z","etag":null,"topics":["cli","collaborate","commit-message","conventional-commits","developer-tools","git-tool"],"latest_commit_sha":null,"homepage":"","language":"Rust","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/lucas-labs.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":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-09-24T14:47:57.000Z","updated_at":"2024-12-30T22:30:30.000Z","dependencies_parsed_at":"2024-10-31T03:35:36.592Z","dependency_job_id":null,"html_url":"https://github.com/lucas-labs/coco","commit_stats":null,"previous_names":["lucas-labs/coco"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas-labs%2Fcoco","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas-labs%2Fcoco/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas-labs%2Fcoco/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas-labs%2Fcoco/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucas-labs","download_url":"https://codeload.github.com/lucas-labs/coco/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248151733,"owners_count":21056162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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","collaborate","commit-message","conventional-commits","developer-tools","git-tool"],"created_at":"2024-11-25T22:28:53.424Z","updated_at":"2025-10-28T21:12:51.276Z","avatar_url":"https://github.com/lucas-labs.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/lucas-labs/coco/refs/heads/master/.github/media/coco.svg\" height=\"40\"\u003e\u003c/p\u003e\r\n\r\n\u003cp align=\"center\"\u003e\r\n\u003cstrong\u003e\r\n🔎 \u003ccode\u003ecoco\u003c/code\u003e is an interactive \u003ci\u003ecommand line interface\u003c/i\u003e for creating \u003ca href=\"https://www.conventionalcommits.org/\"\u003econventional commits.\u003c/a\u003e\r\n\u003c/strong\u003e\r\n\u003c/p\u003e\r\n\r\n\u003cbr/\u003e\r\n\r\n\u003cp align=\"center\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/lucas-labs/coco/refs/heads/master/.github/media/coco-demo.gif\" width=\"100%\"\u003e\u003c/p\u003e\r\n\r\n   # `coco` › [![LICENSE_BADGE][LICENSE_BADGE]][LICENSE_LINK] [![CRATE_BADGE][CRATE_BADGE]][CRATE_LINK] [![ISSUES_BADGE][ISSUES_BADGE]][ISSUES_LINK]\r\n\r\nThis is a port to Rust ⚡ of the original (and slower)\r\n[lucas-labs/coco-js](https://github.com/lucas-labs/coco-js), that was implemented using `node.js`.\r\n\r\nThis implementation, being written in Rust, is faster, more efficient and has implemented several\r\nimprovements over the original implementation.\r\n\r\n## Installation\r\n\r\n### From binary (github releases)\r\n\r\nYou can download the latest binary for your platform from the\r\n[releases page](https://github.com/lucas-labs/coco/releases).\r\n\r\nThen drop the binary in your `PATH` and you're good to go.\r\n\r\n### From source (crates.io)\r\n\r\nYou can also install `coco` from source using `cargo`:\r\n\r\n```bash\r\n$ cargo install rs-coco\r\n```\r\n\r\n### Using `binstall`\r\n\r\nIf you have `binstall` installed, you can install `coco` with:\r\n\r\n```bash\r\n$ cargo binstall rs-coco\r\n```\r\n\r\n## Usage\r\n\r\nDrop the `coco` binary somewhere in your `PATH`:\r\n\r\n```bash\r\n$ coco --version\r\nrs-coco vx.y.z\r\n```\r\n\r\nThen you can use `coco` to create conventional commits by running it in your repository:\r\n\r\n```bash\r\n$ coco\r\n\r\n# and follow the steps 😊\r\n```\r\n\r\n## Configuration\r\n\r\n`coco` can be configured by creating a `coco.yaml`, `coco.yml` or `.cocorc` file in your project's\r\nroot (per repository config) or in your users home directory (global config). The file should be a\r\nvalid YAML.\r\n\r\nSee the [`coco.yml`](https://github.com/lucas-labs/coco/blob/master/coco.yml) file from this\r\nrepository for an example configuration.\r\n\r\n\u003e [!NOTE]\r\n\u003e Config is totally optional. If no config is provided, `coco` will use default values.\r\n\r\n### Options\r\n#### `types`\r\nAn array of commit types. Each type should be an object with the following properties: \r\n * `name` - The name of the type\r\n * `desc` - The description of the type\r\n * `emoji` - The emoji to be used for the type if `useEmoji` is set to `true`\r\n\r\n```yaml\r\ntypes:\r\n  - name: feat\r\n    desc: A new feature\r\n    emoji: 🎉\r\n  - name: fix\r\n    desc: A bug fix\r\n    emoji: 🐛\r\n```\r\n\r\n#### `scopes`\r\nAn array of commit scopes. \r\n\r\n```yaml\r\nscopes:\r\n  - api\r\n  - ui\r\n```\r\n\r\nIf provided, instead of asking you to type the scope, `coco` will prompt you to select one from the\r\nlist.\r\n\r\n#### `useEmoji`\r\nWhether to use emojis in the summary. If set to `true`, the `emoji` property of the type will be\r\nused to create the commit message. \r\n\r\n```yaml \r\nuseEmoji: true\r\n```\r\nProvided `useEmoji` is `true`, an example of a commit message would be:\r\n`feat(api): ✨ add new endpoint`\r\n\r\n#### `askScope`\r\nWhether to ask for the scope of the commit. IF set to `true`, the user will be prompted to enter or\r\nselect a scope (depending if scope list was provided by user config or not). If set to `false`, the\r\nscope will be omitted from the commit message and the cli won't ask for it.\r\n\r\n```yaml\r\naskScope: true\r\n```\r\n\r\n#### `askBody`\r\nWhether to ask for the body of the commit. If set to `true`, the user will be prompted to enter the\r\nbody of the commit. If set to `false`, the body will be omitted from the commit message and the cli\r\nwon't ask for it.\r\n\r\n```yaml\r\naskBody: true\r\n```\r\n\r\n#### `askFooter`\r\nWhether to ask for the footer of the commit. If set to `true`, the user will be prompted to enter\r\nthe footer of the commit. If set to `false`, the footer will be omitted from the commit message and\r\nthe cli won't ask for it.\r\n\r\n```yaml\r\naskFooter: true\r\n```\r\n\r\n#### `askBreakingChange`\r\nWhether to ask for the breaking change of the commit. If set to `true`, the user will be prompted to\r\nspecify if the commit is a breaking change. If set to `false`, the breaking change information will\r\nbe omitted from the commit message and the cli won't ask for it.\r\n\r\n```yaml\r\naskBreakingChange: true\r\n```\r\n\r\n#### `maxSummaryLength`\r\nDefines the maximum length of the commit summary (the \"title\" of the commit). The summary textarea\r\nwill be limited to this length. \r\n\r\nThe default value is `72`.\r\n\r\n```yaml\r\nmaxSummaryLength: 72\r\n```\r\n\r\n#### `theme`\r\n\r\nYou can also customize the colors of the CLI by providing a `theme` object.\r\nCheck the [`coco.yml`](https://github.com/lucas-labs/coco/blob/master/coco.yml) file to a full list\r\nof the available theme configuration tokens with their default values.\r\n\r\n```yaml\r\ntheme:\r\n  logo:fg:1: blue\r\n  logo:fg:2: light-magenta\r\n  ...\r\n```\r\n\r\n### Example\r\n```yaml\r\n# override the default commit types\r\ntypes:\r\n  - name: feat\r\n    desc: A new feature\r\n    emoji: 🎉\r\n  - name: fix\r\n    desc: A bug fix\r\n    emoji: 🐛\r\n\r\n# set of scopes to choose from\r\nscopes:\r\n   - api\r\n   - ui\r\n\r\nuseEmoji: true # default\r\naskScope: true # default\r\naskBody: true # default\r\naskFooter: true # default\r\naskBreakingChange: true # default\r\n```\r\n\r\n\r\n\u003c!-- Links --\u003e\r\n  [LICENSE_LINK]:    https://github.com/lucas-labs/coco/blob/master/LICENSE\r\n  [LICENSE_BADGE]:   https://img.shields.io/github/license/lucas-labs/coco?color=005af0\u0026style=flat-square\r\n  \r\n  [ISSUES_LINK]:     https://github.com/lucas-labs/coco/issues\r\n  [ISSUES_BADGE]:    https://img.shields.io/github/issues-raw/lucas-labs/coco?color=1ed760\u0026style=flat-square\r\n\r\n  [CRATE_LINK]:      https://crates.io/crates/rs-coco\r\n  [CRATE_BADGE]:     https://img.shields.io/crates/v/rs-coco?style=flat-square\u0026label=%20crate\u0026color=%23fecc6a","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucas-labs%2Fcoco","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucas-labs%2Fcoco","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucas-labs%2Fcoco/lists"}