Writing Pages in MDX
After installing the plugin, MDX files
written in src/pages will turn into pages. This happens because
gatsby-mdx looks for MDX files and automatically transpiles them
so that Gatsby internals can render them.
Pages are rendered at a URL that is constructed from the filesystem
path inside src/pages. An MDX file at src/pages/awesome.mdx will
result in a page being rendered at mysite.com/awesome.
By default, gatsby-mdx supports frontmatter so you can define things like titles and paths to use in your GraphQL queries.
Frontmatter
You can declare frontmatter at the beginning of your MDX document:
---
title: Hello, world!
path: /hello-world
date: 2019-01-29
---
# Hello, world!Which can then be queried with GraphQL:
query {
  allMdx {
    edges {
      node {
        frontmatter {
          path
          title
          date(formatString: "MMMM DD, YYYY")
        }
      }
    }
  }
}Importing components
Similarly to what you’d do in JSX, you can import and render components with JSX. You can also import other MDX documents.
import { Chart } from "../components/chart"
import FAQ from "../content/faq.mdx"
# Here’s a chart
The chart is rendered inside our MDX document.
<Chart />
<FAQ />Exports
MDX supports export syntax as well which allows you to export metadata
about a given document. gatsby-mdx will automatically add it to the
GraphQL schema so you can use the exported data in your queries and
rendering.
export const metadata = {
  name: "World",
  path: "/world",
}
# Hello, <span>{props.metadata.name}</span>
The heading above will say "Hello, World".Defining a layout
You can specify the layout that will wrap your component using the default export.
import PurpleBorder from "../components/purple-border"
# This will have a purple border
export default PurpleBorderGraphQL Queries
You can fetch data to use in your MDX file by exporting a pageQuery
in the same way you would for a .js page. The queried data is passed
as a prop, and can be accessed inside any JSX block when writing in
MDX:
import { graphql } from "gatsby"
# My Awesome Page
Here's a paragraph, followed by a paragraph with data!
<p>{props.data.site.siteMetadata.description}</p>
export const pageQuery = graphql`
  site {
    siteMetadata {
      description
    }
  }
`Edit this page on GitHub