v1.1.0
β’ 27 Jul 2025
specification and documentation of
Commoji
.
π Head to the Revisions or Releases page to browse the other versions.
Commoji
is a compact, expressive tagging system that blends meaning and emoji to make your commit history more readable and beautiful. π·οΈ
Commoji
βs purpose is to transform the way developers communicate intent through commit messages β by blending semantic clarity with visual expressiveness. It's not just a tagging system; itβs a visual grammar for storytelling in code.
Commoji
proposes the following formats when writing commit messages:
-
when the scope is known or not global:
<emoji> <tag>(<scope>): <verb> <object>
-
when the scope is unknown or global:
<emoji> <tag>: <verb> <object>
Use the UTF-8 emoji glyph wherever possible.
If your environment doesnβt render emojis, fall back to the ASCII aliases below.
All the elements except the scope
and the object
should be taken from the tables below. While the object
is free-form, it should ideally be a concise, semantically clear noun phrase. See additional recommendations for the object
below.
Commoji
achieves its goal by defining the following tags, their purpose, emoji and the fallback/alias ASCII sequence:
Emoji | Tag | Purpose | ASCII Alias |
---|---|---|---|
π£ | init | Initial commit / setup | :hatching_chick: |
β¨ | feat | New feature | :sparkles: |
π | fix | Bug fix | :bug: |
π | docs | Documentation updates | :books: |
π | style | Code style or visual tweaks (no logic change) | :lipstick: |
π¨ | refactor | Code refactoring | :hammer: |
β‘ | perf | Performance improvements | :zap: |
β | test | Adding/modifying tests | :white_check_mark: |
π | build | Build system updates | :factory: |
π·π» | ci | CI configuration changes | :construction_worker: |
π | deploy | Deployment | :rocket: |
π§ | chore | Misc tasks and maintenance | :wrench: |
π¬ | experiments | Experimental features | :microscope: |
βͺ | revert | Reverting changes | rewind: |
π | merge | Merge commits | :twisted_rightwards_arrows: |
π¦ | deps | Dependency updates | :package: |
βοΈ | config | Configuration changes | :gear: |
π₯ | cleanup | Remove dead code | :fire: |
π | security | Security patches or enhancements | :closed_lock_with_key: |
π§ | ux | UX improvements beyond styling | :brain: |
βΏ | accessibility | Enhancing accessibility | :wheelchair: |
π | i18n | Internationalization / localization | :globe_with_meridians: |
Commoji
's tagging system
Note
Tags should be written in lowercase.
The scope of a commit narrows its focus to a specific section of your codebase, such as a module, feature, or directory. This enables readers to swiftly determine where the change is applicable without the necessity of reviewing the entire diff.
When selecting a scope, please follow these guidelines:
- choose the name of the pertinent module, component, or feature folder (for example,
auth
,ui
,api
,database
), - write scopes in lowercase and use hyphens for names that consist of multiple words (for instance,
user-profile
,error-handler
) - avoid using excessively broad or generic scopes (like
core
,misc
), as they detract from the purpose of scoping. - if the change impacts the project as a whole or spans multiple areas, it is recommended to omit the scope altogether.
Note
Scopes should be written in lowercase.
Commoji
also proposes the following imperative verbs to be used when writing commit messages:
Verb | Action Purpose |
---|---|
add | Introduce a new element |
update | Modify an existing element |
remove | Eliminate something |
rename | Change a name or label |
move | Reposition without modifying content |
implement | Build out functionality |
fix | Resolve a fault or issue |
refactor | Improve structure without changing behavior |
optimize | Improve performance or efficiency |
test | Add or modify tests |
configure | Adjust system or environment settings |
prepare | Set up for release or deployment |
release | Publish or ship a version |
revert | Undo a previous change |
merge | Combine branches or changes |
experiment | Try out prototype ideas |
clean | Purge unused or obsolete elements |
translate | Add or revise localization |
Commoji
's verbs
Note
Verbs should be written in lowercase. Use the imperative, present tense.
The object in the commit message should be specific enough to convey what changed. Aim for a concise noun phrase that captures intent; use the commit body for details.
Tip
Keep your summary under ~50 characters. If it grows longer, split out details into the body.
Guidelines:
- use a precise noun phrase whenever applicable
β Good: π docs: add ToC to README
β Bad: π docs: update README (too generic)
- donβt list every change in the summary
- summarize the primary intent, e.g., βadd OAuth section,β not βadd OAuth section, fix typo, update link.β
- leverage the commit body for elaboration:
π docs: add ToC to README
- generated Table of Contents for each heading
- updated README links to anchor tags
- fixed minor typos in examples
When a change truly spans multiple concerns, choose a higher-level verb:
π docs: overhaul README
, then explain sub-items in the body.
π¬ Examples
Here are some examples of object
s when writing commit messages that adhere to Commoji
's conventions.
Summary | Valid | Reason |
---|---|---|
π docs: add ToC in README |
β | Specific feature added |
π docs: rename section headings |
β | Clear noun phrase |
π docs: update installation guide |
β | Specific docs subsection |
β¨ feat(ui): add dark mode toggle |
β | Pinpointed feature |
π fix(auth): fix login null pointer |
β | Precise bug identifier |
β‘ perf: optimize startup time |
β | Measurable metric improved |
π docs: update docs |
β | Object too broad |
β¨ feat: add mode |
β | Ambiguous object |
π fix: fix bug |
β | Generic object |
β‘ perf: improve performance |
β | Unspecified metric |
Commoji
's object examples
The following table shows some usage examples that are valid or invalid according to Commoji
βs formatting guidelines.
Commit Message | Valid | Why |
---|---|---|
π docs: update README |
β | All elements follow Commoji format |
β¨ feat(auth): implement login flow |
β | Emoji, tag, verb, scope and object aligned |
π fix: Fix Login Bug |
β | Verb is capitalized β should be lowercase |
π update README |
β | Tag (docs ) is missing |
π deploy: deploy to prod |
β | Verb is not from verb list (deploy β release ) |
π¨ refactor(auth): refactored auth |
β | Verb refactored is not in imperative, present tense |
π fix: remove typo |
β | Uses tag fix , verb remove , valid object |
π₯ cleanup: remove unused imports |
β | Grammatically clear and semantically precise |
β¨ feat(ui): implement dark mode |
β | Grammatically clear and semantically precise |
Commoji
-formatted commit messages
π See the full changelog in: CHANGELOG.md.
Licensed under the MIT license which is available here, MIT license.
Consider buying me a coffee. β
Thank you for supporting my efforts! ππ
@igor.dvlpr/scrollend-polyfill
π΄ A performant and light (< 1.5KB) JavaScript polyfill for the scrollend Event. βΈοΈ
π Zing is a C# style String formatter for JavaScript that empowers Strings with positional arguments - composite formatting. π
@igor.dvlpr/strip-yaml-front-matter
π¦ Strips YAML front matter from a String or a file. πΎ
πͺ A Node.js module for reading the AppPaths registry key on Windows. Useful for retrieving applications that can be launched from the command prompt. π
π¬ Emojifies strings, converting textual representations of emojis to graphical ones. ποΈ
Created by Igor DimitrijeviΔ (@igorskyflyer).