# 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:
```toml
[MD044]
names = ["JavaScript", "GitHub", "Node.js", "TypeScript"]
```
```markdown
# JavaScript Development Guide
This guide covers JavaScript best practices for GitHub projects.
We'll be using Node.js and TypeScript for our examples.
```
### ❌ Incorrect
```markdown
# Javascript Development Guide <!-- Should be "JavaScript" -->
This guide covers javascript best practices for github projects.
We'll be using NodeJS and typescript for our examples.
```
### 🔧 Fixed
```markdown
# JavaScript Development Guide
This guide covers JavaScript best practices for GitHub projects.
We'll be using Node.js and TypeScript for our examples.
```
## Configuration
```toml
[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 like `image: myapp.png` has no path signal
and is still checked, so a proper name embedded in a bare filename is still
flagged and fixed (a dotted name like `Node.js` is 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
- Won't check inside a wiki embed (`![[myapp.png]]`, `![[myapp.png|300]]`). The
whole construct names a file, so rewriting any part of it changes what the
embed resolves to
- In a wikilink, checks what the reader sees: the display text of
`[[page|the myapp guide]]`, and the page name of a plain `[[myapp]]`, which
doubles as its own display text. The page name in front of a `|` is left
alone, since renaming it changes what the link resolves to without changing
anything on the page
- By default, skips code blocks (set `code-blocks: true` to check them)
- Set `html-comments: false` to 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`:
```toml
[MD044]
names = ["MyApp"]
ignore-frontmatter-fields = ["slug", "seo"]
```
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.
## Learn more
- [Writing style guides](https://developers.google.com/style/word-list)
- [Technical writing best practices](https://docs.microsoft.com/style-guide/capitalization)
## Related rules
- [MD033](md033.md) - Control HTML usage in Markdown
- [MD040](md040.md) - Identify code block languages
- [MD049](md049.md) - Use consistent emphasis markers