Jamdesk Documentation logo

Migration Guide

Moving from another documentation platform? Jamdesk can help automate the transition, or you can migrate manually for full control.

Mintlify projects have a one-command path: jamdesk migrate reads mint.json, writes docs.json, and rewrites your MDX in place. Coming from GitBook, Docusaurus, ReadMe, Confluence, or somewhere else? The "Other Platforms" tab walks through the manual steps — they're short if you can get your content out as Markdown.

Export as Markdown first if you can. Jamdesk is built on MDX, so anything already in Markdown drops in with a .mdx rename and a few lines of frontmatter.

Choose Your Path

The CLI does the bulk of the work for you.

Mintlify to Jamdesk Guide

Read the migration walkthrough with background, examples, and migration tips.

Automated Migration

1
Install the CLI
npm install -g jamdesk
2
Run the migration
jamdesk migrate

From the project root, this runs in one pass:

  • Reads mint.json and writes docs.json
  • Renames deprecated components in MDX files (e.g. CardGroupColumns)
  • Moves orphan snippet MDX files into /snippets/ and rewrites every parent-relative import (../foo/bar.mdx) to a root-relative one (/snippets/foo/bar.mdx)
  • Extracts inline components that use React hooks into /snippets/<name>.tsx with the 'use client' directive, then rewrites the original MDX to import from /snippets/
  • Auto-fixes mechanical MDX syntax issues that would crash the build

The command is idempotent — re-run it after edits and it picks up only what's new. Anything it can't safely auto-handle is printed as a warning with the file, the import, and the action to take.

3
Review and adjust

Check the generated docs.json and MDX files. Verify navigation structure and any warnings printed by the CLI.

Configuration Mapping

The CLI converts mint.json to docs.json automatically. These are the key differences so you can verify the output.

Mintlify (mint.json):

{
  "name": "My Docs",
  "navigation": [
    { "group": "Getting Started", "pages": ["introduction", "quickstart"] }
  ],
  "colors": { "primary": "#0D9373" },
  "topbarLinks": [{ "name": "Blog", "url": "https://example.com/blog" }]
}

Jamdesk (docs.json):

{
  "$schema": "https://jamdesk.com/docs.json",
  "name": "My Docs",
  "theme": "jam",
  "colors": { "primary": "#0D9373" },
  "navbar": {
    "links": [{ "label": "Blog", "href": "https://example.com/blog" }]
  },
  "navigation": {
    "groups": [
      { "group": "Getting Started", "pages": ["introduction", "quickstart"] }
    ]
  }
}

Component Compatibility

Most Mintlify components have direct equivalents in Jamdesk. A few have different names or syntax.

Mintlify ComponentJamdesk EquivalentNotes
<Card><Card>Same syntax
CardGroup<Columns>Use cols prop for column count
<Columns><Columns>Same syntax
<Accordion><Accordion>Same syntax
<Tabs> / <Tab><Tabs> / <Tab>Same syntax
<Steps> / <Step><Steps> / <Step>Same syntax
<CodeGroup><CodeGroup>Same syntax
<Tip>, <Note>, <Warning><Tip>, <Note>, <Warning>Same syntax
<ResponseField><ParamField>Different name
<Snippet>Import from /snippets/Different approach

Common Issues

jamdesk migrate renames CardGroup to Columns for you across every MDX file. The cols prop carries over unchanged. Check any files you've edited after running the migration.

Rename <ResponseField> to <ParamField>. Props stay the same.

{/* Before */}
<ResponseField name="id" type="string" required>
  The unique identifier
</ResponseField>

{/* After */}
<ParamField name="id" type="string" required>
  The unique identifier
</ParamField>

Jamdesk resolves only root-relative /snippets/* imports. Mintlify projects often keep snippet MDX files anywhere in the tree and import them with parent-relative paths (import X from '../shared/x.mdx').

jamdesk migrate does three things here in one pass:

  • Detects MDX files that are imported as snippets but live outside /snippets/, and moves them under /snippets/ while preserving their relative path (so locale-prefixed snippets like de/foo.mdx don't collide).
  • Rewrites every parent-relative snippet import in every MDX file to the new root-relative path.
  • Extracts any inline component that uses React hooks into a 'use client' file at /snippets/<name>.tsx and replaces the inline export with an import from /snippets/.

If you used Mintlify's <Snippet file="my-snippet.mdx" /> JSX element, swap it for an MDX import — that one isn't auto-rewritten:

{/* Before (Mintlify) */}
<Snippet file="my-snippet.mdx" />

{/* After (Jamdesk) */}
import MySnippet from '/snippets/my-snippet.mdx'

<MySnippet />

The relocator is conservative — if your project has no resolved navigation, or the planned moves exceed max(5, 25%) of all MDX files, it aborts without touching anything and tells you why. Re-run after fixing the abort reason.

Mintlify's topbarLinks and topbarCtaButton both map to navbar.links in docs.json. The name field becomes label, and url becomes href.

Post-Migration Checklist

All pages render without errors
Navigation structure matches your original site
Internal links work correctly
Images and assets display properly
Code blocks have correct syntax highlighting
Search indexes your content

What's Next?

Directory Structure

Learn how to organize your documentation

docs.json Reference

Configure your site settings