Why Migrate to HolyDocs?

HolyDocs was built as a direct replacement for Mintlify, with full compatibility for existing Mintlify projects and a set of capabilities that go beyond what Mintlify offers.

Pricing Comparison

MintlifyHolyDocs
Free tier1 project, limited pages1 project, 50 pages
Starter$150/mo$29/mo
Pro$400/mo$79/mo
EnterpriseCustomCustom (lower)
Overage chargesPer-page overage feesNo overage fees

Feature Comparison

FeatureMintlifyHolyDocs
Edge renderingVercel (single region)Cloudflare Workers (300+ PoPs)
AI assistantBasic searchAgentic RAG with tool calling
MCP serverNot availableBuilt-in per project
AI agentNot availableAutonomous doc maintenance
llms.txtNot availableAuto-generated every build
API playgroundBasicInteractive with 7-language code samples
i18n / translationManual onlyAI-powered translation (24 languages)
Preview deploysPro planPro plan and above
Audit logsEnterprise onlyBusiness plan and above
Build speed30-60s typical5-15s typical
Page load (TTFB)200-400msUnder 50ms globally

Performance

HolyDocs renders every page on Cloudflare's edge network. There is no origin server round-trip. Pages are pre-rendered to KV and served from the PoP nearest to the reader, resulting in sub-50ms TTFB worldwide compared to Mintlify's typical 200-400ms.

Automatic Migration

The fastest path is the CLI migration command. It converts your mint.json configuration, remaps components, and preserves your content structure.

bash
# Install HolyDocs CLInpm install -g holydocs# Run from your existing Mintlify project directoryholydocs migrate --from mintlify

The command performs the following:

  1. Reads your mint.json and converts it to docs.json
  2. Scans all MDX files for Mintlify-specific components and converts them
  3. Copies images and static assets with preserved paths
  4. Validates the converted project

Run holydocs migrate --from mintlify --dry-run first to preview all changes without modifying any files. The dry run shows exactly which files will be created, modified, or copied.

Dry Run Output

text
Migration Preview (Mintlify -> HolyDocs) Configuration: mint.json -> docs.json - 4 tabs, 12 groups, 56 pages Components converted: <Note> -> <Callout type="note"> (23 occurrences) <Warning> -> <Callout type="warning"> (8 occurrences) <Tip> -> <Callout type="tip"> (12 occurrences) Files: 56 MDX pages (3 modified) 42 images copied 1 configuration file created Run without --dry-run to apply changes.

Manual Migration

If you prefer to migrate manually or need fine-grained control, follow these steps.

1

Create docs.json from mint.json

Create a new docs.json file at the root of your docs directory. Use the field mapping table below to convert each section of your mint.json.

2

Convert MDX components

Find and replace Mintlify-specific callout components in your MDX files. Most other components are fully compatible and require no changes.

3

Update OpenAPI configuration

If you use OpenAPI specs, update the configuration key from openapi in mint.json to the openapi field in docs.json.

4

Validate and preview

Run holydocs check to validate your configuration and holydocs dev to preview locally before deploying.

Configuration Mapping: mint.json to docs.json

Every field in mint.json has a direct equivalent in docs.json. The table below covers the complete mapping.

Top-Level Fields

mint.jsondocs.jsonNotes
namenameDirect mapping
logologoSame structure: { "light": "...", "dark": "..." }
faviconfaviconDirect mapping
colors.primarycolors.primaryDirect mapping
colors.lightbackground.color.lightMoved under background.color
colors.darkbackground.color.darkMoved under background.color
colors.anchorscolors.accentRenamed
modeToggleappearancedefault and isHidden map to appearance.default and appearance.strict
topbarLinksnavbar.linksMigrated into the header nav
topbarCtaButtonnavbar.primaryMigrated into the primary header CTA
footerSocialsfooter.socialsMigrated into footer socials
feedback.thumbsRatingfeedback.enabledBoolean mapping
feedback.suggestEditfeedback.suggestEditDirect mapping
analytics.ga4analytics.googleAnalyticsRenamed
analytics.posthoganalytics.posthogDirect mapping
seoseoDirect mapping
apiapiSee API section below
mint.jsondocs.jsonNotes
navigation (array of groups)navigation.tabs[0].groupsWrapped in a default tab
tabsnavigation.tabsEach tab contains its own groups
anchorsnavigation.tabsAnchors become additional tabs
tabs[].namenavigation.tabs[].tabKey renamed from name to tab
navigation[].groupgroups[].groupDirect mapping
navigation[].pagesgroups[].pagesDirect mapping

In Mintlify, navigation is a flat array of groups. In HolyDocs, groups are nested under navigation.tabs. If your Mintlify project does not use tabs, the migration wraps all groups under a single default "Documentation" tab.

API Configuration

mint.jsondocs.jsonNotes
api.baseUrlapi.baseUrlDirect mapping
api.auth.methodapi.auth.typeRenamed: bearer, key, basic
api.auth.nameapi.auth.nameDirect mapping
openapiopenapiPath to OpenAPI spec file(s)
api.playground.modeapi.playground.enabled"hide" becomes false

Theme Configuration

mint.jsondocs.jsonNotes
layouttheme"sidenav" maps to any theme; "topnav" maps to "atlas" or "nova"
roundedTheme defaultHolyDocs themes have built-in border radius
font.headingstypography.headingsFont family configuration
font.bodytypography.bodyFont family configuration

Full Example

json
{ "name": "Acme API", "logo": { "light": "/logo/light.svg", "dark": "/logo/dark.svg" }, "favicon": "/favicon.svg", "colors": { "primary": "#6366F1", "light": "#F5F5F4", "dark": "#0A0A0A", "anchors": "#6366F1" }, "modeToggle": { "default": "dark", "isHidden": false }, "topbarLinks": [ { "name": "Dashboard", "url": "https://app.acme.com" } ], "topbarCtaButton": { "name": "Sign Up", "url": "https://app.acme.com/signup" }, "tabs": [ { "name": "API Reference", "url": "api-reference" } ], "navigation": [ { "group": "Getting Started", "pages": ["introduction", "quickstart", "authentication"] }, { "group": "Guides", "pages": ["guides/webhooks", "guides/pagination"] } ], "api": { "baseUrl": "https://api.acme.com", "auth": { "method": "bearer" } }, "openapi": "/openapi.json", "footerSocials": { "github": "https://github.com/acme", "twitter": "https://twitter.com/acme" }}

Component Mapping

Callout Components

Mintlify uses named components for callouts. HolyDocs uses a single Callout component with a type prop.

Mintlify ComponentHolyDocs Equivalent
<Note><Callout type="note">
<Warning><Callout type="warning">
<Tip><Callout type="tip">
<Info><Callout type="info">
<Check><Callout type="check">
mdx
<Note> This is a note in Mintlify.</Note><Warning> This is a warning in Mintlify.</Warning><Tip> A helpful tip in Mintlify.</Tip><Info> Additional information in Mintlify.</Info><Check> Task completed successfully in Mintlify.</Check>

Compatible Components

The following components are identical in both Mintlify and HolyDocs. No changes are needed.

ComponentPropsStatus
<Card>title, icon, hrefFully compatible
<CardGroup>colsFully compatible
<Tabs>Fully compatible
<Tab>titleFully compatible
<Steps>Fully compatible
<Step>titleFully compatible
<Accordion>titleFully compatible
<AccordionGroup>Fully compatible
<CodeGroup>Fully compatible
<Expandable>titleFully compatible

If your Mintlify project only uses compatible components (no <Note>, <Warning>, <Tip>, <Info>, or <Check>), your MDX files require zero modifications.

OpenAPI Migration

HolyDocs supports the same OpenAPI integration pattern as Mintlify. Your existing OpenAPI spec files work without modification.

1

Copy your OpenAPI spec

Place your openapi.json or openapi.yaml file in your docs directory, same as in Mintlify.

2

Update docs.json

Set the openapi field in docs.json to the path of your spec file:

json
{ "openapi": "/openapi.json"}
3

Reference endpoints in navigation

Add OpenAPI endpoint pages to your navigation groups. HolyDocs uses the same GET /endpoint format as Mintlify:

json
{ "group": "API Reference", "pages": [ "api-reference/overview", "api-reference/GET /users", "api-reference/POST /users", "api-reference/GET /users/{id}" ]}
4

API playground

The API playground is automatically enabled for OpenAPI endpoints. Readers can make live API calls directly from the documentation.

HolyDocs supports OpenAPI 3.0 and 3.1 specifications. Swagger 2.0 specs are automatically converted during the build.

Custom Domain Transfer

If you have a custom domain configured with Mintlify, you need to update your DNS records to point to HolyDocs.

1

Remove the Mintlify CNAME

In your DNS provider, delete the existing CNAME record that points to Mintlify's servers.

2

Add the HolyDocs CNAME

Create a new CNAME record pointing your documentation domain to proxy.holydocs.com:

TypeNameTarget
CNAMEdocsproxy.holydocs.com
3

Add the domain in HolyDocs

Go to Settings > Domains in your HolyDocs project dashboard and enter your custom domain.

4

Wait for SSL provisioning

HolyDocs automatically provisions an SSL certificate through Cloudflare. This takes 1-5 minutes after DNS verification.

DNS propagation can take up to 48 hours depending on your provider and TTL settings. During this window, some visitors may still be routed to Mintlify. Consider lowering your TTL to 300 seconds before starting the migration.

Verifying the Migration

After migration, run through this checklist to confirm everything works.

1

Validate configuration

bash
holydocs check

This checks your docs.json for errors, validates page references, and confirms all linked files exist.

2

Preview locally

bash
holydocs dev

Open http://localhost:3333 and navigate through your documentation. Check navigation structure, component rendering, and images.

3

Test search and AI

Deploy to HolyDocs and verify that search returns relevant results. If you have the AI assistant enabled, ask it a question that requires content from multiple pages.

4

Check OpenAPI endpoints

If you use OpenAPI, visit an endpoint page and confirm the playground works. Test a sample request.

5

Verify custom domain

If you transferred a custom domain, visit it in a browser and confirm HTTPS works and the correct content is served.

6

Deploy to production

bash
holydocs deploy

Common Issues and Fixes

This happens when a Mintlify-specific component was not converted. Search your MDX files for <Note>, <Warning>, <Tip>, <Info>, and <Check> tags and replace them with the corresponding <Callout type="..."> syntax. The automatic migration handles this, but manual migrations may miss some occurrences.

Mintlify uses a flat navigation array while HolyDocs nests groups under tabs. If you migrated manually, make sure your groups are nested inside navigation.tabs[].groups rather than at the top level. See the configuration mapping section above.

Ensure image paths in your MDX files match the actual file locations. HolyDocs uses the same relative path resolution as Mintlify — images referenced as /images/hero.png should be at images/hero.png relative to your docs root.

Verify the openapi path in docs.json matches the location of your spec file. The path should be relative to the docs root directory, and the file must be valid JSON or YAML.

Mintlify's custom.css file is not automatically migrated. Copy your custom styles to a custom.css file in your docs root and reference it in docs.json:

json
{ "customCss": "/custom.css"}

Mintlify's redirects field in mint.json maps directly to redirects in docs.json. If you migrated manually, copy the redirects array to your new config:

json
{ "redirects": [ { "source": "/old-path", "destination": "/new-path" } ]}

Check that api.auth.method was renamed to api.auth.type in your docs.json. The values (bearer, key, basic) remain the same.

Ask a question... ⌘I