Interactive Charts in MDX
Learn how to embed beautiful, interactive charts directly in your blog posts using the built-in chart components.
Quick Start#
To add a chart, use the corresponding chart component with your data. Each chart accepts data in a simple CSV-like format within the component tags.
Bar Charts#
Bar charts are great for comparing values across categories. They support multiple variations.
Basic Bar Chart#
The simplest bar chart with one data series showing monthly traffic:
<BarChart>title: Monthly Unique Visitorsdescription: Total unique visitors from Jan to Junscrollable: true
month,visitorsJanuary,18600February,30500March,23700April,73000May,20900June,21400</BarChart>- with two data series comparing platforms
<BarChart>title: Traffic by Platformdescription: Comparison between Desktop and Mobile visitorsfooter: Data source: Google Analytics
month,desktop,mobileJanuary,186,80February,305,200March,237,120April,73,190May,209,130June,214,140</BarChart>Stacked Bar Chart#
Use stacked: true to show the breakdown of acquisition channels:
<BarChart>title: Quarterly Acquisition Channelsdescription: Stacked breakdown of traffic sourcesstacked: true
quarter,direct,search,social,referralQ1,400,240,120,80Q2,300,139,221,110Q3,200,980,229,150Q4,278,390,200,90</BarChart>Horizontal Bar Chart#
Use horizontal: true for horizontal bars - perfect for viewing top landing pages:
<BarChart>title: Top Landing Pagesdescription: Most visited pages by unique sessionshorizontal: trueheight: 250
page,sessionsHome,2840Blog,2350Pricing,1980Features,1650Docs,890</BarChart>Multiple Series Bar Chart#
Compare key performance indicators side by side:
<BarChart>title: Website Vital Statsdescription: Monthly comparison of pageviews vs conversionsscrollable: true
month,pageViews,sessions,conversionsJan,45000,12000,850Feb,52000,14500,920Mar,48000,13200,780Apr,61000,16800,1100May,55000,15200,980Jun,67000,18500,1250</BarChart>Minimal Bar Chart#
Hide grid, axes, and legend for a clean look at daily active users:
<BarChart>title: Daily Active Users (DAU)hideGrid: truehideYAxis: truehideLegend: trueheight: 200
day,usersMon,1200Tue,1800Wed,1500Thu,2100Fri,2800Sat,3200Sun,1900</BarChart>Line Charts#
Line charts are perfect for showing trends and changes over time.
Basic Line Chart#
Smooth Trend Line#
The growth trend of returning visitors over several months:
<LineChart>title: Returning Visitors Growthdescription: Weekly growth of loyal user basecurved: trueshowDots: truescrollable: true
week,loyalUsersW1,4000W2,4500W3,5200W4,4800W5,5800W6,6200W7,7100W8,7800</LineChart>Multi-Line Comparison#
Compare multiple SEO or organic traffic sources:
<LineChart>title: Traffic Source Trendsdescription: Organic vs Paid vs Social growthscrollable: true
month,organic,paid,socialJan,4000,2400,1800Feb,4500,2100,2200Mar,5200,2800,1900Apr,4800,3100,2500May,5800,2900,3100Jun,6200,3500,2800</LineChart>Linear Line Chart (No Curve)#
Use curved: false for strict metric tracking like Server Response Time (TTFB):
<LineChart>title: Server Response Time (TTFB)description: Daily average latency in millisecondscurved: falseshowDots: true
day,latencyMon,142Tue,145Wed,138Thu,148Fri,151</LineChart>Line Chart Without Dots#
A minimal look at page load performance trends:
<LineChart>title: Average Page Load Timedescription: End-to-end performance monitoringcurved: trueshowDots: false
time,loadTime00:00,45004:00,32008:00,78012:00,85016:00,72020:00,58024:00,410</LineChart>Area Charts#
Area charts emphasize the magnitude of change over time with filled regions.
Basic Area Chart with Gradient#
Visualize data usage or content delivery bandwidth:
<AreaChart>title: CDN Bandwidth Usagedescription: Daily data egress trend in Gigabytesgradient: true
day,egressMon,18.6Tue,30.5Wed,23.7Thu,27.3Fri,32.9Sat,41.4</AreaChart>Stacked Area Chart#
Show the cumulative breakdown of session durations:
<AreaChart>title: Session Duration Breakdowndescription: User stay time per visit categorystacked: truegradient: truescrollable: true
week,under_1m,one_to_five,five_plusWeek 1,4000,2400,800Week 2,3000,1398,600Week 3,2000,980,400Week 4,2780,3908,1200Week 5,1890,4800,1500Week 6,2390,3800,1100</AreaChart>Flat Area Chart (No Gradient)#
Use gradient: false for technical monitoring like concurrent user density:
<AreaChart>title: Concurrent Site Usersdescription: Real-time user density over 6 hoursgradient: falsestacked: true
time,mobile_users,desktop_users1h,240,1202h,310,1503h,280,1804h,420,2105h,350,1906h,290,140</AreaChart>Pie Charts#
Pie charts show proportional data and part-to-whole relationships.
Standard Pie Chart#
Monitor the distribution of operating systems among your audience:
<PieChart>title: Operating System Sharedescription: Audience distribution by user OSouterRadius: 100
os,shareiOS,275Windows,200Android,187macOS,173Other,90</PieChart>Donut Chart#
Add innerRadius to visualize visitor loyalty levels:
<PieChart>title: Visitor Loyaltydescription: Ratio of New vs. Returning usersinnerRadius: 60outerRadius: 100
userType,countNew Users,4500Returning,3200Subscribers,2800Loyalists,1200Enterprise,800</PieChart>Pie Chart with Labels#
Visualize screen resolution categories for UI optimization:
<PieChart>title: Device Screen Categoriesdescription: Popular resolutions for layout testinginnerRadius: 50outerRadius: 90showLabels: true
resolution,countFull HD,5840Mobile High,43204K Ultra,1240</PieChart>Radar Charts#
Radar charts are useful for comparing multiple variables across categories.
SEO Health Check#
Compare holistic site health metrics:
<RadarChart>title: SEO Health Auditdescription: Performance vs Accessibility vs SEO scoresheight: 350
metric,this_month,last_monthPerformance,120,110Accessibility,98,130SEO,86,130Best Practices,99,100Security,85,90PWA,65,85</RadarChart>Competitor Performance Comparison#
Benchmark your site metrics against industry averages:
<RadarChart>title: Site Performance Benchmarkdescription: Ratings across competing site architecturesheight: 400
metric,yourSite,average,topTierFirst Contentful Paint,90,75,85Speed Index,80,90,70Time to Interactive,95,85,80Cumulative Layout Shift,70,95,85First Input Delay,85,80,90Total Blocking Time,92,88,78</RadarChart>Radial Charts#
Radial bar charts display data as circular progress bars, excellent for showing progress against targets.
SEO Performance Goals#
Track progress towards multi-dimensional site optimization:
<RadialChart>title: SEO Performance Scoresdescription: Current progress vs 100% targetinnerRadius: 40outerRadius: 130height: 300
metric,scoreTechnical SEO,50Content,92Keywords,58Backlinks,35</RadialChart>Infrastructure Health#
Compact monitoring of global server uptime:
<RadialChart>title: Global Service UptimeinnerRadius: 30outerRadius: 90height: 250hideLegend: true
US East,100Europe,50Asia Pacific,25</RadialChart>Radial Progress (Single Value)#
The ultimate clean visualization for a primary key performance indicator:
<RadialChart>title: Cloud Storage Usagedescription: Percentage of total capacity usedinnerRadius: 70outerRadius: 110
source,usageUsed Space,75</RadialChart>Composed Charts (Mixed Types)#
Combine different chart types in a single visualization for complex reporting.
Acquisition Efficiency#
Marketing Spend (Bars) vs New Customers (Line):
<ComposedChart>title: Acquisition Efficiencydescription: Marketing Spend ($) vs. New Customer Countscrollable: true
month,spend(bar),customers(line),budget(line)Jan,1200,850,1500Feb,1800,920,1500Mar,1500,780,1500Apr,2100,1100,1500May,2800,1400,1500Jun,2400,1250,1500</ComposedChart>Engagement Depth Analysis#
Active Sessions (Area) vs returning users (Line):
<ComposedChart>title: Engagement Depth Analysisdescription: Total Active Sessions (area) vs. Returning User Count (line)scrollable: true
week,sessions(area),returning(line)W1,620,450W2,750,420W3,680,480W4,890,520W5,810,590W6,940,630</ComposedChart>Triple Reporting Metrics#
Add to Cart (Area), Checkout (Bars), and Purchase (Line) Conversion Flow:
<ComposedChart>title: Checkout Funnel Trendsdescription: Add to Cart (area), Checkout Started (bars), and Completed Purchase (line)scrollable: true
channel,cart(area),checkout(bar),purchase(line)Direct,850,620,510Search,1200,980,840Social,780,540,420Referral,690,480,390Email,920,740,650</ComposedChart>Configuration Reference#
The declarative syntax makes it easy to create charts. Simply provide attributes at the top and CSV data below.
Syntax Rules#
- Attributes: Key-value pairs (e.g.,
title: My Chart) - Data: CSV format with headers on the first line.
- X-Axis: The first column is used for the X-axis labels.
- Series: Subsequent columns are used as data series.
- Types: For
ComposedChart, useheader(type)syntax (e.g.,sales(bar)).
Property Reference#
| Prop | Type | Default | Description |
|---|---|---|---|
title | string | - | Chart title displayed above |
description | string | - | Subtitle/description text |
footer | string | - | Footer text below chart |
data | array | required | Array of data objects |
height | number | 300 | Chart height in pixels |
className | string | - | Additional CSS classes |
scrollable | boolean | false | Enable horizontal scrolling |
hideXAxis | boolean | false | Hide the X axis |
hideYAxis | boolean | false | Hide the Y axis |
hideGrid | boolean | false | Hide background grid |
hideLegend | boolean | false | Hide the legend |
hideTooltip | boolean | false | Hide hover tooltips |
colors | string[] | theme colors | Custom color palette |
Series Configuration#
For BarChart, LineChart, AreaChart, RadarChart, and ComposedChart:
series={[ { key: "fieldName", // Required: data field key label: "Display Name", // Required: legend label color: "#ff0000", // Optional: custom color type: "bar", // ComposedChart only: "bar" | "line" | "area" stackId: "group1", // Optional: for stacking radius: 4 // BarChart only: corner radius }]}Error Handling#
Charts automatically validate data and display helpful error messages. For example, an empty data array:
Chart Error
Data array is empty
Missing data keys also trigger informative errors:
Chart Error
Data array is empty
Best Practices#
Keep data simple: Charts work best with 5-10 data points. Too many points make the chart hard to read.
Responsive design: All charts automatically resize on mobile devices. Set appropriate height values for smaller screens.
Performance: Very large datasets (100+ points) may impact page performance. Consider aggregating data before visualization.
Accessibility: Charts include proper ARIA labels and keyboard navigation support for screen readers.
Color contrast: When customizing colors, ensure sufficient contrast for colorblind users. Avoid using only red/green combinations.