v3.0.0 β’ 19 Mar 2026
specification and documentation of
Commoji.
π Head to the Revisions or Releases page to browse the other versions.
Commoji is a psychology-based emoji commit convention that reduces cognitive load and turns Git history into a visually scannable and instantly queryable log with deterministic prefixes powering commands like git bug, git breaking, and git ui. π·οΈ
One glance reveals what changed. One alias queries the whole history.
- β¨ Features
- π§ The Psychology
- π€ΉπΌ Usage
- ποΈ Examples
- π References
- π Changelog
- πͺͺ License
- π Support
- 𧬠Related
- π¨π»βπ» Author
Commoji blends semantic clarity with visual expressiveness in commit messages to make intent easier to convey. It's not just a tagging system; it's a psychology-based visual grammar for storytelling in code.
- β¨ Visual Expressiveness: Emojis provide instant, colorful cues that make commit histories pop and easier to scan at a glance. Eye-tracking research confirms emojis are detected parafoveally (before direct fixation) and increase skipping rates of nearby text while reducing total reading time.
- π Queryable History: Deterministic prefixes enable instant queries like
git bug,git breaking, andgit ui. - π·οΈ Semantic Orthogonality: Distinct domain prefixes and operational verbs ensure every message clearly conveys purpose without tautological ambiguity.
- π Reduced Cognitive Load: Fixed format lowers mental effort, allowing quick understanding of changes in logs or diffs. Congruent emojis improve processing fluency and message understanding compared with plain text.
- π§ Intuitive Design: Draws on psychological principles like pop-out effect and chunking for a more natural reading experience.
- π§© Structured Decision-Making: Forces explicit choices along orthogonal axes (
domainvsoperation), turning subjective labeling into a low-friction process. - π Tooling Compatibility: Designed to work with parsers, linters, and changelog generators; see the Tooling section for ready-to-use examples.
Commoji originated from real-world attempts to make dense commit logs easier to skim quickly. Its design choices (visual anchors, strict domain:operation separation, predictable structure) align closely with well-documented mechanisms of visual perception and cognitive load reduction. The thinking that originated from earlier patterns used in projects like AdVoid, where emoji prefixes proved highly effective for instantly identifying module-specific changes in dense histories, evolved to a science-based system that Commoji is today.
Here are the key psychological principles that power the system:
-
Visual Indexing & Attentional Capture (Treisman & eye-tracking research)
Emojis act as high-contrast pre-attentive anchors. Their color and shape differences allow rapid detection during skimming β often via parafoveal preview β guiding attention to relevant commits before full text reading begins. Eye-tracking studies confirm congruent emojis are processed parafoveally (like words), are skipped more often than incongruent ones, and reduce total fixation time on the preceding target word (Barach et al., 2021). -
Semantic Orthogonality (Lexical Semantics & Cognitive Science)
Strict nounβverb separation eliminates redundancy. Non-overlapping semantic dimensions reduce classification effort and enable near-instant mental model construction - a principle from structural linguistics applied directly to commit grammar (Lyons, J., 1977). -
Gestalt Grouping & Chunking The emoji + tag creates immediate perceptual unity (proximity + similarity), turning each commit into a reliable, bite-sized chunk.
-
Cognitive Load Reduction & Processing Fluency
Predictable prefix + concise object offloads parsing effort. Once learned, reading feels subjectively effortless and fast (familiarity heuristic). Messages with congruent emojis are rated as more understandable and require less cognitive effort than plain text (Daniel & Camp, 2020; Boutet et al., 2021). -
Dual-layer Signaling
Emoji and matching tag reinforce the same category without overload β increasing clarity in dense, fast-scrolling logs through multimodal (visual + verbal) encoding.
This strict separation turns commit writing into a lightweight, repeatable decision framework rather than an ad-hoc prose exercise. In short, Commoji doesn't just look nicer, it works with the brain instead of against it.
Note that emojis require UTF-8 support in the terminal and Git client to render correctly - this is standard in all modern environments, but worth verifying. Shortcodes (e.g. :sparkles:) are provided in the shortcode reference under the Prefixes table as a human-readable lookup aid and must never appear in commit subjects.
Commoji relies on a strict Noun/Action Separation to eliminate
repetition and enforce semantic orthogonality.
The prefix (emoji + tag) identifies the domain (what area of the codebase), the verb identifies the operation (what was done to it), and the object identifies what specifically was affected.
-
No scope (global change or scope unknown):
<prefix>: <verb> <object> -
With scope (specific module, component, or directory):
<prefix>(<scope>): <verb> <object>
- The entire
<prefix>must be taken exactly from the Prefixes table (e.g.β¨ feature,π bug,π¨ logic, etc.) - No space between the prefix (or the closing parenthesis of a scope) and the colon
: - Exactly one space after the colon
: scopeis always lowercase with hyphens (e.g.user-profile,payment-gateway)verbis always lowercase imperative present tense; selected from the Verbs tableobjectmust be lowercase by default. Capitalization is reserved strictly for Proper Nouns, Brands, or Technical Identifiers to preserve semantic accuracy
Optional
- Reference GitHub issues/PRs with
#123in the object or body (e.g.fix login crash (#234)or in body:Closes #234).
Commit subjects must use the actual UTF-8 emoji as shown in the Prefixes table.
Shortcodes (e.g. :sparkles:, :bug:, :lipstick:) are provided in the shortcode reference table as a human-readable reference only - for looking up or identifying emojis - and must never appear in commit subjects. Using shortcodes in commits silently breaks all git aliases.
The <prefix> must come from the official Prefixes table. The verb follows the rules defined in the Verbs section. This rigid prefix structure is what enables fast visual scanning and future automated tooling.
To indicate a breaking change (API removal, incompatible API change, removed feature, etc.), place an exclamation mark (!) immediately before the colon.
For unscoped commits, the ! attaches directly to the prefix.
For scoped commits, the ! must immediately follow the closing parenthesis.
The ! is optional - use it only when the change truly breaks existing consumers or contracts in that domain.
-
No scope
<prefix>!: <verb> <object> -
With scope
<prefix>(<scope>)!: <verb> <object>
π bug!: update login response formatπ ui!: remove deprecated dark mode toggleπ¨ logic(auth)!: rename internal token keysπ¦ deps(user-profile)!: remove lodash v4
Placing the ! immediately before the colon (after prefix and optional scope) follows established conventions while still keeping the breaking signal in the visual prefix. This ensures instant recognition during scanning and better compatibility with conventional commit parsers.
When a change is breaking, it is strongly recommended to explain the impact in the body using the conventional format:
**BREAKING CHANGE**: legacy OAuth1 tokens are no longer supported.
Migrate to OAuth2 before v2.0.0.Commoji defines a fixed set of prefixes (emoji + tag) that act as Nouns representing the domain or entity being modified. These prefixes are immutable - never invent, swap, or separate the emoji from its tag. Always use the exact UTF-8 emoji as shown; shortcodes are for lookup only and must never appear in commit subjects.
| Prefix | Category | Domain / Purpose |
|---|---|---|
| β¨ feature | Core | New capabilities or features |
| π bug | Core | Faults, defects, or issues |
| π¨ logic | Core | Code architecture and internal structure |
| π₯ debt | Core | Technical debt and dead code |
| π£ repo | Core | Initial setup or repository metadata |
| π ui | UI & Experience | Visual elements, styles, and interface polish |
| π§ ux | UI & Experience | User experience flows, interactions, and behavior |
| π¨ assets | UI & Experience | Static files, images, fonts, and icons |
| π i18n | UI & Experience | Locale resources and internationalization support |
| π¦― a11y | UI & Experience | Accessibility (a11y) requirements |
| π docs | Docs & Quality | Documentation and guides |
| β spec | Docs & Quality | Test coverage, assertions, and validation rules |
| π types | Docs & Quality | Type definitions, interfaces, and schemas |
| πΎ data | Data | Database schemas, seeds, queries, and migrations |
| π¦ deps | Build & Ops | Dependencies and packages |
| π env | Build & Ops | Deployment environments and pipeline infrastructure |
| π· ci | Build & Ops | Continuous integration workflows |
| π build | Build & Ops | Build system or compiler instructions |
| π© config | Build & Ops | System and environment settings |
| π metrics | Performance | Performance, efficiency, and metrics |
| π security | Security | Security vulnerabilities and protective measures |
| π§ chore | Maintenance | Miscellaneous maintenance and chores |
| β history | Maintenance | Git commit history and its state |
| π branch | Maintenance | Branch structure and merge points |
| π¬ experiment | Maintenance | Experimental prototypes |
Commoji's prefix system (Domains)
Reference
| Prefix | Shortcode |
|---|---|
| β¨ feature | :sparkles: |
| π bug | :bug: |
| π¨ logic | :hammer: |
| π₯ debt | :fire: |
| π£ repo | :hatching_chick: |
| π ui | :lipstick: |
| π§ ux | :brain: |
| π¨ assets | :artist_palette: |
| π i18n | :globe_with_meridians: |
| π¦― a11y | :white_cane: |
| π docs | :books: |
| β spec | :white_check_mark: |
| π types | :triangular_ruler: |
| πΎ data | :floppy_disk: |
| π¦ deps | :package: |
| π env | :rocket: |
| π· ci | :construction_worker: |
| π build | :factory: |
| π© config | :nut_and_bolt: |
| π metrics | :bar_chart: |
| π security | :closed_lock_with_key: |
| π§ chore | :wrench: |
| β history | :hourglass: |
| π branch | :twisted_rightwards_arrows: |
| π¬ experiment | :microscope: |
Important
Choose the prefix that matches what changed, not why it was changed.
A cache layer added for performance reasons is still π¨ logic - it changes architecture. Adding a profiling wrapper or tracing span is also π¨ logic - it changes code structure. Use π metrics only when the commit touches measurement tooling, benchmarks, or reporting infrastructure itself.
π¨ assets is for static files (images, fonts, icons, SVGs). Use π ui when changing how the interface looks or behaves - styles, components, layouts. If you're swapping an icon file, that's π¨ assets; if you're restyling the button that uses it, that's π ui.
π§ chore is a catch-all - use it only when no other prefix fits, and aim to keep it below 25β30% of commits.
π₯ debt is for deliberate removal or resolution of known bad code β dead code, deprecated APIs, legacy workarounds. Use π§ chore only for routine maintenance that doesn't fit any other domain (e.g. updating .gitignore, renaming config files). If you're deleting code, it's almost always π₯ debt.
Examples
- β
π bug: fix memory leak in caching layer - β
π₯ debt: remove deprecated v1 API controllers - β
π¨ fix: memory leakβπ¨ fixis not a valid prefix from the table - β
β¨ bug: fix memory leakβ wrong prefix (must use the exact combination shown in the Prefix column)
The scope narrows the commit's focus to a specific module, component, feature, or directory. This lets readers instantly know where the change applies without opening the diff. Unlike some conventions, Commoji scopes must not duplicate or semantically overlap the prefix tag - the prefix already identifies the domain, so the scope should only add location information.
- Use the exact name of the relevant folder, module, or component (e.g.
auth,payment-gateway,user-profile). - Always lowercase with hyphens for multi-word scopes.
- Omit the scope entirely when:
- the change affects the whole project, or
- the scope would be identical or semantically duplicate the tag in the prefix (e.g.
π metrics(performance),π ui(styles)).
- Avoid broad/generic scopes such as
core,misc,utils,mainβ they defeat the purpose of scoping. If no specific scope applies, omit it entirely and keep the correct domain prefix. - When in doubt, omit the scope - a clean
<prefix>: <verb> <object>is always preferred over a vague or redundant(<scope>).
- β
β¨ feature(payment-gateway): add Stripe webhook handler - β
π docs(auth): add table of contents to README - β
π¨ logic: refactor token validation - β
π ui(ui): update button stylesβ scope duplicates tag - β
π metrics(performance): optimize startup timeβ semantic duplication - β
π¨ logic: update utility parsersβ correct domain, scope omitted when too broad - β
π§ chore(utils): update utility parsersβ domain replaced by chore to avoid scoping decision
Verbs represent the operation (the βhowβ) applied to the domain tag.
To ensure consistency and fast scanning, verbs must be selected from the official table below. This enforces semantic orthogonality between domain (tag) and operation.
If a change feels like it falls between two categories, select the verb representing the primary intent and utilize the commit body for technical nuances.
| 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 | Correct something that is not working as expected |
| refactor | Reorganize code without changing its output |
| optimize | Improve throughput or reduce resource usage |
| test | Verify that code works as intended |
| prepare | Set up or stage for an upcoming release |
| release | Publish or ship a version |
| revert | Undo a previous change |
| integrate | Combine separate code streams or systems |
| clean | Purge unused or obsolete elements |
| translate | Convert or adapt content for a target language |
| generate | Create generated / derived files or code |
| bump | Increment or set a specific version number |
| upgrade | Move to a newer major/minor version |
| migrate | Move or adapt code/data to a new format or platform |
| harden | Strengthen code and systems against threats |
| enable | Activate a feature, flag, or capability |
| disable | Deactivate a feature, flag, or capability |
| deprecate | Mark something as obsolete and scheduled for removal |
| split | Divide one module, file, or component into multiple |
Commoji's verbs (Operations)
Examples (fully compliant)
- β
π· ci: add deployment smoke test - β
π docs: add payment flow guide - β
π security: harden API endpoints against XSS - β
π¬ experiment: add Redis caching prototype - β
π branch: integrate feature/auth-rewrite - β
β history: revert accidental merge commit - β
π¬ experiment: experiment with cachingβexperimentis not in the Verbs table - β
π branch: merge mainβmergeis not in the Verbs table - β
π¨ logic(auth): refactored token validationβ wrong tense
Tip
Quick verb cheat-sheet
- New β
add/implement/generate(derived or output files only) - Change β
update/refactor/fix/migrate/enable/disable/deprecate - Split β
split(divide one module, file, or component into multiple) - Delete β
remove/clean
update vs migrate: use update when modifying an existing element in place. Use migrate only when moving or adapting code, data, or configuration to a structurally different format, platform, or system - e.g. migrate user schema to UUID, migrate config to TOML. If no structural change occurs, it's update.
The object is a concise noun phrase that identifies what specifically was affected by the operation.
It completes the sentence started by the prefix + verb while staying short and scannable.
- Use a specific noun phrase (never repeat the tag or verb semantically).
- Keep the entire summary line (prefix through object) under 72 characters whenever possible; aim for β€ 65 characters for best readability in dense logs and small screens.
- The
objectmust be lowercase by default to promote uniform, scannable logs. Capitalize only:- Proper nouns (names, brands: Stripe, React, Vite)
- Acronyms and technical terms that are conventionally capitalized (API, XSS, OAuth2, URL, ToC, JSON, HTML)
- Do not capitalize the first word of the object (avoid sentence-style capitalization) for consistency across the history.
- Never turn the
objectinto a full sentence or list β use the commit body for details. - Avoid words already encoded by the verb -
add new Xis redundant sinceaddimplies new; writeadd Xinstead.
| Summary | Valid | Reason |
|---|---|---|
π docs(api): add table of contents |
β | Specific noun phrase |
π bug: fix null pointer in login |
β | Identifies exact failure point |
π metrics: add startup time benchmark |
β | Adds measurement, squarely in metrics domain |
π docs: update installation guide |
β | Clear subsection |
π docs: update docs |
β | Object too broad / repeats tag |
π¦ deps: bump lodash to 4.17.21 |
β | Version pinned, no overlap |
π¦ deps: upgrade zep from 6.1 to 6.3 |
β | Specific version range, clean domain+operation |
β¨ feature: add mode |
β | Ambiguous object |
π bug: fix bug |
β | Repeats tag |
π metrics: optimize performance |
β | Vague object |
Commoji's object examples
When a change has many small parts, pick the single most important noun phrase for the summary and list the rest in the body:
π docs: add table of contents
- generated ToC for every heading
- updated all internal anchor links
- fixed minor typos in code blocksThe commit body is optional but strongly recommended when the change needs more context, especially for breaking changes, complex refactors, or when referencing issues.
- Leave a blank line after the summary line
- Keep each line under 72 characters
- Use bullet points (
-) for multiple changes or explanations - Common trailers (auto-linked by GitHub and many tools):
Closes #123/Fixes #456Co-authored-by: Name <email>
π ui!: remove deprecated dark mode toggle
**BREAKING CHANGE**: the dark mode toggle has been removed due to accessibility issues.
Users should now rely on their system preference.
- removed legacy toggle component
- updated documentation and settings panel
Closes #234Because Commoji prefixes are fixed, deterministic, and always at the start of the subject line, history can be queried with high precision using simple git log --grep commands - essentially turning the log into a lightweight tagged database.
These queries are highly reliable for single-domain aliases: the emoji + tag combination is unique and non-overlapping, and the ^ anchor ensures subject-line matching for standard prefix queries. The breaking alias searches the full commit message and may produce rare false positives if body text incidentally matches the pattern.
Add the following to the global ~/.gitconfig (or project .git/config):
[alias]
# Single-domain queries
feat = log --grep="^β¨ feature" --oneline --decorate --color --graph
bug = log --grep="^π bug" --oneline --decorate --color --graph
ui = log --grep="^π ui" --oneline --decorate --color --graph
docs = log --grep="^π docs" --oneline --decorate --color --graph
deps = log --grep="^π¦ deps" --oneline --decorate --color --graph
security = log --grep="^π security" --oneline --decorate --color --graph
chore = log --grep="^π§ chore" --oneline --decorate --color --graph
breaking = log --grep="^[^:]+!:" --extended-regexp --oneline --decorate --color --graph # searches full message, not subject only
breaking-this-week = log --grep="^[^:]+!:" --since="1 week ago" --oneline --decorate --color --graph # same caveat
# Scoped variants (more precise, ignores object/body matches)
feat-scoped = log --grep="^β¨ feature(" --oneline --decorate --color --graph
bug-scoped = log --grep="^π bug(" --oneline --decorate --color --graph
# Compound / recent / filtered examples
recent-bugs = log --grep="^π bug" -n 15 --oneline --decorate --color --graph
core-changes = log --grep="^(β¨ feature|π bug|π¨ logic|π₯ debt)" --extended-regexp --oneline --decorate --color --graphWarning
The breaking and breaking-this-week aliases search the full commit message including the body, not just the subject line. If body text incidentally contains !: (e.g. in code samples or prose), rare false positives may appear. All other single-domain aliases are subject-line anchored via ^ and are not affected.
Why these work so well
^anchors to start of line β no false positives fromobjectorbodyfor single-domain aliases (thebreakingalias searches the full message - see caveat above)- Exact
emoji+tag+spaceβ no overlap with otherprefixes --extended-regexp(-E) allows clean OR patterns when needed--graph --color --decoratemakes output readable and beautiful
Pro tip
Combine with other flags for "SQL-like" power:
# Bugs by the current user this month
git bug --author="$(git config user.name)" --since="1 month ago"
# UI changes since last release
git log v1.2.0.. --grep="^π ui" --oneline --decorate --color --graphThese aliases are optional but highly recommended - they unlock the full scanning speed promise of Commoji.
Commoji is built first and foremost for human readers. Full 100% automated enforcement of every rule (especially semantic orthogonality, verb choice, and object quality) is inherently difficult with today's conventional linters.
Standard tools like commitlint can reliably enforce the structural parts of the spec:
- Presence of valid prefix from the Prefixes table
- Lowercase scope
- Exactly one space after the colon
- Header length
- Breaking-change
!placement
Deeper rules (verb appropriateness, avoiding semantic repetition in the object, etc.) cannot be perfectly validated automatically.
- Use the minimal
commitlintconfig below for basic structural guardrails. - Rely on the upcoming official Commoji VS Code Extension (currently in development) as the primary tool for full guidance, interactive commit creation, real-time validation, and best compliance.
module.exports = {
extends: ['@commitlint/config-conventional'],
parserPreset: {
parserOpts: {
headerPattern: /^(.+?\s[\w-]+)(?:\(([^)]+)\))?(!)?:[ ](.*)$/,
headerCorrespondence: ['type', 'scope', 'breaking', 'subject']
}
},
rules: {
'type-enum': [
2,
'always',
[
'β¨ feature',
'π bug',
'π¨ logic',
'π₯ debt',
'π£ repo',
'π ui',
'π§ ux',
'π¨ assets',
'π i18n',
'π¦― a11y',
'π docs',
'β
spec',
'π types',
'πΎ data',
'π¦ deps',
'π env',
'π· ci',
'π build',
'π© config',
'π metrics',
'π security',
'π§ chore',
'β history',
'π branch',
'π¬ experiment'
]
],
'type-case': [0], // disabled - commitlint can't handle emoji-prefixed types
'scope-case': [2, 'always', 'lower-case'],
'subject-case': [0], // disabled - object casing is spec-managed (proper nouns etc.)
'subject-empty': [2, 'never'],
'subject-full-stop': [2, 'never'],
'header-max-length': [2, 'always', 72],
'type-empty': [2, 'never']
}
}For use outside commitlint - Git hooks, custom parsers, changelog generators, CI scripts:
/^(.+?\s[\w-]+)(?:\(([a-z][a-z0-9-]*)\))?(!)?:[ ](.+)$/| Group | Captures | Example |
|---|---|---|
$1 |
Full prefix (emoji + tag) | β¨ feature |
$2 |
Scope (optional) | payment-gateway |
$3 |
Breaking ! (optional) |
! |
$4 |
Subject (verb + object) | add Stripe webhook handler |
Drop-in hook for projects not using Husky or lint-staged. Save as .git/hooks/commit-msg and make it executable (chmod +x .git/hooks/commit-msg). Note that this validates structural format only - verb table compliance and semantic orthogonality require the Commoji VS Code Extension.
#!/bin/sh
# Commoji commit-msg hook - validates header structure
REGEX='^.+[[:space:]][a-zA-Z0-9_-]+(\([a-z][a-z0-9-]*\))?(!)?: .+$'
SHORTCODE_REGEX=':[a-z_]+:'
MSG=$(head -1 "$1")
if echo "$MSG" | grep -qE "$SHORTCODE_REGEX"; then
echo "β Shortcode detected in commit subject: $MSG"
echo " Use the actual UTF-8 emoji instead of shortcodes (e.g. β¨ not :sparkles:)"
exit 1
fi
if ! echo "$MSG" | grep -qE "$REGEX"; then
echo "β Invalid Commoji format: $MSG"
echo " Expected: <prefix>[(<scope>)][!]: <verb> <object>"
exit 1
fiThe table below demonstrates real commit messages that fully comply β or deliberately violate β the complete set of locked Commoji rules (Format, Prefixes, Scope, Verbs, Object, Breaking Changes, and semantic orthogonality).
| Commit Message | Valid | Why |
|---|---|---|
π¨ logic(auth): refactor token validation |
β | Imperative verb, no repetition |
π© config: update Redis connection timeout |
β | Specific object, correct domain usage |
π docs: add payment flow guide |
β | Concise object, unambiguous docs domain |
π security: harden API endpoints against XSS |
β | Valid table verb, precise object |
β¨ feature(payment-gateway): add Stripe webhook handler |
β | Valid scope, specific object |
π metrics: optimize Redis cache eviction |
β | Specific object, clean domain+operation |
π₯ debt: remove deprecated v1 controllers |
β | Precise object, correct domain usage |
π bug!: update login response format |
β | Breaking change without scope |
π¦ deps(user-profile)!: remove lodash v4 |
β | Breaking change + multi-word scope |
π docs: update docs |
β | Object repeats tag (violates orthogonality) |
β¨ feature: new payment modal |
β | Missing verb - object must be preceded by a verb |
π bug: Fix Login Bug |
β | Capitalized verb + object repeats domain |
π¨ logic(auth): refactored token validation |
β | Past tense (must be imperative present) |
π ui(ui): update button styles |
β | Scope duplicates tag |
Commoji commit message examples
The psychological foundation of Commoji draws from well-established research in visual perception, cognitive psychology, information theory, and multimedia learning.
-
Lexical Semantics & Semantic Dimensions
Lyons, J. (1977). Semantics (Vol. 1). Cambridge University Press. (Foundational treatment of semantic fields and the orthogonality of lexical dimensions - the basis for non-overlapping domain/operation separation in structured vocabularies.) -
Feature Integration Theory & Pop-out Effect
Treisman, A. M., & Gelade, G. (1980). A feature-integration theory of attention. Cognitive Psychology, 12(1), 97β136. https://doi.org/10.1016/0010-0285(80)90005-5 -
Gestalt Principles
Wertheimer, M. (1923). Laws of Organization in Perceptual Forms. Psychologische Forschung, 4(1), 301β350.
Koffka, K. (1935). Principles of Gestalt Psychology. Harcourt, Brace. -
Cognitive Load Theory
Sweller, J. (1988). Cognitive load during problem solving: Effects on learning. Cognitive Science, 12(2), 257β285.
Sweller, J., Ayres, P., & Kalyuga, S. (2011). Cognitive Load Theory. Springer. -
Multimedia Learning & Signaling Principle
Mayer, R. E. (2021). The Cambridge Handbook of Multimedia Learning (3rd ed.). Cambridge University Press.
(See especially chapters on the Signaling Principle and Reducing Extraneous Processing.) -
Processing Fluency & Familiarity Heuristic
Schwarz, N. (2004). Metacognitive experiences in judgment and decision making. Journal of Consumer Psychology, 14(4), 332β348. -
Chunking & Working Memory
Miller, G. A. (1956). The magical number seven, plus or minus two: Some limits on our capacity for processing information. Psychological Review, 63(2), 81β97.
The works above informed the consolidation of principles in the Psychology section. For eye-movement and parafoveal preview benefits supporting fast scanning of emoji-prefixed commits, see also Rayner, K. (1998). Eye movements in reading and information processing: 20 years of research. Psychological Bulletin, 124(3), 372β422.
-
Barach, E., et al. (2021). Are emojis processed like words?: Eye movements reveal the time course of semantic processing for emojified text. Psychonomic Bulletin & Review, 28(3), 983β997. https://doi.org/10.3758/s13423-020-01864-y
(Core evidence for parafoveal preview, skipping rates, and reduced fixation times β directly supports high-speed Git log scanning.) -
Daniel, T. A., & Camp, A. L. (2020). Emojis affect processing fluency on social media. Psychology of Popular Media, 9(2), 208β213. https://doi.org/10.1037/ppm0000219
(Shows congruent emojis make messages subjectively easier and faster to understand.) -
Boutet, I., LeBlanc, M., et al. (2021). Emojis influence emotional communication, social attributions, and information processing. Computers in Human Behavior, 119, 106722. https://doi.org/10.1016/j.chb.2021.106722
(Faster processing speed and better comprehension with congruent emojis.) -
Rong, S., Wang, W., Mannan, U. A., et al. (2022). An empirical study of emoji use in software development communication. Information and Software Technology, 148, 106912. https://doi.org/10.1016/j.infsof.2022.106912
(Large-scale GitHub analysis: emoji prefixes speed up responses and improve organization in commits/PRs β perfect real-world validation for Commoji.)
Read about the latest changes in the CHANGELOG.
Licensed under the MIT license.
If this project or its implementation has provided value, support is greatly appreciated.
Thank you for supporting these efforts! ππ
@igorskyflyer/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. π
@igorskyflyer/strip-yaml-front-matter
π¦ Strips YAML front matter from a String or a file. πΎ
@igorskyflyer/registry-apppaths
πͺ 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).
