Create a new fumadocs project from sketch.
Create a new Next.js application with create-next-app, and install required packages.
npm pnpm yarn bun 
npm  install  fumadocs-ui  fumadocs-core 
You can choose a content source  you prefer.
There is a list of supported sources:
You have to configure the library correctly following their setup guide before continuing.
Wrap the entire application inside Root Provider .
import  {  RootProvider  }  from  'fumadocs-ui/provider' ; import  type  {  ReactNode  }  from  'react' ;   
export  default  function  RootLayout ({  children  } :  {  children :  ReactNode  })  {   return  (     < html  lang = "en" >       < body >         < RootProvider > { children } </ RootProvider >       </ body >     </ html >   ) ; } Vanilla Tailwind CSS 
Import the pre-built stylesheet in the root layout.
import  'fumadocs-ui/style.css' ; 
It doesn't come with a default font, you may choose one from next/font.
 Create a new catch-all route /app/docs/[[...slugs]] for our docs, and give it a proper layout.
import  {  DocsLayout  }  from  'fumadocs-ui/layout' ; import  {  pageTree  }  from  '@/app/source' ; import  type  {  ReactNode  }  from  'react' ;   
export  default  function  RootDocsLayout ({  children  } :  {  children :  ReactNode  })  {   return  (     < DocsLayout  tree = { pageTree }  nav = {{  title :  'My App'  }} >       { children }     </ DocsLayout >   ) ; } 
pageTree refers to Page Tree, it should be provided by your content source.
 For the page.tsx, it may vary depending on your source. You should configure static rendering with generateStaticParams and metadata with generateMetadata.
Wrap your content in the Page  component.
Fumadocs MDX Content Collections 
app/docs/[[...slug]]/page.tsx import  {  getPage ,  getPages  }  from  '@/app/source' ; import  type  {  Metadata  }  from  'next' ; import  {  DocsPage ,  DocsBody  }  from  'fumadocs-ui/page' ; import  {  notFound  }  from  'next/navigation' ;   
export  default  async  function  Page ({   params , } :  {   params :  {  slug ?:  string []  }; })  {   const  page  =  getPage (params . slug) ;   
  if  (page  ==  null )  {     notFound () ;   }   
  const  MDX  =  page . data . exports . default ;   
  return  (     < DocsPage  toc = { page . data . exports . toc }  full = { page . data . full } >       < DocsBody >         < h1 > { page . data . title } </ h1 >         < MDX  />       </ DocsBody >     </ DocsPage >   ) ; }   
export  async  function  generateStaticParams ()  {   return  getPages () . map ( ( page )  =>  ( {     slug :  page . slugs ,   } )) ; }   
export  function  generateMetadata ({  params  } :  {  params :  {  slug ?:  string []  }  })  {   const  page  =  getPage (params . slug) ;   
  if  (page  ==  null )  notFound () ;   
  return  {     title :  page . data . title ,     description :  page . data . description ,   }  satisfies  Metadata ; } 
Use the default document search based on Flexsearch.
Fumadocs MDX Content Collections 
import  {  getPages  }  from  '@/app/source' ; import  {  createSearchAPI  }  from  'fumadocs-core/search/server' ;   
export  const  {  GET  }  =  createSearchAPI ( 'advanced' ,  {   indexes :  getPages () . map ( ( page )  =>  ( {     title :  page . data . title ,     structuredData :  page . data . exports . structuredData ,     id :  page . url ,     url :  page . url ,   } )) , } ) ; 
Learn more about Document Search .
You can start the dev server and start writing content.