{"id":13565498,"url":"https://github.com/alecglassford/commit-msg-must-use-emoji","last_synced_at":"2026-05-17T09:45:38.491Z","repository":{"id":57204190,"uuid":"102414778","full_name":"alecglassford/commit-msg-must-use-emoji","owner":"alecglassford","description":"💌 Easy-to-add Git hook that forces you to start every commit message with an emoji","archived":false,"fork":false,"pushed_at":"2018-03-05T21:51:57.000Z","size":28,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-13T12:53:29.276Z","etag":null,"topics":["emoji","find-what-joy-you-can-in-this-world","fun","git","git-hook","husky"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/alecglassford.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-05T00:35:37.000Z","updated_at":"2018-04-09T14:46:09.000Z","dependencies_parsed_at":"2022-09-18T00:21:25.522Z","dependency_job_id":null,"html_url":"https://github.com/alecglassford/commit-msg-must-use-emoji","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/alecglassford/commit-msg-must-use-emoji","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecglassford%2Fcommit-msg-must-use-emoji","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecglassford%2Fcommit-msg-must-use-emoji/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecglassford%2Fcommit-msg-must-use-emoji/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecglassford%2Fcommit-msg-must-use-emoji/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alecglassford","download_url":"https://codeload.github.com/alecglassford/commit-msg-must-use-emoji/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alecglassford%2Fcommit-msg-must-use-emoji/sbom","scorecard":{"id":178613,"data":{"date":"2025-08-11","repo":{"name":"github.com/alecglassford/commit-msg-must-use-emoji","commit":"e8bfb4f6a28b2592425b3af9fc7cd21175d9dcab"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":0,"reason":"Found 0/20 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T18:21:14.894Z","repository_id":57204190,"created_at":"2025-08-16T18:21:14.894Z","updated_at":"2025-08-16T18:21:14.894Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017236,"owners_count":26086015,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"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":["emoji","find-what-joy-you-can-in-this-world","fun","git","git-hook","husky"],"created_at":"2024-08-01T13:01:48.483Z","updated_at":"2025-10-14T05:40:15.728Z","avatar_url":"https://github.com/alecglassford.png","language":"JavaScript","funding_links":[],"categories":["JavaScript"],"sub_categories":[],"readme":"# commit-msg-must-use-emoji\n💌 Easy-to-add Git hook that forces you to start every commit message with an emoji\n\n## What is this?\n\nOnce you install this, whenever you try to commit and your message doesn't start with an emoji, your commit will fail and you'll be prompted to amend it. You can bypass it by adding `--no-verify` to `git commit`.\n\n## Why is this?\n\n[Lots of people](https://www.npmjs.com/search?q=emoji+commit) seem interested in using emoji in Git commit messages, for [various](https://gitmoji.carloscuesta.me/) [reasons](https://github.com/atom/atom/blob/master/CONTRIBUTING.md#git-commit-messages). You can do this in some consistent way to communicate stuff, or you can just do it to add fun to the world (or both).\n\nEmoji bring a lot of light to my life. Do I really want them in *every* commit message? I don't know; let's find out.\n\nNo other tool did exactly what I wanted here, so I thought I'd play around in the wild mire of zero width joiners and fulfill them myself:\n* ✨ Emoji are unicode (no shortcodes!)\n* 🏄🏽‍♀️ Set it and forget it (Git hooks are simple. `package.json` scripts are simple.)\n\n## Installation\n\n* [If your project has a package.json](#if-your-project-has-a-packagejson)\n  * [If you already have a `commitmsg` Node script](#if-you-already-have-a-commitmsg-node-script)\n* [If your project doesn't have a package.json (but Node is installed on your machine)](#if-your-project-doesnt-have-a-packagejson-but-node-is-installed-on-your-machine)\n\n### If your project has a package.json\n\nThe chillest way to install this tool is to use [Husky](https://github.com/typicode/husky). 🐶\n\nRun `npm install -D husky \u0026\u0026 npm install -D commit-msg-must-use-emoji`.\n\n(`yarn add -D husky \u0026\u0026 yarn add -D commit-msg-must-use-emoji` probably works too.)\n\nThen add a `commitmsg` script so your `package.json` looks like:\n\n```\n{\n  \"...\n  \"scripts\": {\n    ...\n    \"commitmsg\": \"commit-msg-must-use-emoji\",\n    ...\n  },\n  ...\n}\n```\n\n🎉\n\n(Note that this configuration format is for Husky ^0.14.3; version 0.15.x requires [a different format, which is easy to migrate to](https://github.com/typicode/husky#upgrading-from-014). Using 0.15.x may give a peer dependency error, since it's still in prerelease, but you can probably do it.)\n\n#### If you already have a `commitmsg` Node script\n\nYou can require this package and test a commit message string or a commit message filename (Husky stores it in `process.env.GIT_PARAMS` while a general Git hook node script will provide it as `process.argv[2]`):\n\n```\nconst startsWithEmoji = require('commit-msg-must-use-emoji');\n\n// e.g.\nconst messageString = 'Update code';\nconst messageFilename = '/Users/me/project/.git/COMMIT_EDITMSG';\n\nif (!startsWithEmoji.testString(messageString)) {\n  console.error('😡')\n}\n\n// or\nif (!startsWithEmoji.testFile(messageFilename) {\n  console.error('😿');\n}\n```\n\n🎉\n\n### If your project doesn't have a package.json (but Node is installed on your machine)\n\nYou can install this package globally (`npm install -g commit-msg-must-use-emoji` or `yarn global add commit-msg-must-use-emoji`) and then, as long as you're on a Unix machine and don't already have a `commit-msg` Git hook, `cd` to your repository and try\n\n```\necho '#!/usr/bin/env sh\ncommit-msg-must-use-emoji $1' \u003e ./.git/hooks/commit-msg \u0026\u0026 \\\nchmod +x ./.git/hooks/commit-msg\n```\n\n🎉\n\nIf you want to add this to an existing `commit-msg` shell script, adding `commit-msg-must-use-emoji $1` somewhere in there will probably work. If you're on Windows, I'm not sure.\n\n## 👫 Contributing\n\n[Feel free.](https://www.newyorker.com/magazine/2014/11/17/feel-free-2) [Issues](https://github.com/alecglassford/commit-msg-must-use-emoji/issues) and [pull requests](https://github.com/alecglassford/commit-msg-must-use-emoji/pulls) are open.\n\n## 🌻 Thx\n\nThanks to [all](https://medium.com/@tessr/making-money-530d2bb2b8f7) [the](https://www.nytimes.com/2016/11/09/arts/secrets-of-the-emoji-world-now-with-its-own-convention-emojicon.html) [emoji](http://99percentinvisible.org/episode/person-lotus-position/) [lovers](https://xkcd.com/1870/), but interacting with the work of [@notwaldorf](https://github.com/notwaldorf/), emojineer extraordinaire, has probably done the most to get me excited about emoji recently.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falecglassford%2Fcommit-msg-must-use-emoji","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falecglassford%2Fcommit-msg-must-use-emoji","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falecglassford%2Fcommit-msg-must-use-emoji/lists"}