Migrate from Mintlify

Migration5 min read||

There are two ways to bring a Mintlify project into DocsLit, depending on how clean a break you want.

Drop in: no conversion needed

DocsLit recognises Mintlify-style PascalCase tags directly in your Markdown. <Tip>, <Card>, <Steps>, <CardGroup>, and friends are rewritten to wc-* at build time, so most projects just work.

Mintlify uses mint.json (or docs.json); DocsLit uses docslit.json. Translate your navigation to a sidebar:

{ "name": "My Docs", "sidebar": [ { "group": "Getting started", "pages": ["introduction", "quickstart"] } ] }
Mintlify keeps .mdx files at the project root; DocsLit reads from docs/. Move them and rename .mdx.md (DocsLit treats both the same way, but .md is the convention). npx docslit dev

Open the browser and verify your pages render. <Tip>, <Card>, <Steps>, etc. are converted automatically.

npx docslit validate

Validate flags any PascalCase tag that doesn't have a built-in mapping or matching custom component, plus broken links and missing assets.

What's recognised

Every Mintlify component below works without any changes to your .md files:

[ { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": " (icon → icon-name)" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": " / ", "DocsLit renders": " / (title → label)" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": " / ", "DocsLit renders": " / (auto-numbered)" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": " / ", "DocsLit renders": " (Column unwraps)" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": " (path/query/body/header → name)" }, { "Mintlify": "", "DocsLit renders": "" }, { "Mintlify": "", "DocsLit renders": "(unwraps — keeps inner content)" }, { "Mintlify": "", "DocsLit renders": "(unwraps — keeps inner content)" }, { "Mintlify": "", "DocsLit renders": "(removed — use directly)" } ]

Font Awesome icon names on <Card icon="..."> and similar are mapped to built-in Lucide icons where a match exists.

Convention fallback

Any other PascalCase tag is rewritten by convention to wc-kebab-case. So <MyCustomThing> becomes <wc-my-custom-thing>. If you don't have a matching built-in or custom component, docslit validate will warn you so you can register it before shipping.

What isn't supported

DocsLit converts tag syntax, not full MDX semantics:

  • JSX expressions{props.foo}, {frontmatter.title}, {<Inline />} aren't evaluated. Strip them out, or use editable variables for runtime values.
  • import / export statements — not executed. Remove them from the top of your files.
  • JavaScript-valued attributes<Card cols={2 + 1}> works (numeric literal); <Card cols={someVar}> doesn't.

If your files lean heavily on these features, run the deep import below for an automated pass that strips them.

Deep import

For projects with lots of frontmatter quirks, JSX expressions, or other Mintlify-isms, the import command runs a thorough pass: rewrites every component, strips imports/exports, normalises frontmatter, and copies assets.

npx docslit import {{MINTLIFY_DIR}}

This creates a -docslit/ directory with your converted documentation.

Run `--dry-run` first to see what the import will do without writing any files:npx docslit import {{MINTLIFY_DIR}} --dry-run

What import does on top of the bridge

  • Rewrites tags eagerly — every component is converted in your source files instead of at build time, so the result is canonical wc-* Markdown you can read and edit directly.
  • Strips MDX imports and exports — removes import and export statements from the top of every page.
  • Strips JSX expressions — removes {...} interpolations that have no Markdown equivalent.
  • Normalises frontmatter — renames Mintlify-only keys (e.g., sidebarTitlesidebar_title) and drops fields DocsLit doesn't use (openapi, mode, noindex, deprecated).
  • Generates the sidebar — translates navigation from mint.json/docs.json into docslit.json's sidebar.
  • Handles versioned docs — detects navigation.versions and offers four migration strategies (branch-per-version, latest-only, merge-all, or skip).
  • Copies assets — images, screenshots, and other files referenced from pages.

Custom output directory

npx docslit import {{MINTLIFY_DIR}} --out my-new-docs

After import

The import prints a summary of converted pages, items needing manual review, and any errors.

cd {{MINTLIFY_DIR}}-docslit npx docslit dev

Preview every page and check that components render correctly.

npx docslit validate

This catches broken links, missing pages, and unknown component tags.

The import report flags components without a direct equivalent. Replace them with the closest DocsLit component or build a custom component.

Which path should I pick?

Situation Recommended
Mostly standard Mintlify components, light JSX usage Drop in
Heavy use of JSX expressions or imported MDX components Deep import
You want to keep your source files looking exactly like they do today Drop in
You want canonical wc-* source going forward Deep import
You're not sure Try drop-in first — you can always run the import later