Git Product home page Git Product logo

mdx's Introduction

Mintlify Logo

Mint

Open source docs builder that's beautiful, fast, and easy to work with.

contributions welcome Tweet

Mintlify

Mintlify's markdown parser

@mintlify/mdx is a thin layer on top of next-mdx-remote that provides a better developer experience for Next.js users by adding support for syntax highlighting.

Installation

# using npm
npm i @mintlify/mdx

# using yarn
yarn add @mintlify/mdx

# using pnpm
pnpm add @mintlify/mdx

Examples

Next.js pages router

You can check the example app here.

  1. Call the getCompiledMdx function inside getStaticProps and return the mdxSource object.

    export const getStaticProps = (async () => {
      const mdxSource = await getCompiledMdx({
        source: "## Markdown H2",
      });
    
      return {
        props: {
          mdxSource,
        },
      };
    }) satisfies GetStaticProps<{
      mdxSource: MDXCompiledResult;
    }>;
  2. Pass the mdxSource object as props inside the MDXComponent.

    export default function Page({
      mdxSource,
    }: InferGetStaticPropsType<typeof getStaticProps>) {
      return <MDXComponent {...mdxSource} />;
    }
  3. Import @mintlify/mdx/dist/styles.css inside your _app.tsx file. This file contains the styles for the code syntax highlighting.

    import "@mintlify/mdx/dist/styles.css";
    
    import { AppProps } from "next/app";
    
    export default function App({ Component, pageProps }: AppProps) {
      return <Component {...pageProps} />;
    }

Next.js app router

You can check the example app here.

  1. Call the getCompiledServerMdx function inside your async React Server Component which will give you the frontmatter and content.

    import { getCompiledServerMdx } from "@mintlify/mdx";
    
    export default async function Home() {
      const { content, frontmatter } = await getCompiledServerMdx({
        source: `---
          title: Title
          ---
    
          ## Markdown H2
        `,
      });
    
      return (
        <article className="prose mx-auto py-8">
          <h1>{String(frontmatter.title)}</h1>
    
          {content}
        </article>
      );
    }
  2. Import @mintlify/mdx/dist/styles.css inside your layout.tsx file. This file contains the styles for the code syntax highlighting.

    import type { Metadata } from "next";
    import "@mintlify/mdx/dist/styles.css";
    
    export const metadata: Metadata = {
      title: "Create Next App",
      description: "Generated by create next app",
    };
    
    export default function RootLayout({
      children,
    }: {
      children: React.ReactNode;
    }) {
      return (
        <html lang="en">
          <body>{children}</body>
        </html>
      );
    }

APIs

Similar to next-mdx-remote, this package exports the following APIs:

  • getCompiledMdx - a function that compiles MDX source to MDXCompiledResult.
  • MDXComponent - a component that renders MDXCompiledResult.
  • getCompiledServerMdx - a function that compiles MDX source to return content and frontmatter and should be used inside async React Server Component.
  • MDXServerComponent - a component that renders content and frontmatter and should be used inside async React Server Component.

getCompiledMdx

import { getCompiledMdx } from "@mintlify/mdx";

const mdxSource = await getCompiledMdx({
  source: "## Markdown H2",
  mdxOptions: {
    remarkPlugins: [
      // Remark plugins
    ],
    rehypePlugins: [
      // Rehype plugins
    ],
  },
});

MDXComponent

import { MDXComponent } from "@mintlify/mdx";

<MDXComponent
  components={
    {
      // Your custom components
    }
  }
  {...mdxSource}
/>;

getCompiledServerMdx

import { getCompiledServerMdx } from "@mintlify/mdx";

const { content, frontmatter } = await getCompiledServerMdx({
  source: `---
    title: Title
    ---

    ## Markdown H2
  `,
  mdxOptions: {
    remarkPlugins: [
      // Remark plugins
    ],
    rehypePlugins: [
      // Rehype plugins
    ],
  },
  components: {
    // Your custom components
  },
});

MDXServerComponent

import { MDXServerComponent } from "@mintlify/mdx";

<MDXServerComponent
  source="## Markdown H2"
  components={
    {
      // Your custom components
    }
  }
/>;

Built with ❤︎ by Mintlify

mdx's People

Contributors

ghoshnirmalya avatar hahnbeelee avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.