MD044 - Use Proper Capitalization for Names¶
Aliases: proper-names
What this rule does¶
Ensures brand names, product names, and technical terms are consistently capitalized throughout your documents.
Why this matters¶
- Professional appearance: Incorrect capitalization looks careless and unprofessional
- Brand respect: Shows you care about getting company and product names right
- Consistency: Readers won't be confused by different variations of the same name
- Searchability: Consistent naming improves search results and indexing
Examples¶
✅ Correct¶
With configured names:
# JavaScript Development Guide
This guide covers JavaScript best practices for GitHub projects.
We'll be using Node.js and TypeScript for our examples.
❌ Incorrect¶
# Javascript Development Guide <!-- Should be "JavaScript" -->
This guide covers javascript best practices for github projects.
<!-- "javascript" and "github" are incorrectly capitalized -->
We'll be using NodeJS and typescript for our examples.
<!-- "NodeJS" should be "Node.js", "typescript" should be "TypeScript" -->
🔧 Fixed¶
# JavaScript Development Guide
This guide covers JavaScript best practices for GitHub projects.
We'll be using Node.js and TypeScript for our examples.
Configuration¶
[MD044]
names = [] # List of properly capitalized names
code-blocks = false # Check inside code blocks (default: false)
html-elements = true # Check inside HTML elements (default: true)
html-comments = true # Check inside HTML comments (default: true)
ignore-frontmatter-fields = [] # Frontmatter fields to skip (default: check all)
Automatic fixes¶
When enabled, this rule will:
- Replace all incorrect capitalizations with the proper version
- Preserve the context and meaning of your text
- Work across headings, paragraphs, and lists
Special cases¶
- Only checks names you've configured
- Won't check inside URLs
- Won't check inside a file path in a frontmatter value, such as
docs/myapp.md,./myapp.md, or/abs/path/myapp.md, since rewriting a name there would break the reference. A slash is required for this exemption: a slash-less value likeimage: myapp.pnghas no path signal and is still checked, so a proper name embedded in a bare filename is still flagged and fixed (a dotted name likeNode.jsis protected precisely because it never gets the slash). This exemption applies to frontmatter values only; the same-looking path in body prose is checked like any other text. A path is recognized when it has a leading./,../,~/, or/, or its final segment has a file extension. A bare relative path with a literal space and no extension (docs/My App/myapp) is not recognized and is still checked - By default, skips code blocks (set
code-blocks: trueto check them) - Set
html-comments: falseto skip HTML comment content - Some names are intentionally lowercase (like "npm")
Frontmatter¶
rumdl checks proper names inside frontmatter values, not just body text,
since fields like title and description often hold prose. Frontmatter
keys themselves are never checked.
To exclude specific fields (for example machine-readable slugs or SEO
metadata that happen to contain a configured name), list their top-level
keys in ignore-frontmatter-fields:
Field names are matched case-insensitively against top-level frontmatter
keys only. Excluding a parent key excludes everything nested under it,
including nested maps, sequence items, and multi-line values. In TOML
frontmatter, excluding a key also excludes its [table] and
[[array-of-tables]] sections.
One YAML shape is not covered: a flow collection whose contents continue on
a following line that begins at column zero (seo: [ then myapp on the
next line) attributes that line to its own text rather than to seo, so
ignore-frontmatter-fields = ["seo"] does not exclude it. The value keeps
being checked, which is the safe direction. Put the collection on a single
line, or indent its continuation, to have it excluded.