MDX adalah format yang menggabungkan kekuatan Markdown dengan fleksibilitas komponen. Jika Anda terbiasa menulis Markdown, MDX akan terasa familiar — dengan tambahan kemampuan super. Artikel ini akan mengajarkan semua yang perlu Anda ketahui.

Apa Itu MDX?

MDX = Markdown + JSX

MDX memungkinkan Anda:

  • Menulis konten dengan syntax Markdown yang familiar
  • Menyisipkan komponen interaktif di tengah konten
  • Menggunakan JavaScript untuk logika dinamis
  • Mengimpor dan menggunakan komponen Astro/React
Ekstensi File

File MDX menggunakan ekstensi .mdx bukan .md. Sitemas sudah dikonfigurasi untuk memproses file MDX secara otomatis.

Syntax Markdown Dasar

Heading

Gunakan tanda # untuk heading. Jumlah # menentukan level:

Heading
markdown
# Heading 1 (H1) - Jangan gunakan, title sudah H1
## Heading 2 (H2) - Section utama
### Heading 3 (H3) - Sub-section
#### Heading 4 (H4) - Sub-sub-section
Satu H1 Saja

Jangan gunakan H1 (#) dalam konten artikel karena title artikel sudah menjadi H1. Mulai dengan H2 (##).

Paragraf dan Line Break

Paragraf dipisahkan dengan baris kosong:

Paragraf
markdown
Ini paragraf pertama. Lorem ipsum dolor sit amet.

Ini paragraf kedua. Dipisahkan oleh baris kosong.

Untuk line break dalam paragraf yang sama,
gunakan dua spasi di akhir baris  
atau tag <br />.

Bold dan Italic

Emphasis
markdown
**Teks bold** atau __juga bold__
*Teks italic* atau _juga italic_
***Bold dan italic***
~~Strikethrough~~

Hasil:

  • Teks bold
  • Teks italic
  • Bold dan italic
  • Strikethrough

List

Unordered list
markdown
- Item pertama
- Item kedua
  - Sub-item (indent 2 spasi)
  - Sub-item lagi
- Item ketiga
Ordered list
markdown
1. Langkah pertama
2. Langkah kedua
3. Langkah ketiga
Link
markdown
[Teks link](https://example.com)
[Link internal](/blog/artikel-lain)
[Link dengan title](https://example.com "Hover title")

Gambar

Gambar
markdown
![Alt text](./gambar.png)
![Alt text](/images/gambar.jpg)

Blockquote

Blockquote
markdown
> Ini adalah kutipan.
> Bisa multi-line.
>
> > Nested quote juga bisa.

Ini adalah contoh blockquote yang sudah di-render.

Code

Inline code
markdown
Gunakan `npm install` untuk instalasi.

Hasil: Gunakan npm install untuk instalasi.

Code block
markdown
```javascript
const greeting = 'Hello World';
console.log(greeting);
```

Tabel

Tabel
markdown
| Header 1 | Header 2 | Header 3 |
|----------|----------|----------|
| Cell 1   | Cell 2   | Cell 3   |
| Cell 4   | Cell 5   | Cell 6   |

Hasil:

Header 1Header 2Header 3
Cell 1Cell 2Cell 3
Cell 4Cell 5Cell 6

Horizontal Rule

Horizontal rule
markdown
---

Fitur MDX: Komponen

Ini yang membedakan MDX dari Markdown biasa — kemampuan menggunakan komponen.

Import Komponen

Di awal file (setelah frontmatter), import komponen yang akan digunakan:

Import komponen
mdx
---
title: "Judul Artikel"
# frontmatter lainnya...
---

import InfoBox from '@/components/mdx/InfoBox.astro';
import Terminal from '@/components/mdx/Terminal.astro';
import Steps from '@/components/mdx/Steps.astro';
import Step from '@/components/mdx/Step.astro';

Konten artikel dimulai di sini...

Menggunakan Komponen

Setelah diimport, gunakan komponen dengan syntax JSX:

Menggunakan komponen
mdx
<InfoBox type="tip" title="Tips Penting">
Ini adalah isi dari info box.
</InfoBox>

Komponen dengan Children

Beberapa komponen menerima konten di dalamnya:

Komponen dengan children
mdx
<Accordion title="Klik untuk expand">
Ini adalah konten yang tersembunyi.
Bisa berisi **markdown** juga.
</Accordion>
Contoh Accordion

Ini adalah contoh accordion yang sudah di-render. Anda bisa melihat bagaimana konten tersembunyi saat di-collapse.

Props Komponen

Komponen menerima props (parameter):

Props komponen
mdx
<InfoBox 
  type="warning" 
  title="Peringatan"
>
  Hati-hati dengan langkah ini!
</InfoBox>

<Terminal
  title="Install dependencies"
  content="npm install"
/>

Komponen Populer di Sitemas

InfoBox - Highlight informasi penting
import InfoBox from '@/components/mdx/InfoBox.astro';

<InfoBox type="note" title="Catatan">
  Informasi tambahan...
</InfoBox>

<InfoBox type="tip" title="Tips">
  Tips berguna...
</InfoBox>

<InfoBox type="warning" title="Peringatan">
  Hati-hati dengan...
</InfoBox>

<InfoBox type="danger" title="Bahaya">
  Jangan lakukan ini...
</InfoBox>
Terminal - Menampilkan perintah CLI
import Terminal from '@/components/mdx/Terminal.astro';

<Terminal
  title="Install Node.js"
  content="brew install node"
/>
CodeBlock - Kode dengan syntax highlighting

Gunakan komponen CodeBlock untuk menampilkan kode dengan syntax highlighting:

import CodeBlock from '@/components/mdx/CodeBlock.astro';

<CodeBlock title="app.js" lang="javascript">
// kode JavaScript Anda di sini
const express = require('express');
const app = express();
</CodeBlock>
Steps - Tutorial step-by-step
import Steps from '@/components/mdx/Steps.astro';
import Step from '@/components/mdx/Step.astro';

<Steps>
  <Step title="Langkah Pertama">
    Penjelasan langkah pertama...
  </Step>
  <Step title="Langkah Kedua">
    Penjelasan langkah kedua...
  </Step>
</Steps>

Markdown di Dalam Komponen

Anda bisa menggunakan Markdown di dalam komponen:

Markdown dalam komponen
mdx
<InfoBox type="tip" title="Tips">

Ini adalah list di dalam InfoBox:

- Item pertama dengan **bold**
- Item kedua dengan `code`
- Item ketiga dengan [link](/blog)

</InfoBox>
Contoh Hasil

Ini adalah list di dalam InfoBox:

  • Item pertama dengan bold
  • Item kedua dengan code
  • Item ketiga dengan link

Escape Characters

Untuk menampilkan karakter spesial secara literal:

Escape characters
markdown
\*Ini bukan italic\*
\# Ini bukan heading
\[Ini bukan link\]

Tips Produktivitas

1. Snippet di VS Code

Buat snippet untuk komponen yang sering digunakan. Di VS Code: Ctrl+Shift+P → “Snippets” → “MDX”.

2. Preview Sampingan

VS Code mendukung preview Markdown. Tekan Ctrl+Shift+V atau klik icon preview.

3. Auto-complete Import

Jika menggunakan ekstensi MDX, import akan auto-complete.

4. Copy dari Template

Sitemas menyediakan template di src/templates/. Copy dan modifikasi.

Kesalahan Umum

1. Lupa Baris Kosong

MDX memerlukan baris kosong di sekitar komponen:

❌ Salah
mdx
Teks sebelum
<InfoBox type="tip">
Konten
</InfoBox>
Teks sesudah
✅ Benar
mdx
Teks sebelum

<InfoBox type="tip">
Konten
</InfoBox>

Teks sesudah

2. Self-closing Tag Salah

Komponen tanpa children harus self-closing:

Self-closing
mdx
<!-- ❌ Salah -->
<Terminal title="Test" content="echo hello"></Terminal>

<!-- ✅ Benar -->
<Terminal title="Test" content="echo hello" />

3. Lupa Import

Setiap komponen yang digunakan harus diimport terlebih dahulu.

4. String dengan Quotes

Jika props berisi quote, gunakan escape atau kombinasi:

Quotes dalam props
mdx
<!-- ✅ Gunakan quote berbeda -->
<Terminal content='echo "Hello World"' />

<!-- ✅ Atau escape -->
<Terminal content="echo \"Hello World\"" />

Referensi Cepat

SyntaxHasil
**bold**bold
*italic*italic
`code`code
[link](url)link
## HeadingHeading level 2
- itemBullet list
1. itemNumbered list
> quoteBlockquote

Langkah Selanjutnya

Sekarang Anda menguasai MDX! Pelajari cara mengelola kategori dan tag:

Organisasi Konten

Pelajari cara mengelola kategori, topic, dan tag untuk organisasi konten yang lebih baik.

Kesimpulan

MDX memberikan kebebasan menulis yang luar biasa — dari artikel sederhana dengan Markdown murni hingga konten interaktif dengan komponen kustom.

Kuncinya adalah:

  1. Kuasai Markdown dasar terlebih dahulu
  2. Pelajari komponen yang tersedia
  3. Praktik dengan menulis artikel
  4. Eksperimen dengan kombinasi komponen

Semakin sering Anda menulis, semakin natural MDX terasa. Selamat menulis!