# MDX (/components/mdx)

<!-- agent-signals: reading_time_min: 2 · est_tokens: 513 · updated: 2026-09-23 -->
Related: [Accordions](/components/accordions.md), [Badge](/components/badge.md), [Banner](/components/banner.md), [Callouts](/components/callouts.md), [Cards](/components/cards.md), [Code groups](/components/code-groups.md)

Use the `<MDX>` component to render content between the tags as MDX that compiles like the rest of your page. This is useful when you want to put headings, code fences, tables, and other components inside of a JSX component.

## Example [#example]

Show different Markdown sections based on an exported variable:

````mdx title="Conditional Markdown"
export const platform = "ios";

{platform === "ios" ? (
  <MDX>
    ## Install on iOS

    Download the SDK, then run:

    ```bash
    pod install
    ```
  </MDX>
) : (
  <MDX>
    ## Install on Android

    Add the SDK to your Gradle dependencies.
  </MDX>
)}
````

Only the active branch renders on the page.

You can also use `<MDX>` at the top level of a page to group a Markdown section into a single element:

```mdx title="Block form"
<MDX>

  # Hello

  This heading and paragraph compile as Markdown.
</MDX>
```

Leave a blank line after the opening tag in block form so the content parses as block-level Markdown. Inside expressions, `<MDX>` strips the common leading indentation from its content, so you can indent it to match the surrounding code.

<Note>
  Headings inside `<MDX>` appear in the page's table of contents. This includes headings in branches that never render, such as the inactive side of a conditional.
</Note>

## Code in fragments [#code-in-fragments]

Code fences and inline code inside `<MDX>` compile like code at the page root. Raw `<`, `>`, `{`, and `}` work without escaping:

````mdx title="Placeholders in fragment code"
{platform === "linux" && (
  <MDX>
    Clone the repository into `<project-root>`:

    ```bash
    git clone <repository-url> <project-root>
    ```
  </MDX>
)}
````

Character references in fragment code decode to their characters, matching how code renders elsewhere on the page. `&lt;` renders as `<`. To render a literal `&lt;`, write `&amp;lt;`.

## Limits [#limits]

* You can nest `<MDX>` components up to 8 levels deep.
* A page can expand up to 500 `<MDX>` fragments inside expressions.

Exceeding either limit fails the build.
