# next-intl createIntlError: MISSING_FORMAT

## TL;DR

Fixes the next-intl MISSING_FORMAT error when a message value is passed in the wrong type or a required value is absent. Pass values matching the ICU placeholders. Use when the error names MISSING_FORMAT. Not for missing messages.

## The error

```text
createIntlError: MISSING_FORMAT: The intl string context variable 'count' was not provided to the message 'cart.items'.
```

## Fix it

### Step 1: Find the message and its placeholders

```bash
grep -rn "cart.items" messages/en.json | head -3
```

Expected: You see the ICU string and the variables it expects.

### Step 2: Check the call site

```bash
grep -rn "cart.items" src --include=*.tsx | head -5
```

Expected: You see which values the component passes.

### Step 3: Pass the missing value with the right type and re-render

```bash
node -e "console.log('add count as a number, confirm the message formats')"
```

Expected: The message formats without the MISSING_FORMAT error.

## When to use this

- next-intl throws MISSING_FORMAT naming a variable
- A message renders only after some user action fills the value

## When NOT to use this

- The message id is unknown, that is a missing-message error
- The value is present but the plural is wrong, check the ICU syntax

## Tool and version compatibility

- next-intl 3.x
- Works the same in server and client components

## Variant phrasings

### value is undefined on first render

Data loads async. Render a skeleton until the value exists, or provide a default.

### value is a string but the placeholder expects a number

Plural selection needs a numeric type. Coerce before passing.

## Why it happens

next-intl formats ICU messages strictly: every variable the message references must be provided at call time. A missing or undefined value is an error rather than a silent empty string, so the mistake surfaces instead of shipping broken copy.

## Edge cases

- Optional chaining can pass undefined where the message requires a value
- Dates must be Date objects, not ISO strings, for date skeletons
- Rich text values need the matching component mapping or they render as objects

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_VV2V_eG8-1l87mvUtkJEvA
