Mintlify

Migrate from Mintlify, powered by your docs.json file.

Overview

@fumapress/mintlify reads your existing Mintlify docs.json file and configures Fumapress from it.

Installation

npm i @fumapress/mintlify

Add the plugin to your config, with docs.json located in your project root:

press.config.tsx
import { defineConfig } from "fumapress";
import { docs } from "./.source/server";
import { mintlifyPlugin } from "@fumapress/mintlify";

export default defineConfig({
  content: {
    docs: docs.toFumadocsSource(),
  },
})
  .plugins(mintlifyPlugin());

Your MDX pages should live in the content/docs folder (paths in docs.json are resolved against it, a docs/ or content/docs/ prefix in navigation entries is ignored).

Options

press.config.tsx
mintlifyPlugin({
  // path to docs.json, relative to project root
  path: "docs.json",
  // docs collection folder name inside `content/`
  docsDir: "docs",
  // disable individual features to take manual control
  features: {
    navigation: true,
    navbar: true,
    theme: true,
    appearance: true,
    banner: true,
    footer: true,
    redirects: true,
    notFound: true,
    search: true,
    metadata: true,
  },
});

Internationalization

When docs.json defines navigation.languages, configure i18n with defineMintlifyI18n():

press.config.tsx
import { defineConfig } from "fumapress";
import { defineMintlifyI18n, mintlifyPlugin, readMintlifyDocs } from "@fumapress/mintlify";

const mintlifyDocs = readMintlifyDocs();

export default defineConfig({
  content: {
    // ...
  },
  translations: defineMintlifyI18n(mintlifyDocs, {
    // optionally map Mintlify locales to your own locale codes
    localeMap: { cn: "zh" },
  }).translations(),
}).plugins(mintlifyPlugin());

OpenAPI & AsyncAPI

api.openapi sources (file paths or URLs) can be forwarded to Fumadocs OpenAPI:

press.config.tsx
import { defineConfig } from "fumapress";
import { docs } from "./.source/server";
import { mintlifyPlugin } from "@fumapress/mintlify";
import { createMintlifyOpenAPI } from "@fumapress/mintlify/openapi";
import { openapiPlugin } from "fumapress/plugins/openapi";

const openapi = createMintlifyOpenAPI();

export default defineConfig({
  content: {
    docs: docs.toFumadocsSource(),
    openapi: await openapi.staticSource(),
  },
}).plugins(mintlifyPlugin(), openapiPlugin({ server: openapi }));

api.asyncapi sources work the same way with createMintlifyAsyncAPI from @fumapress/mintlify/asyncapi and the AsyncAPI plugin.

api.playground.proxy is respected (proxy enabled by default at /api/proxy). Other api options are not supported, see the support matrix.

Support Matrix

All valid docs.json files parse successfully — unsupported properties are accepted and ignored, so migration never breaks on them.

This page covers docs.json only. MDX content (Mintlify components like <Card>, <Accordion>, frontmatter conventions) is handled by your content adapter, not by this plugin.

Supported

PropertyNotes
nameNavbar title (when no logo is set).
description<meta name="description"> on every page.
colors.primary / colors.lightMapped to --color-fd-primary in light/dark mode, with an automatically computed foreground color.
logoSingle or light/dark image, optional href.
faviconSingle or light/dark icon (via prefers-color-scheme).
navigationpages, groups, tabs, anchors, dropdowns, products, menu, versions, languages and global, rendered into the sidebar page tree. Per-item icon, tag (badge), hidden, root, expanded and external hrefs are supported.
navbarLinks with labels and/or icons, GitHub/Discord brand icons, and the primary CTA (button, github, discord).
appearancedefault color scheme; strict hides the theme toggle (and forces the default scheme when it is explicit).
background.color / background.imageApplied via CSS, light/dark variants included.
fontsGoogle Fonts loaded automatically; self-hosted woff/woff2 via @font-face; separate heading/body fonts.
bannerContent with inline Markdown (links, bold, italic, code), dismissible, type (info/warning/critical) and custom color.
footerSocial links (brand icons) and up to 4 link columns.
redirectsExact paths plus :param and :param* patterns; permanent maps to 308/307.
errors.404Mintlify semantics: redirect to home page by default, or a 404 page with custom title/description when redirect: false.
seo.metatagsAdded to every page (og:* keys rendered as property).
seo.indexingWith navigable (default), pages not referenced in navigation get <meta name="robots" content="noindex">.
search.promptReplaces the search UI placeholder text.
metadata.timestampMintlify semantics: last-modified dates are hidden unless set to true.
api.openapi / api.asyncapiVia createMintlifyOpenAPI() / createMintlifyAsyncAPI().
api.playground.proxyEnables/disables the API proxy.

Partially supported

PropertyNotes
icons.libraryAll icons render with Lucide. Lucide names map 1:1; Font Awesome and Tabler names are matched best-effort (exact name or a translation table for common icons), unknown names are skipped with a warning.
colors.darkNo Fumadocs equivalent for a separate button/hover color; primary/light drive the theme.
integrationsScript-based analytics are injected into <head>: amplitude, clarity, fathom, ga4, gtm, heap, hotjar, intercom, koala, logrocket, mixpanel, pirsch, plausible, posthog, segment. Not supported: adobe, clearbit, frontchat, hightouch, onetrust, telemetry, cookies.
contextualFumapress always shows page actions (copy Markdown, open in AI tools) on docs pages; the options list and display position are not configurable.
footer.socialsBrand glyphs are included for all platforms Mintlify accepts; website/earth-americas/podcast use generic icons.

Not supported

PropertyNotes
themeMintlify theme variants (mint, maple, palm, ...) don't map to Fumapress; the value is accepted and ignored. Customize with Fumadocs CSS instead.
background.decorationDecorations are Mintlify theme assets. Add your own via src/app.css.
styling.eyebrowsFumapress shows breadcrumbs by default.
styling.codeblocksCode block themes are compiled at build time — configure Shiki themes in your MDX adapter options.
thumbnailsUse the Takumi plugin to auto-generate social images.
interaction.drilldownSidebar folder behavior is not configurable.
variablesContent-level templating is up to your content adapter.
markdown.schema / markdown.instructionsSee the llms.txt plugin for Markdown serving to AI agents.
api.params / api.examples / api.url / api.mdx / api.playground.display / api.playground.credentialsNot configurable in Fumadocs OpenAPI.
navigation extras: directory, align, searchable, public, boost, color, hidden languages/versions hrefSearch/access-control and layout hints without a Fumapress equivalent.
$schema, publicHosting-level options, not applicable.

Notes

  • Icons: navigation, navbar and group icons resolve to Lucide components on the server, no extra client JavaScript is shipped.
  • Banner & footer are rendered outside the docs layout so they appear on every page.
  • $ref resolution: docs.json may reference other JSON files with $ref, they are resolved (and validated to stay inside your project root) before parsing.

Last updated on

On this page