آشنایی جامع با Fumadocs، فریمورک مدرن مستندسازی مبتنی بر React و Next.js؛ معماری لایهای، ویژگیهای کلیدی، نحوه نصب، مقایسه با Docusaurus و Nextra و دلایل انتخاب آن برای پروژه شما.
اگر تا امروز یک بار هم که شده برای یک پروژه، کتابخانه یا محصول نرمافزاری خودتان یک سایت مستندات (Documentation Site) ساخته باشید، احتمالاً این حس آشناست: هر بار از صفر شروع میکنید، دوباره روی طراحی، جستجو، سایدبار، حالت تاریک/روشن و دهها جزئیات کوچک دیگر وقت میگذارید. Fumadocs دقیقاً برای حل همین مسئله ساخته شده است.
Fumadocs یک فریمورک متنباز و مدرن مستندسازی مبتنی بر React.js است که توسط توسعهدهندهای به نام Fuma Nama ساخته شده و این روزها توسط پروژههای شناختهشدهای مثل Vercel، Orama و Unkey استفاده میشود. در این مقاله قرار است بررسی کنیم و ببینیم اصلاً Fumadocs چیست، چه معماریای دارد و چرا اینقدر بین توسعهدهندهها محبوب شده است؛ سپس در مقاله بعدی سراغ «کامپوننتهای Fumadocs» و نحوه استفاده عملی از آنها خواهیم رفت.
این مقاله برای چه کسی مناسب است؟
اگر میخواهید برای پروژه، استارتاپ یا کتابخانه متنباز خودتان یک سایت مستندات حرفهای بسازید و هنوز تصمیم نگرفتهاید از چه ابزاری استفاده کنید، این مقاله دقیقاً برای شماست.
اکثر ابزارهای مستندسازی قدیمیتر یکی از این دو مشکل را دارند:
Fumadocs بین این دو حالت یک راه میانه هوشمندانه انتخاب کرده است: مجموعهای از بلوکهای آماده و قابلترکیب در اختیار شما میگذارد که میتوانید همانطور که هستند استفاده کنید، یا هر بخشی از آنها را باز کنید و طبق سلیقه خودتان بازسازی کنید.
خلاصه یکخطی
Fumadocs یعنی «داشتن تمام قطعات درست، برای ساختن دقیقاً همان چیزی که نیاز دارید» — نه یک قالب بسته، نه یک ابزار خام.
یکی از تفاوتهای اصلی Fumadocs با رقبایش، معماری کاملاً جداشده و ترکیبپذیر (composable) آن است. Fumadocs بهجای اینکه یک بسته یکپارچه و بزرگ باشد، به چند لایه مستقل تقسیم شده:
یک کتابخانه Headless که منطق اصلی مثل جستجوی محتوا، مدیریت منابع محتوا (Content Source) و افزونههای Markdown را مدیریت میکند. هیچ رابط کاربری تحمیل نمیکند.
لایه رابط کاربری آماده و زیبا، شامل تم پیشفرض، سایدبار، هدر، حالت تاریک/روشن و تمام کامپوننتهای تعاملی.
منبع رسمی محتوا برای Fumadocs؛ مسئول خواندن و کامپایل فایلهای MDX شما و تبدیل آنها به دادهای که Core بتواند مصرف کند.
بستههایی مثل fumadocs-openapi برای مستندسازی خودکار API و fumadocs-obsidian برای پشتیبانی از سینتکس Obsidian.
چرا این معماری مهم است؟
چون میتوانید فقط از fumadocs-core بهعنوان یک کتابخانه استفاده کنید و رابط کاربری خودتان را از صفر بسازید؛ بدون اینکه مجبور باشید کل فریمورک را بپذیرید. این همان چیزی است که در سایت رسمی به آن «Headless docs» گفته میشود.
Fumadocs بهصورت پیشفرض هم از Markdown ساده و هم از MDX (سینتکس Markdown بهعلاوه JSX) پشتیبانی میکند. یعنی نویسندگان محتوا میتوانند مثل همیشه با Markdown بنویسند و توسعهدهندهها میتوانند کامپوننت React واقعی داخل محتوا وارد کنند.
پیشنهاد مطالعه
اگر میخواهید با جزئیات کامل هر کدام از این کامپوننتها و مثالهای عملی آنها آشنا شوید، مقاله اختصاصی «کامپوننتهای Fumadocs» را مطالعه کنید.
یکی از قابلیتهای متمایزکننده Fumadocs، ترکیب MDX با React Server Components است. این یعنی میتوانید داخل یک صفحه مستندات، مستقیماً از دیتابیس یا یک CMS داده بخوانید و آن را رندر کنید؛ بدون اینکه مستندات شما ثابت (Static) و از رده خارج بماند.
auto-type-table برای تولید خودکار جدول مستندسازی از روی تایپهای TypeScriptبرخلاف بسیاری از ابزارهای مشابه که فقط برای یک فریمورک خاص ساخته شدهاند، Fumadocs بهصورت رسمی از چند فریمورک React پشتیبانی میکند:
پرکاربردترین و پختهترین یکپارچهسازی Fumadocs، با پشتیبانی کامل از App Router.
برای پروژههایی که از اکوسیستم TanStack استفاده میکنند.
مناسب پروژههای مبتنی بر React Router بهجای Next.js.
پشتیبانی از فریمورک سبک و مینیمال Waku.
Fumadocs بهصورت آماده با موتورهای جستجوی Orama و Algolia یکپارچه میشود، بدون اینکه نیاز به پیادهسازی جستجو از صفر داشته باشید. برای پروژههای کوچکتر هم گزینه جستجوی محلی (Local Search) بهصورت پیشفرض کار میکند.
Fumadocs یک CLI اختصاصی دارد که دقیقاً مثل رویکرد شادکنیوآی (shadcn/ui) عمل میکند: بهجای اینکه کامپوننتها را بهصورت یک پکیج بسته دریافت کنید، کد آنها مستقیماً داخل پروژه شما کپی میشود تا هر طور که خواستید تغییرش دهید.
npx @fumadocs/cli customizeمستندات همیشه قرار نیست فقط داخل فایلهای MDX محلی نوشته شوند. Fumadocs طوری طراحی شده که با هر منبع محتوایی کار کند:
fumadocs-mdximport { loader } from 'fumadocs-core/source';
import { defineDocs } from 'fumadocs-mdx/macro';
const docs = defineDocs({
dir: 'content/docs',
});
export const source = loader({
source: docs.toFumadocsSource(),
baseUrl: '/docs',
});نکته فنی
فایل source.ts قلب اتصال Fumadocs به محتوای شماست؛ هر تغییری در ساختار پوشه محتوا، باید در این فایل هم منعکس شود.
راهاندازی یک پروژه جدید Fumadocs تنها چند دقیقه طول میکشد. کافی است این مراحل را دنبال کنید:
اجرای ابزار CLI رسمی دستور زیر را در ترمینال اجرا کنید. CLI بهصورت تعاملی از شما میپرسد که کدام فریمورک (Next.js، Waku، TanStack Start یا React Router) و کدام منبع محتوا را میخواهید استفاده کنید.
npm create fumadocs-appساخت اولین فایل MDX
یک فایل داخل پوشه content/docs بسازید و محتوای اولیه را داخل آن بنویسید.
---
title: Hello World
---
## سلام دنیا
این اولین صفحه مستندات من با Fumadocs است.اجرای سرور توسعه سرور محلی را اجرا کنید و نتیجه را در مرورگر ببینید.
npm run devسپس آدرس http://localhost:3000/docs را در مرورگر باز کنید.
پس از راهاندازی، ساختار پروژه شما تقریباً به این شکل خواهد بود:
از یک پروژه قدیمی استفاده میکنید؟
اگر یک پروژه Next.js از قبل دارید، لازم نیست همهچیز را از صفر بسازید. با دنبال کردن راهنمای رسمی «Manual Installation» میتوانید Fumadocs را بهصورت دستی به پروژه فعلی خودتان اضافه کنید.
اگر تمام این پیکربندیها برای شما زیاد به نظر میرسد، Fumadocs یک برادر کوچکتر و سادهتر به نام Fumapress هم دارد. ایده Fumapress این است که هر ویژگی فقط با یک پلاگین فعال میشود؛ بدون نیاز به دانش قبلی از پیکربندیهای پیچیده.
import { defineConfig } from "fumapress";
import { fumadocsMdx } from "fumapress/adapters/mdx";
import { flexsearchPlugin } from "fumapress/plugins/flexsearch";
import { llmsPlugin } from "fumapress/plugins/llms.txt";
import { docs } from "./.source/server";
export default defineConfig({
content: {
docs: docs.toFumadocsSource(),
},
})
.plugins(flexsearchPlugin(), llmsPlugin())
.adapters(fumadocsMdx());Fumadocs یا Fumapress؟
اگر تیم فنی دارید و میخواهید کنترل کامل روی ظاهر و ساختار مستندات داشته باشید، سراغ Fumadocs بروید. اگر فقط میخواهید سریع یک مستندات ساده و کاربردی راه بیندازید، Fumapress انتخاب بهتری است.
| ویژگی | Fumadocs | Docusaurus | Nextra |
|---|---|---|---|
| زیرساخت | Next.js / React (چندفریمورکی) | React (اختصاصی خودش) | Next.js |
| معماری | لایهای و کاملاً ترکیبپذیر | یکپارچهتر و کمتر ماژولار | نسبتاً سادهتر |
| شخصیسازی UI | بالا (روش CLI مانند shadcn) | متوسط | متوسط |
| React Server Components | پشتیبانی کامل | محدود | جزئی |
| مناسب برای | تیمهای فنی که کنترل کامل میخواهند | پروژههای متنباز بزرگ و سنتی | مستندات ساده و سریع |
یک نکته منصفانه
هیچ ابزاری برای همه شرایط «بهترین» نیست. اگر پروژه شما ساده است و فقط چند صفحه مستند نیاز دارد، شاید سربار یادگیری معماری لایهای Fumadocs لازم نباشد. اما برای پروژههایی که قرار است رشد کنند و نیاز به شخصیسازی عمیق دارند، Fumadocs گزینه بسیار قویتری است.
مزایا:
محدودیتها:
Fumadocs یکی از جدیترین گزینهها برای هر تیمی است که با اکوسیستم React/Next.js کار میکند و میخواهد بهجای ساختن مستندات از صفر، از قطعات آماده و باکیفیت استفاده کند؛ بدون اینکه مجبور شود از انعطافپذیری و شخصیسازی صرفنظر کند. معماری لایهای آن، پشتیبانی از React Server Components، و ابزار CLI مشابه shadcn/ui، آن را به یکی از مدرنترین انتخابها در سال ۲۰۲۶ تبدیل کرده است.
قدم بعدی
حالا که با معماری و امکانات کلی Fumadocs آشنا شدید، پیشنهاد میکنیم مقاله «راهنمای جامع کامپوننتهای Fumadocs» را هم مطالعه کنید تا با نحوه استفاده عملی از هرکدام از کامپوننتها آشنا شوید.
آموزش گامبهگام Callout، Card، Accordion، Steps، Tabs و InlineTOC با مثالهای عملی.
کد منبع، مشارکت در پروژه و پیگیری آخرین تغییرات Fumadocs.
کلمات کلیدی اصلی: Fumadocs, معرفی Fumadocs, فریمورک مستندسازی, Next.js, React, MDX, ساخت سایت مستندات
کلمات کلیدی فرعی: مقایسه Fumadocs, نصب Fumadocs, Fumapress, معماری Fumadocs, headless docs, RTL, راستچین