Skip to main content

Crate dioxus_mdx

Crate dioxus_mdx 

Source
Expand description

§dioxus-mdx

MDX parsing and rendering components for Dioxus applications.

This crate provides a complete solution for rendering Mintlify-style MDX documentation in Dioxus applications, including:

  • Parser: Extracts frontmatter, code blocks, and custom components from MDX
  • Components: Pre-built Dioxus components for callouts, cards, tabs, steps, etc.
  • Syntax Highlighting: Code blocks with language-aware highlighting

§Quick Start

use dioxus::prelude::*;
use dioxus_mdx::{parse_document, MdxContent};

#[component]
fn DocsPage(content: String) -> Element {
    rsx! {
        MdxContent { content }
    }
}

§Parsing Only

If you want to parse MDX without using the components:

use dioxus_mdx::{parse_document, parse_mdx, DocNode};

let mdx_content = r#"---
title: Getting Started
---

<Tip>This is a helpful tip!</Tip>

# Introduction

Welcome to the documentation.
"#;

// Parse with frontmatter
let doc = parse_document(mdx_content);
assert_eq!(doc.frontmatter.title, "Getting Started");

// Parse content only
let nodes = parse_mdx("## Hello\n\n<Note>A note</Note>");

§Supported Components

  • Callouts: <Tip>, <Note>, <Warning>, <Info>
  • Cards: <Card>, <CardGroup>
  • Tabs: <Tabs>, <Tab>
  • Steps: <Steps>, <Step>
  • Accordion: <AccordionGroup>, <Accordion>
  • Code: <CodeGroup>, fenced code blocks with syntax highlighting
  • API Docs: <ParamField>, <ResponseField>, <Expandable>
  • Examples: <RequestExample>, <ResponseExample>
  • Changelog: <Update>

§Styling

Components use Tailwind CSS with DaisyUI classes. Ensure your project has Tailwind and DaisyUI configured. The components use:

  • Base/neutral classes: bg-base-200, text-base-content, etc.
  • Color classes: text-primary, bg-success/10, etc.
  • Typography: prose, prose-sm

§Features

  • web (default): Enables web-specific features like clipboard copy

For internal navigation, components accept an on_link callback:

use dioxus::prelude::*;
use dioxus_mdx::DocCardGroup;

#[component]
fn DocsPage(group: CardGroupNode) -> Element {
    let nav = use_navigator();

    rsx! {
        DocCardGroup {
            group,
            on_link: move |href: String| nav.push(&href),
        }
    }
}

Re-exports§

pub use parser::AccordionGroupNode;
pub use parser::AccordionNode;
pub use parser::ApiInfo;
pub use parser::ApiOperation;
pub use parser::ApiParameter;
pub use parser::ApiRequestBody;
pub use parser::ApiResponse;
pub use parser::ApiServer;
pub use parser::ApiTag;
pub use parser::CalloutNode;
pub use parser::CalloutType;
pub use parser::CardGroupNode;
pub use parser::CardNode;
pub use parser::CodeBlockNode;
pub use parser::CodeGroupNode;
pub use parser::DocFrontmatter;
pub use parser::DocNode;
pub use parser::ExpandableNode;
pub use parser::HttpMethod;
pub use parser::MediaTypeContent;
pub use parser::OpenApiError;
pub use parser::OpenApiNode;
pub use parser::OpenApiSpec;
pub use parser::ParamFieldNode;
pub use parser::ParamLocation;
pub use parser::ParameterLocation;
pub use parser::ParsedDoc;
pub use parser::RequestExampleNode;
pub use parser::ResponseExampleNode;
pub use parser::ResponseFieldNode;
pub use parser::SchemaDefinition;
pub use parser::SchemaType;
pub use parser::StepNode;
pub use parser::StepsNode;
pub use parser::TabNode;
pub use parser::TabsNode;
pub use parser::UpdateNode;
pub use parser::extract_frontmatter;
pub use parser::get_raw_markdown;
pub use parser::highlight_code;
pub use parser::parse_document;
pub use parser::parse_mdx;
pub use parser::parse_openapi;
pub use components::ApiInfoHeader;
pub use components::DocAccordionGroup;
pub use components::DocAccordionItem;
pub use components::DocCallout;
pub use components::DocCard;
pub use components::DocCardGroup;
pub use components::DocCodeBlock;
pub use components::DocCodeGroup;
pub use components::DocContent;
pub use components::DocExpandable;
pub use components::DocNodeRenderer;
pub use components::DocParamField;
pub use components::DocRequestExample;
pub use components::DocResponseExample;
pub use components::DocResponseField;
pub use components::DocSteps;
pub use components::DocTableOfContents;
pub use components::DocTabs;
pub use components::DocUpdate;
pub use components::EndpointCard;
pub use components::EndpointPage;
pub use components::MdxContent;
pub use components::MdxIcon;
pub use components::MdxIcon;
pub use components::MdxRenderer;
pub use components::MdxRenderer;
pub use components::MethodBadge;
pub use components::OpenApiViewer;
pub use components::ParameterItem;
pub use components::ParametersList;
pub use components::RequestBodySection;
pub use components::ResponseItem;
pub use components::ResponsesList;
pub use components::SchemaDefinitions;
pub use components::SchemaTypeLabel;
pub use components::SchemaViewer;
pub use components::TagGroup;
pub use components::UngroupedEndpoints;
pub use components::extract_headers;
pub use components::slugify;
pub use components::MermaidDiagram;

Modules§

components
Dioxus components for rendering MDX documentation.
parser
MDX documentation parser for extracting frontmatter and components.