# 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.
<!-- "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

```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
