Plugin: Advanced Markdown Chunker – smarter Markdown chunking for RAG

Hi everyone,

I’ve been playing with Markdown-based knowledge bases in Dify and kept running into the same annoying issues: code blocks getting cut in the middle, nested lists being split in weird places, and chunks that don’t really match how the document is structured.

So I ended up building a plugin called Advanced Markdown Chunker and thought I’d share it here.

The idea is simple: instead of using one fixed way to split text, the plugin looks at the document and tries to understand what it’s mostly made of – code, lists, deeply structured sections, or just plain text – and then picks one of four internal strategies. In practice that means:

  • code-heavy docs (API refs, tutorials) get a code-aware mode that keeps fenced blocks atomic (no mid-function splits);
  • list-heavy docs (changelogs, release notes, feature lists) get a list-aware mode that keeps nested lists together with their intro text;
  • more “classic” documentation with multiple heading levels is handled structurally, respecting the hierarchy;
  • everything else falls back to a safe default strategy for mixed/simple Markdown.

On top of that, it tries hard not to break Markdown in stupid places: code blocks, tables and lists stay intact, chunks “remember” which headers they belong to, and neighbouring chunks share some overlap (up to ~35%) so the context doesn’t suddenly disappear at the boundary.

Each chunk can also carry some metadata (content type, header path, source line numbers, small overlap preview), which tends to help when you later do retrieval or want to debug what exactly got indexed. All of this runs fully locally inside Dify – no external API calls and no LLM needed just to split the Markdown.

This is mainly aimed at RAG setups built on Markdown: docs, API/SDK guides with a lot of code, changelogs/release notes, technical specs, architecture docs, etc.

Links:

If you’re using Markdown in Dify and feel that the default chunking is a bit too naive, I’d really appreciate any feedback, weird edge cases, or “this totally broke my doc” reports :slightly_smiling_face:

1 Like

hi i’ve got some problem, i use the ui and not coding.

- there’s no example of a working markdown file, i’m confused on what is the expected outcome if there’s no input.

- document_loader doesn’t exist in dify, now its being replaced with data source file and doc extractor

- official law document, which have already converted into markdown manually, can’t be parsed as structural (header-based) and hierarchical. it just being parsed as simple splitting. here’s an example.

# PERATURAN BADAN PENGAWAS OBAT DAN MAKANAN NOMOR 7 TAHUN 2023 TENTANG KRITERIA DAN TATA LAKSANA REGISTRASI OBAT KUASI 

## Menimbang 

a. bahwa untuk melindungi masyarakat dari obat kuasi yang tidak memenuhi persyaratan keamanan, khasiat, dan mutu, diperlukan pengaturan mengenai standar dan/atau persyaratan keamanan, khasiat, dan mutu obat kuasi; 

b. bahwa sesuai dengan ketentuan Pasal 3 ayat (1) huruf d Peraturan Presiden Nomor 80 Tahun 2017 tentang Badan Pengawas Obat dan Makanan, Badan Pengawas Obat dan Makanan memiliki fungsi pelaksanaan tugas pengawasan sebelum beredar dan pengawasan selama beredar; 

c. bahwa berdasarkan ketentuan Pasal 126 ayat (4) Peraturan Pemerintah Nomor 5 Tahun 2021 tentang Penyelenggaraan Perizinan Berusaha Berbasis Risiko, Badan Pengawas Obat dan Makanan berwenang mengatur kriteria dan tata laksana registrasi obat kuasi sebagai bagian dari standar dan/atau persyaratan obat kuasi; 

d. bahwa berdasarkan pertimbangan sebagaimana dimaksud dalam huruf a, huruf b, dan huruf c, perlu menetapkan Peraturan Badan Pengawas Obat dan Makanan tentang Kriteria dan Tata Laksana Registrasi Obat Kuasi; 

## Mengingat 

1. Peraturan Pemerintah Nomor 5 Tahun 2021 tentang Penyelenggaraan Perizinan Berusaha Berbasis Risiko (Lembaran Negara Republik Indonesia Tahun 2021 Nomor 15, Tambahan Lembaran Negara Republik Indonesia Nomor 6617); 

2. Peraturan Presiden Nomor 80 Tahun 2017 tentang Badan Pengawas Obat dan Makanan (Lembaran Negara Republik Indonesia Tahun 2017 Nomor 180); 

3. Peraturan Badan Pengawas Obat dan Makanan Nomor 21 Tahun 2020 tentang Organisasi dan Tata Kerja Badan Pengawas Obat dan Makanan (Berita Negara Republik Indonesia Tahun 2020 Nomor 1002) sebagaimana telah diubah dengan Peraturan Badan Pengawas Obat dan Makanan Nomor 13 Tahun 2022 tentang Perubahan atas Peraturan Badan Pengawas Obat dan Makanan Nomor 21 Tahun 2020 tentang Organisasi dan Tata Kerja Badan Pengawas Obat dan Makanan (Berita Negara Republik Indonesia Tahun 2022 Nomor 629); 

4. Peraturan Badan Pengawas Obat dan Makanan Nomor 22 Tahun 2020 tentang Organisasi dan Tata Kerja Unit Pelaksana Teknis di Lingkungan Badan Pengawas Obat dan Makanan (Berita Negara Republik Indonesia Tahun 2020 Nomor 1003) sebagaimana telah beberapa kali diubah terakhir dengan Peraturan Badan Pengawas Obat dan Makanan Nomor 24 Tahun 2022 tentang Perubahan Kedua atas Peraturan Badan Pengawas Obat dan Makanan Nomor 22 Tahun 2020 tentang Organisasi dan Tata Kerja Unit Pelaksana Teknis di Lingkungan Badan Pengawas Obat dan Makanan (Berita Negara Republik Indonesia Tahun 2022 Nomor 1111); 

## MEMUTUSKAN 

Menetapkan: 

PERATURAN BADAN PENGAWAS OBAT DAN MAKANAN TENTANG KRITERIA DAN TATA LAKSANA REGISTRASI OBAT KUASI. 

## BAB I 
### KETENTUAN UMUM 

#### Pasal 1 

Dalam Peraturan Badan ini yang dimaksud dengan: 

1. Obat Kuasi adalah sediaan yang mengandung bahan aktif dengan efek farmakologi yang bersifat non sistemik atau lokal dan untuk mengatasi keluhan ringan. 

2. Izin Edar adalah bentuk persetujuan registrasi obat kuasi untuk dapat diedarkan di wilayah Indonesia. 

3. Registrasi Obat Kuasi yang selanjutnya disebut Registrasi adalah prosedur pendaftaran dan evaluasi Obat Kuasi secara elektronik untuk mendapatkan persetujuan Izin Edar. 

4. Industri Farmasi adalah badan usaha yang memiliki izin dari lembaga pemerintah yang menyelenggarakan urusan di bidang kesehatan untuk melakukan kegiatan pembuatan obat atau bahan obat. 

5. Industri Obat Tradisional yang selanjutnya disingkat IOT adalah industri yang membuat semua bentuk sediaan obat tradisional. 

6. Usaha Kecil Obat Tradisional yang selanjutnya disingkat UKOT adalah usaha yang membuat semua bentuk sediaan obat tradisional, kecuali bentuk sediaan tablet, efervesen, suppositoria, dan kapsul lunak. 

7. Usaha Mikro Obat Tradisional yang selanjutnya disingkat UMOT adalah usaha yang hanya membuat sediaan Obat Bahan Alam dalam bentuk param, tapel, pilis, cairan obat luar, dan rajangan. 

8. Industri Kosmetika adalah industri yang memproduksi kosmetika yang telah memiliki izin usaha industri sesuai dengan ketentuan peraturan perundang-undangan. 

9. Importir adalah badan usaha berbentuk badan hukum atau bukan badan hukum yang memasukkan Obat Kuasi ke dalam wilayah Indonesia. 

10. Lisensi adalah izin yang diberikan oleh pemberi lisensi kepada penerima lisensi berdasarkan perjanjian tertulis untuk menggunakan hasil penelitian dan pengembangan yang menyangkut keamanan, khasiat, mutu, dan alih teknologi dalam pembuatan dan/atau penggunaan nama dagang serta penjualan suatu Obat Kuasi. 

11. Cara Pembuatan yang Baik adalah seluruh aspek kegiatan pembuatan yang bertujuan untuk menjamin agar produk yang dihasilkan senantiasa memenuhi persyaratan mutu yang ditetapkan sesuai dengan tujuan penggunaannya. 

12. Cara Pembuatan Obat yang Baik yang selanjutnya disingkat CPOB adalah cara pembuatan obat dan/atau bahan obat yang bertujuan untuk memastikan agar mutu obat dan/atau bahan obat yang dihasilkan sesuai dengan persyaratan dan tujuan penggunaannya. 

13. Cara Pembuatan Obat Tradisional yang Baik yang selanjutnya disingkat CPOTB adalah seluruh aspek kegiatan pembuatan obat tradisional yang bertujuan untuk menjamin agar produk yang dihasilkan memenuhi persyaratan mutu yang ditetapkan sesuai dengan tujuan penggunaannya. 

14. Cara Pembuatan Kosmetika yang Baik yang selanjutnya disingkat CPKB adalah seluruh aspek kegiatan pembuatan kosmetika yang bertujuan untuk menjamin agar produk yang dihasilkan senantiasa memenuhi persyaratan mutu yang ditetapkan sesuai dengan tujuan penggunaannya. 

15. Sertifikat CPOB adalah dokumen sah yang merupakan bukti bahwa Industri Farmasi telah memenuhi persyaratan CPOB dalam membuat satu jenis bentuk sediaan obat. 

16. Sertifikat CPOTB adalah dokumen sah yang merupakan bukti bahwa industri dan usaha obat tradisional telah memenuhi seluruh persyaratan teknis CPOTB dalam membuat satu jenis bentuk sediaan obat tradisional. 

17. Sertifikat Pemenuhan Aspek CPOTB secara Bertahap adalah dokumen sah yang merupakan bukti bahwa usaha obat tradisional yang secara bertahap telah memenuhi aspek persyaratan teknis CPOTB dalam membuat satu jenis bentuk sediaan obat tradisional. 

18. Sertifikat CPKB adalah dokumen sah yang merupakan bukti bahwa Industri Kosmetika telah menerapkan CPKB dalam pembuatan kosmetika. 

19. Produk Jadi adalah suatu produk yang telah melalui semua tahap proses pembuatan. 

20. Produk Ruahan adalah bahan yang telah selesai diolah dan tinggal memerlukan kegiatan pengemasan untuk menjadi Produk Jadi. 

21. Obat Kuasi Kontrak adalah Obat Kuasi yang seluruh atau sebagian tahapan pembuatan dilimpahkan kepada Industri Farmasi, IOT, UKOT, atau Industri Kosmetika berdasarkan kontrak. 

22. Registrasi Baru adalah Registrasi Obat Kuasi yang belum memiliki Izin Edar di Indonesia. 

23. Registrasi Variasi adalah Registrasi Obat Kuasi dengan perubahan aspek administratif, keamanan, khasiat, mutu, dan/atau penandaan pada Obat Kuasi yang telah memiliki Izin Edar. 

24. Registrasi Variasi Minor dengan Notifikasi adalah Registrasi Variasi untuk aspek tertentu yang tidak berpengaruh terhadap aspek keamanan, khasiat, dan/atau mutu Obat Kuasi serta tidak mengubah informasi pada persetujuan Izin Edar. 

25. Registrasi Variasi Minor dengan Persetujuan adalah Registrasi Variasi yang tidak termasuk kategori Registrasi Variasi Minor dengan Notifikasi maupun Registrasi Variasi Mayor. 

26. Registrasi Variasi Mayor adalah Registrasi Variasi yang berpengaruh terhadap aspek administratif, keamanan, khasiat, dan/atau mutu Obat Kuasi. 

27. Registrasi Ulang adalah Registrasi Obat Kuasi untuk perpanjangan masa berlaku Izin Edar. 

28. Penandaan adalah informasi lengkap mengenai khasiat, keamanan, dan cara penggunaan serta informasi lain yang berhubungan dengan produk yang dicantumkan pada etiket dan/atau brosur yang disertakan pada kemasan Obat Kuasi. 

29. Iklan Obat Kuasi yang selanjutnya disebut Iklan adalah setiap keterangan atau pernyataan mengenai Obat Kuasi, dalam bentuk gambar, tulisan, atau bentuk lain yang dilakukan dengan berbagai cara untuk pemasaran dan/atau perdagangan Obat Kuasi. 

30. Formula adalah susunan kualitatif dan kuantitatif bahan aktif dan bahan tambahan. 

31. Komposisi adalah susunan kualitatif dan kuantitatif dari bahan aktif. 

32. Prinsipal adalah badan usaha yang berbentuk badan hukum atau bukan badan hukum, di dalam negeri atau di luar negeri yang menunjuk distributor atau agen di dalam negeri untuk melakukan penjualan barang yang diproduksi, dimiliki, atau dikuasai oleh Prinsipal. 

33. Petugas adalah pegawai di lingkungan Badan Pengawas Obat dan Makanan yang diberi tugas oleh pejabat yang berwenang untuk melakukan pemeriksaan berdasarkan surat perintah tugas. 

34. Pelaku Usaha adalah badan usaha yang berbentuk badan hukum atau bukan badan hukum yang didirikan dan berkedudukan dalam wilayah hukum Negara Kesatuan Republik Indonesia, baik sendiri maupun bersama-sama menyelenggarakan kegiatan usaha dalam bidang Obat Kuasi. 

35. Pemegang Izin Edar adalah Pelaku Usaha yang telah mendapatkan Izin Edar. 

36. Pemberi Kontrak adalah Pelaku Usaha yang mengalihkan kegiatan pembuatan Obat Kuasi berdasarkan kontrak. 

37. Penerima Kontrak adalah Industri Farmasi, IOT, UKOT, atau Industri Kosmetika yang menerima pekerjaan untuk melakukan kegiatan pembuatan Obat Kuasi berdasarkan kontrak. 

38. Kepala Badan adalah Kepala Badan Pengawas Obat dan Makanan. 

39. Badan Pengawas Obat dan Makanan yang selanjutnya disingkat BPOM adalah lembaga pemerintah nonkementerian yang menyelenggarakan urusan pemerintahan di bidang pengawasan Obat dan Makanan. 

40. Hari adalah hari kerja. 

- should i include metadata ?

Hi! Thanks for the feedback — I think the expectations just didn’t match how this plugin is meant to be used.

Advanced Markdown Chunker is designed as the chunking step inside a Knowledge Pipeline, right before saving into the Knowledge Base. It takes text from the previous step (typically Data Source / Doc Extractor), splits it into chunks, and passes them дальше. So the “input” comes from the pipeline, not from the plugin by itself.

The simplest UI flow is:
Data Source (file upload) → (Doc Extractor if needed) → Chunker (Advanced Markdown Chunker) → Knowledge Base, then run “Test Run” and inspect what chunks are produced.

For your “law” document I’d recommend forcing a predictable setup (no auto) while testing:

strategy: structural
enable_hierarchy: true
leaf_only: true
include_metadata: true

About document_loader: yep, that one is on me — older docs had an example that doesn’t match the current Dify UI. I’ve already updated the README accordingly.

Hope this helps clarify the intended usage.