Home
Blog
TutorialsEventsProjectsAboutContact

Menu

Departures

Latest posts

  1. 09 NOVDRNDrone Penanggulangan Karhutla Alat Pejuang Masa KiniOn time
  2. 09 NOVDRNBaling-Baling Bambu Modern Menjaga Kedaulatan UdaraOn time
  3. 09 NOVEDTDrone Crowd Control Berbasis AI Ringan untuk Acara MassalOn time
  4. 09 NOVEDTMakna Salam Tiga Jari dalam Gelombang Aksi MahasiswaOn time
  5. 09 NOVNWSBaykar Kirim Lebih dari 1.000 Drone ke 41 Negara di DuniaOn time
All departures
MDX Tables Not Rendering in Next.js? Here's How to Solve It!

WDELogbook entry· 4 min read

MDX Tables Not Rendering in Next.js? Here's How to Solve It!

If you are struggling with MDX tables not rendering in your Next.js project, this guide will help you troubleshoot and fix the issue effectively.

Liu Purnomo
Oleh Liu PurnomoDi tulis tanggal 19 Juli 2025
Web Development
4 min read

Sponsored

Flight Briefing · Newsletter

Suka tulisan ini? Dapatkan artikel berikutnya lewat email.

Tanpa spam. Berhenti kapan saja lewat link di setiap email.

NOTAMContent noticeREF C5000
Q)

Info only · Claim, credit, or removal on request

E)

Artikel ini dibuat untuk tujuan informasi. Kalau kamu pemilik gambar atau konten di halaman ini dan ingin mengklaim, meminta kredit, atau meminta penghapusan, saya terbuka untuk permintaan itu. Silakan hubungi saya.

This article is shared for informational purposes. If you own an image or content on this page and would like to claim it, request credit, or ask for its removal, I am open to that. Please contact me.

Contact tower[email protected]WhatsAppFull notice

Frequencies

  • #MDX

Sponsored

Liu PurnomoCallsign · LPLiu Purnomo

Pendiri Drone Indonesia, direktur Remote Pilot Indonesia, software engineer, dan penulis tiga buku tentang drone.

Selengkapnya
seedbacklinkDMCA.com Protection StatusBanner BlogPartner Backlink.co.id

NAVJelajahi

  • Beranda
  • Blog
  • Tutorial
  • Events
  • Projects
  • Buku

INFTentang

  • Tentang Saya
  • Kerja Sama
  • Kontak
  • Buku Tamu
  • Bio Links
  • Traktir Author

SYSOthers

  • Changelog
  • Systems
  • Sitemap
  • Kalkulator GSD
  • QR Code Generator

Flight Briefing · Newsletter

Artikel pilihan, langsung ke inbox.

Catatan terbaru soal drone, regulasi penerbangan, dan software, dikirim sesekali saja.

Tanpa spam. Berhenti kapan saja lewat link di setiap email.

0927

Tower online · Jakarta (WIB)

© 2026 Liu Purnomo. Some rights reserved.

Kebijakan PrivasiKetentuan PenggunaanContent Notice
Ikuti tulisan baru

Kecuali dinyatakan lain, tulisan di situs ini dilisensikan di bawah Creative Commons Attribution 4.0 International (CC BY 4.0). Anda boleh mengutip, menyalin, menerbitkan ulang, dan menjadikannya referensi, termasuk untuk keperluan komersial, selama menyebutkan Liu Purnomo sebagai penulis dan menautkan ke artikel aslinya. Foto atau materi pihak lain, logo, dan merek dagang tidak termasuk. Ketentuan lengkap

0
0

> Ever been frustrated because your MDX tables don't show up in Next.js? You're not alone!

Before I found the real solution, I even asked several AI assistants for help. But honestly? Most of the answers just went in circles—lots of theory, but no practical fix for my table problem. And almost every AI (and even some blog posts) will tell you to use MDXRemote for rendering MDX in Next.js. But here's the catch: that's exactly where the table rendering problem starts!

If you've been through the same, this article is for you: straight to the point, no more endless detours!

Want to display neat tables in your Next.js blog, but all you see is plain text? Relax, you're not the only one. This article will break down the main reasons why MDX tables often don't render in Next.js—and of course, share a proven, practical solution. Pastikan Anda sudah memahami format penulisan markdown dan cara menulis markdown dengan baik sebelum melanjutkan.

Baca juga

Ringkasan Isi Blog Ini

Web Development · 21 menit baca

Why Do MDX Tables Often Not Show Up in Next.js?

When I first used MDX in Next.js, I was confused too. Other Markdown elements (headings, lists, etc.) rendered perfectly, but tables? Gone! My setup was standard, dependencies up to date, and I'd read the docs.

Here's my project setup:

Everything worked fine until I tried to add a simple table like this:

But when I refreshed the page, the table didn't show up at all! Sometimes I just saw the raw Markdown text. Meanwhile, headings, lists, and other paragraphs rendered just fine. Turns out, this is a common issue in Next.js + MDX.

Sponsored

---

Checked the Docs, But Tables Still Won't Show?

Here's what I tried:

The result? Tables still wouldn't render! Turns out, there's one crucial step that's often missed.

The Practical Solution: The One Line Everyone Misses!

Turns out, the real key is the remark-gfm plugin. Without it, the MDX parser won't recognize GitHub Flavored Markdown (GFM) table syntax.

Backlink DoFollow dan NoFollow untuk SEO Website

Baca juga

Backlink DoFollow dan NoFollow untuk SEO Website

Web Development

1. Install the Required Plugins

Depends on Next.js documentation, you need to install this dependencies:

Then install the remark-gfm plugin:

2. Make Sure You Render with compileMDX and remarkGfm

Don't just use MDXRemote—use compileMDX and add remarkGfm to mdxOptions:

Then render as usual:

Sponsored

3. Adjust your next.config.ts Too

4. Example Markdown Table That Will Definitely Render

Final Thoughts: Don't Give Up—The Solution is Often Simple!

So, if your MDX tables aren't showing up in Next.js:

Fuel the next flight

Suka dengan tulisan ini?

Kalau artikel ini membantu, traktir saya secangkir kopi. Dukunganmu bikin saya bisa terus menulis dan berbagi lebih banyak.

Traktir kopi

1. Make sure remark-gfm is installed and used in compileMDX. 2. Double-check your next.config.ts and mdxOptions. 3. Use correct YAML frontmatter array and indentation.

Don't hesitate to explore, ask the community, and keep learning. Sometimes, the answer is just one line of code away!

> Did this help? Share this article with your fellow Next.js devs!

Comments

You must be logged in to comment

No comments yet. Be the first to comment!

Crew ID · Flight deckCaptain
Photo of Liu Purnomo

Written by

Liu Purnomo

I'm a Software Engineer who turns coffee into code, and sometimes I even make interactive web things that work! ☕💻 I'm also a certified multitasker: an Expert Drone Pilot (ask me for aerial selfies!), a Certified Instructor/Public Speaker (I talk a lot), and a Seasonal Runner who believes in running only when the weather is perfect. Let's connect!

Callsign
LPI
Handle
@liupurnomo
Home base
Jakarta, Indonesia
On dutyView profile
Connecting flights

Related posts

More articles headed the same way as this one.

  1. Gate 01WDEWDE15 Jul 2025Ringkasan Isi Blog IniPanduan lengkap untuk navigasi semua konten blog, dari dasar drone hingga tutorial web development.Via #MDXDuration21mBoarding
  2. Gate 02WDEWDE19 Oct 2026Backlink DoFollow dan NoFollow untuk SEO WebsiteBacklink dofollow dan nofollow menentukan cara mesin pencari mengalirkan otoritas antarhalaman web. Pelajari perbedaan teknis, fungsi link juice, serta cara memasang tag HTML yang benar untuk optimasi SEO.Sector Web DevelopmentDuration--Boarding
  3. Gate 03WDEWDE18 Oct 2026Cara Menulis Variabel di TypeScript yang Benar dan RapiPelajari cara menulis variabel di TypeScript secara lengkap mulai dari anotasi tipe data, inferensi otomatis, hingga penerapan objek dan immutabilitas.Sector Web DevelopmentDuration--Boarding
  4. Gate 04WDEWDE18 Oct 2026Review Hostinger Indonesia Lengkap Fitur dan HargaReview Hostinger mengupas tuntas performa server LiteSpeed, kemudahan antarmuka hPanel, serta rincian paket harga hosting web terbaru. Ulasan mendalam ini membedah kelebihan dan kekurangan nyata dari pengalaman teknis di lapangan.Sector Web DevelopmentDuration--Boarding
  1. WPT 01Why Do MDX Tables Often Not Show Up in Next.js?
  2. WPT 02Checked the Docs, But Tables Still Won't Show?
  3. WPT 03The Practical Solution: The One Line Everyone Misses!
  4. WPT 04Final Thoughts: Don't Give Up—The Solution is Often Simple!

Sponsored

Departures

Latest posts

  1. 09 NOVDRNDrone Penanggulangan Karhutla Alat Pejuang Masa KiniOn time
  2. 09 NOVDRNBaling-Baling Bambu Modern Menjaga Kedaulatan UdaraOn time
  3. 09 NOVEDTDrone Crowd Control Berbasis AI Ringan untuk Acara MassalOn time
  4. 09 NOVEDTMakna Salam Tiga Jari dalam Gelombang Aksi MahasiswaOn time
  5. 09 NOVNWSBaykar Kirim Lebih dari 1.000 Drone ke 41 Negara di DuniaOn time
All departures
json
1{
2 "name": "liupurnomo.com",
3 "version": "0.1.0",
4 "private": true,
5 "scripts": {
6 "dev": "next dev --turbopack",
7 "build": "next build",
8 "start": "next start",
9 "lint": "next lint"
10 },
11 "dependencies": {
12 "@mdx-js/loader": "^3.1.0",
13 "@mdx-js/react": "^3.1.0",
14 "@next/mdx": "^15.4.2",
15 "@types/mdx": "^2.0.13",
16 "framer-motion": "^12.23.5",
17 "gray-matter": "^4.0.3",
18 "lucide-react": "^0.525.0",
19 "next": "15.4.1",
20 "next-mdx-remote": "^5.0.0",
21 "next-themes": "^0.4.6",
22 "react": "19.1.0",
23 "react-dom": "19.1.0",
24 "react-hook-form": "^7.60.0",
25 "react-hot-toast": "^2.5.2",
26 "react-lite-youtube-embed": "^2.5.1",
27 "react-markdown": "^10.1.0",
28 "react-type-animation": "^3.2.0",
29 "remark-gfm": "^4.0.1"
30 },
31 "devDependencies": {
32 "@eslint/eslintrc": "^3",
33 "@tailwindcss/postcss": "^4",
34 "@types/crypto-js": "^4.2.2",
35 "@types/node": "^20",
36 "@types/react": "^19",
37 "@types/react-dom": "^19",
38 "eslint": "^9",
39 "eslint-config-next": "15.4.1",
40 "tailwindcss": "^4",
41 "typescript": "^5"
42 }
43}
mdx
1| Header 1 | Header 2 |
2| -------- | -------- |
3| Data A | Data B |
4| Data C | Data D |
  • Read the official Next.js MDX guide
  • Double-checked my App Router config
  • Followed discussions on GitHub and this issue
  • Tried various snippets and community workarounds
npm install @next/mdx @mdx-js/loader @mdx-js/react @types/mdx
npm install remark-gfm next-mdx-remote
tsx
1import { compileMDX } from 'next-mdx-remote/rsc';
2import remarkGfm from 'remark-gfm';
3
4const mdxResult = await compileMDX({
5 source: post.content,
6 components,
7 options: {
8 parseFrontmatter: true,
9 mdxOptions: {
10 remarkPlugins: [remarkGfm],
11 },
12 },
13});
tsx
1<div className="prose dark:prose-invert prose-lg px-4 py-12 space-y-8">
2 {mdxResult.content}
3</div>
tipescript
1import createMDX from '@next/mdx';
2import type { NextConfig } from 'next';
3import remarkGfm from 'remark-gfm';
4
5const nextConfig: NextConfig = {
6 /* config options here */
7 pageExtensions: ['js', 'jsx', 'md', 'mdx', 'ts', 'tsx'],
8 images: {
9 remotePatterns: [
10
11 ],
12 },
13 experimental: {
14 mdxRs: true,
15 },
16};
17
18const withMDX = createMDX({
19 options: {
20 remarkPlugins: [remarkGfm],
21 },
22 extension: /\.(md|mdx)$/,
23});
24
25export default withMDX(nextConfig);
Header 1Header 2
Data AData B
Data CData D