LogoLight Design
  • Features
  • Pricing
  • Blog
  • Docs
LogoLight Design

Make AI SaaS in days, simply and effortlessly

LineEmail
公司資訊
  • 關於我們
  • 團隊介紹
  • 聯絡我們
產品與服務
  • 我們的服務
  • 顧問流程
  • 成功案例
  • 常見問題
資源與內容
  • 老闆痛點
  • 選擇實踐
  • 轉型迷思
  • 顧問解法
  • 投資報酬
Legal
  • Cookie Policy
  • Privacy Policy
  • Terms of Service
© 2025 Light Design All Rights Reserved.
Search
2025/02/15

Search

Implement document search in your docs

All Posts

Author

avatar for MkSaaS
MkSaaS

Categories

    More Posts

    Themes
    NewsProduct

    Themes

    Add Theme to Fumadocs UI

    avatar for Mkdirs
    Mkdirs
    2025/01/15
    Internationalization

    Internationalization

    Support multiple languages in your documentation

    avatar for MkSaaS
    MkSaaS
    2025/03/15
    Markdown

    Markdown

    How to write documents

    avatar for Mkdirs
    Mkdirs
    2025/03/05

    Newsletter

    Join the community

    Subscribe to our newsletter for the latest news and updates

    Fumadocs UI provides a good-looking search UI for your docs, the search functionality is instead provided and documented on Fumadocs Core.

    See Document Search.

    Search UI

    Open with ⌘ K or Ctrl K.

    Configurations

    You can customize search UI from the Root Provider component in root layout.

    When not specified, it uses the Default fetch Search Client powered by Orama.

    Custom Links

    Add custom link items to search dialog. They are shown as fallbacks when the query is empty.

    import { RootProvider } from 'fumadocs-ui/root-provider';
    
    <RootProvider
      search={{
        links: [
          ['Home', '/'],
          ['Docs', '/docs'],
        ],
      }}
    >
      {children}
    </RootProvider>;
    

    Disable Search

    To opt-out of document search, disable it from root provider.

    import { RootProvider } from 'fumadocs-ui/root-provider';
    
    <RootProvider
      search={{
        enabled: false,
      }}
    >
      {children}
    </RootProvider>;
    

    Hot Keys

    Customise the hot keys to trigger search dialog.

    import { RootProvider } from 'fumadocs-ui/root-provider';
    
    <RootProvider
      search={{
        hotKey: [
          {
            display: 'K',
            key: 'k', // key code, or a function determining whether the key is pressed
          },
        ],
      }}
    >
      {children}
    </RootProvider>;
    

    Tag Filter

    Add UI to change filters. Make sure to configure Tag Filter on search server first.

    import { RootProvider } from 'fumadocs-ui/root-provider';
    
    <RootProvider
      search={{
        options: {
          defaultTag: 'value',
          tags: [
            {
              name: 'Tag Name',
              value: 'value',
            },
          ],
        },
      }}
    >
      {children}
    </RootProvider>;
    

    Search Options

    Pass options to the search client, like changing the API endpoint for Orama search server:

    import { RootProvider } from 'fumadocs-ui/root-provider';
    
    <RootProvider
      search={{
        options: {
          api: '/api/search/docs',
        },
      }}
    >
      {children}
    </RootProvider>;
    

    Replace Search Dialog

    You can replace the default Search Dialog with:

    'use client';
    import SearchDialog from 'fumadocs-ui/components/dialog/search-default';
    import type { SharedProps } from 'fumadocs-ui/components/dialog/search';
    
    export default function CustomDialog(props: SharedProps) {
      // your own logic here
      return <SearchDialog {...props} />;
    }
    

    To pass it to the Root Provider, you need a wrapper with use client directive.

    'use client';
    import { RootProvider } from 'fumadocs-ui/provider';
    import dynamic from 'next/dynamic';
    import type { ReactNode } from 'react';
    
    const SearchDialog = dynamic(() => import('@/components/search')); // lazy load
    
    export function Provider({ children }: { children: ReactNode }) {
      return (
        <RootProvider
          search={{
            SearchDialog,
          }}
        >
          {children}
        </RootProvider>
      );
    }
    

    Use it instead of your previous Root Provider

    import { Provider } from './provider';
    import type { ReactNode } from 'react';
    
    export default function Layout({ children }: { children: ReactNode }) {
      return (
        <html lang="en">
          <body>
            <Provider>{children}</Provider>
          </body>
        </html>
      );
    }
    

    Other Solutions

    Algolia

    For the setup guide, see Integrate Algolia Search.

    While generally we recommend building your own search with their client-side SDK, you can also plug the built-in dialog interface.

    'use client';
    import algo from 'algoliasearch/lite';
    import type { SharedProps } from 'fumadocs-ui/components/dialog/search';
    import SearchDialog from 'fumadocs-ui/components/dialog/search-algolia';
    
    const client = algo('appId', 'apiKey');
    const index = client.initIndex('indexName');
    
    export default function CustomSearchDialog(props: SharedProps) {
      return <SearchDialog index={index} {...props} />;
    }
    
    1. Replace appId, apiKey and indexName with your desired values.

    2. Replace the default search dialog with your new component.

    Note

    The built-in implementation doesn't use instant search (their official javascript client).

    Tag Filter

    Same as default search client, you can configure Tag Filter on the dialog.

    import SearchDialog from 'fumadocs-ui/components/dialog/search-algolia';
    
    <SearchDialog
      defaultTag="value"
      tags={[
        {
          name: 'Tag Name',
          value: 'value',
        },
      ]}
    />;
    

    Orama Cloud

    For the setup guide, see Integrate Orama Cloud.

    'use client';
    
    import { OramaClient } from '@oramacloud/client';
    import type { SharedProps } from 'fumadocs-ui/components/dialog/search';
    import SearchDialog from 'fumadocs-ui/components/dialog/search-orama';
    
    const client = new OramaClient({
      endpoint: 'endpoint',
      api_key: 'apiKey',
    });
    
    export default function CustomSearchDialog(props: SharedProps) {
      return <SearchDialog {...props} client={client} showOrama />;
    }
    
    1. Replace endpoint, apiKey with your desired values.
    2. Replace the default search dialog with your new component.

    Community Integrations

    A list of integrations maintained by community.

    • Trieve Search

    Built-in UI

    If you want to use the built-in search dialog UI instead of building your own, you may use the SearchDialog component.

    import {
      SearchDialog,
      type SharedProps,
    } from 'fumadocs-ui/components/dialog/search';
    
    export default function CustomSearchDialog(props: SharedProps) {
      return <SearchDialog {...props} />;
    }
    

    Unstable

    It is an internal API, might break during iterations