1234567{ "navigation": { "tabs": [ { "tab": "Moodboard", "icon": "images", "imageboard": "./public/moodboard", "columns": 3 } ] } }
document.modelContext integration — tools from defineTool() are auto-registered on document.modelContext, the browser standard for AI agent tool discovery. Third-party tools already on the page are discovered automatically. New exports: unregisterTool(), getRegisteredTools(), registerToolOnModelContext(), getNativeModelContextTools().browser_highlight now stays visible until the user dismisses it. Lighter dim (15%), optional description card, and the tool returns immediately so the model keeps responding. Pre-action highlights use a quick glow ring with no dim.ChatWidget bubble is replaced by a fin.ai-style textarea pill (bottom-right desktop, bottom-center mobile). Expands on focus, morphs into the drawer via view transition. Widget now renders in light DOM (shadow DOM broke view transitions in Chrome). CSS scoped at build time via PostCSS under .holocron-chat.description field the model fills with a short summary. Chat UI shows that as the label. defineTool auto-injects it. Also fixes stream ordering where assistant text rendered below the tool call.needsApproval (boolean or function) shows Approve/Deny before executing. Browser tools auto-require approval for elements with data-holocron-requires-approval. Browser tools gained a description input for readable approval messages.createShader/createProgram throw controlled errors, init failures caught gracefully, framebuffer texture probed with fallback chain.getServerSnapshot should be cached React warning in useChatWidget().holocron diagrams fix now correctly detects boxes with cross junctions (┼, ╬, ╋, ╪, ╫) on borders, mixed single/double corners (╒, ╓, ╕, ╖, ╘, ╙, ╛, ╜), and mixed junctions (╤, ╥, ╧, ╨, ╞, ╟, ╡, ╢). Previously these characters broke border scanning and prevented box detection entirely.fixDiagramLines now trims trailing spaces left by the splice logic when padding adjustments leave no real suffix content.```diagram are left untouched during fixing.above section (hero content) no longer get 36px of dead space between the header and the hero. The pt-(--layout-gap) padding is now conditionally applied only when there is no above content.sitemap.xml now follow the same order as the sidebar, llms.txt, and llms-full.txt instead of being alphabetically sorted.mode: "custom" in frontmatter now strips the editorial grid entirely, giving full control over the page content area. Only navbar, tab bar, banner, footer, mobile nav, and AI assistant are rendered. Useful for landing pages, pricing pages, or any page where you want to own the entire layout.1234--- mode: "custom" maxWidth: 700 ---
maxWidth frontmatter field constrains the content container width (in pixels). The navbar still spans full width; only the content area is narrowed.<!-- comments --> in MDX files are now stripped before parsing so they don't cause JSX parse errors. Supports all edge cases: indented code fences, inline code spans, JSX tag attributes, expressions with > operator, tilde fences, and unterminated comments./<slug>.md redirect for AI coding agents now triggers only on Accept: text/markdown instead of User-Agent pattern matching. This eliminates false positives for SEO crawlers (Googlebot, AhrefsBot) that were getting 302 redirected. Raw markdown URLs now include x-robots-tag: noindex, nofollow to prevent search engines from indexing duplicate content.holocron diagrams fix now detects characters like ▶, ◀, ▲, ▼, ★, ●, ■ that have Unicode East Asian Width "Ambiguous". These render as 1 cell on macOS/Linux but 2 cells on many Windows monospaced fonts (Consolas, Lucida Console), breaking diagram alignment. The fixer auto-replaces 18 known-ambiguous characters with safe ASCII equivalents (▶ → >, ▼ → v, ● → *, etc.) as a first pass before box detection.--check mode also warns about unreplaceable ambiguous characters that need manual intervention.12import { outrank } from '@holocron.so/outrank' export default outrank({ apiKey: process.env.OUTRANK_API_KEY! })
1{ "tab": "Blog", "provider": "./providers/blog.ts", "base": "blog" }
holocron diagrams fix command — detects and fixes misaligned Unicode box-drawing characters in markdown files. The top border is the source of truth for box width; content lines and bottom borders are adjusted to match.1holocron diagrams fix docs/**/*.md
docs.json can now reference a provider file that generates navigation groups and MDX pages at request time. The provider result is cached with configurable TTL and promise coalescing prevents thundering herd on concurrent requests.12345{ "tab": "Blog", "provider": "./providers/blog.ts", "base": "blog" }
CustomTabProvider object:12345678910111213141516171819import type { CustomTabProvider } from '@holocron.so/vite' const provider: CustomTabProvider = { name: 'my-blog', static: false, ttlMs: 60_000, async generate({ tab }) { const articles = await fetchArticles() return { groups: [{ group: 'Posts', pages: articles.map(a => `blog/${a.slug}`) }], mdxContent: Object.fromEntries( articles.map(a => [`blog/${a.slug}`, `---\ntitle: "${a.title}"\n---\n\n${a.body}`]) ), } }, } export default provider
static: true to run the provider at build time instead.HOLOCRON_SKIP_BUILD_ERRORS=true to bypass./llms-full.txt route — every site now serves /llms-full.txt alongside /llms.txt. Concatenates all documentation pages in docs.json navigation order.iconColor support — icons in page frontmatter, tabs, groups, anchors, navbar links, dropdowns, and products now accept an iconColor field. Named colors (green, blue, red, purple, orange, yellow, pink) adapt to dark mode. Sidebar icons are desaturated 30% and go full saturation on hover/active.docs.json are validated at build time. Typos in destination paths are caught alongside broken internal links.docs.json is validated against the schema at build/dev startup.+ no longer produce mismatched IDs between DOM and navigation/TOC links.docs.mycompany.com) at your Holocron-deployed docs site. Cloudflare SSL for SaaS handles certificate provisioning automatically. Custom domains require a Pro subscription.1234567891011# Add a custom domain holocron domain add --project <projectId> --hostname docs.mycompany.com # List domains holocron domain list --project <projectId> # Check DNS/SSL status holocron domain status --project <projectId> # Remove a domain holocron domain remove --project <projectId> --hostname docs.mycompany.com
cname.holocron.so. SSL certificates are provisioned automatically once DNS is configured. The hosting worker activates the mapping only when both hostname and SSL validation are complete, preventing domain front-running.@holocron.so/vite/chat. It renders inside a shadow DOM host so styles don't leak in or out. Supports a theme prop ('light' | 'dark' | 'auto'), a zustand-based useChatWidget() hook for programmatic control, and works outside of holocron sites as a standalone component.<Image>, <img>, <video>, <audio>, <source>, poster attributes, and frontmatter og:image/twitter:image paths. Remote image fetches now have a 5-second timeout to prevent builds from hanging.generateHolocronData for multi-tenant pipelines — new export for building holocron data programmatically outside the Vite plugin, useful for multi-tenant hosting platforms that serve many doc sites from a single deployment.og:image and twitter:image URLs to absolute — social crawlers (Twitter, Discord, Slack, LinkedIn) require absolute URLs. Relative paths like /images/my-og.png in frontmatter are now resolved against the request origin automatically. Frontmatter image paths also go through the image pipeline for cache-busted hashing.<p> from native JSX headings in MDX — multi-line <h1>, <h2>, etc. in MDX no longer get wrapped in an editorial-prose div. Both single-line and multi-line JSX headings now produce identical clean output.VideoBackgroundShader compositing — premultiplied shader color output before WebGL canvas compositing so low-opacity dots and ASCII glyphs fade correctly in Safari.api/users vs api--users) no longer collide. Chunk filenames now include a short hash suffix.holocron subscribe command — subscribe a project to Holocron Pro directly from the CLI. Opens Stripe Checkout in the browser. Prompts interactively for project and billing interval when flags are omitted:12345# Interactive mode holocron subscribe # Non-interactive holocron subscribe --project <projectId> --interval yearly
holocron subscription status command — check the current subscription state for a project. Works with both session auth and API key auth (HOLOCRON_KEY):1holocron subscription status --project <projectId>
--base-path flag for holocron deploy — deploy your docs at a subpath on your own domain instead of a separate subdomain:1npx -y @holocron.so/cli deploy --base-path /docs
base option at build time so all routes and assets are prefixed under the given path. Configure a rewrite or reverse proxy in your framework to forward /docs/* requests to the deployed holocron.so URL. Requires a Holocron Pro subscription.holocron login from AI agent contexts — removed the isAgent guard that blocked login inside agent terminals. The device flow only needs a browser, not interactive stdin.dotenv dependency — the CLI gets HOLOCRON_KEY from CI env vars or sigillo, not .env files, so dotenv was unnecessary.<meta name="description"> from page body text — pages without an explicit description in YAML frontmatter now get a meta description extracted from the first paragraphs of the MDX content, truncated at ~160 characters on a word boundary. Headings, code blocks, and JSX elements are skipped. Frontmatter description always takes precedence.[guide](./getting-started) are now resolved to absolute paths during the build so they work correctly regardless of the page's nesting depth. The .md and .mdx extensions are stripped automatically.--base-path /docs, the Vite plugin reads HOLOCRON_BASE_PATH at build time and injects it as Vite's base config, so all routes and assets get the subpath prefix without touching the user's vite.config.ts.VideoBackgroundShader crash from culled texelSize uniform — on GPUs that strip inactive uniforms during shader linking, the splat program threw "Unknown uniform: texelSize". The splat program is now excluded from the texelSize setup loop since its fragment shader never uses it. Thanks @skeptrunedev for #99!.mdx partial contained both an exported string constant and an import with the same relative path, only the actual import source is rewritten now.Link with the holocron wrapper in components that were still using it, preventing broken links when the Vite base path collides with a page slug prefix.12345{ "tab": "MCP", "mcp": "mcp-tools.json", "base": "mcp" }
"..." rest expansion to interleave custom MDX pages with auto-generated ones, same as OpenAPI tabs.initialContent field — prepend custom MDX content above auto-generated release entries in changelog tabs:12345{ "tab": "Changelog", "changelog": "https://github.com/owner/repo", "initialContent": "changelog/intro" }
.md imports, so relative image paths and links resolve correctly..yaml or .json OpenAPI spec now triggers an automatic re-sync so API reference pages update without restarting the dev server.<VideoBackgroundShader>. Supports dotStyle="ascii" for an ASCII character atlas effect, configurable dot size, color, and fade gradients.<Li> elements are properly spaced.<Tabs> no longer show the panel title twice.syncNavigation calls during rapid file saves are serialized, preventing interleaved state corruption.full mode when the page has no other asides.pagesDir (e.g., a repo-root README.md) is imported into a page and contains relative links back to pages, those links are now correctly resolved to absolute slug paths instead of raw filesystem-relative paths.README.md at the repo root imported via import Readme from '../../README.md' that contains [OpenAPI](./website/src/openapi.md) now resolves to /openapi instead of the unresolvable ../../website/src/openapi. Hash fragments and query strings are preserved.motion as optional dependency — motion was accidentally removed in 0.18.0. Added it back so user projects that depend on it don't break on install.12▲ holocron found 3 invalid internal links across 2 pages. ▲ holocron 2 pages with MDX errors. Fix the syntax issues listed above.
knownPaths.HOLOCRON_TOKEN accepted as env var alias for HOLOCRON_KEY — the Vite plugin, deploy command, and AI chat auth now check both HOLOCRON_TOKEN and HOLOCRON_KEY (first defined wins). Useful when your CI already has a HOLOCRON_TOKEN secret.render-openapi.tsx was incorrectly marked 'use client', pulling safe-mdx and its transitive chain into the client bundle. The format package (CJS-only) caused:1The requested module "format/format.js" does not provide an export named "default"
'use client' directive so the OpenAPI renderer stays server-side.@fastify/deepmerge, image-size, and motion from the package.HOLOCRON_TOKEN accepted as env var alias for HOLOCRON_KEY — deploy and all API commands now check both HOLOCRON_TOKEN and HOLOCRON_KEY (first defined wins). Useful when your CI already has a HOLOCRON_TOKEN secret and you don't want to rename it.RequestExample and ResponseExample wrapped them in a CodeGroup inside a CodeCard, producing a double frame. Now they render as a single tabbed panel with each example as a named tab.@holocron.so/vite/app outside the holocron Vite plugin (e.g. inside a @cloudflare/vitest-pool-workers test running in workerd) crashed with Cannot find module './styles/globals.css'. The import now resolves from the package src/ directory which is stable from both src/ and dist/.changelog URL and Holocron fetches the repository's published releases at build time, rendering one page with a Mintlify-compatible <Update> entry per release (newest first, drafts skipped):1234{ "tab": "Changelog", "changelog": "https://github.com/owner/repo" }
mode: center (left nav hidden) with a right-side notice explaining it's generated from GitHub releases. Release notes are Markdown and are safely escaped so a release body can never break the page. Set a GITHUB_TOKEN / GH_TOKEN to avoid rate limits; the token is only ever sent to api.github.com. Transient GitHub outages render a warning page instead of failing the build.mode: center) — hide the left navigation sidebar per-page, matching Mintlify's mode layout control:1234--- title: Landing mode: center ---
default / wide / frame keep the left nav; center / custom hide it and center the content. All five names are accepted so existing Mintlify frontmatter works unchanged.rendering: static — opt a page into build-time prerendering. Static pages render to HTML + RSC data at build for faster delivery and cheaper hosting. Use it for pages whose content never depends on the incoming request:1234--- title: Overview rendering: static ---
ssr, which renders on every request so pages can react to per-request data like cookies.examples map), Holocron renders all of them as a tabbed code group instead of showing only the first. Example names become the tab labels:123456789responses: '201': content: application/json: examples: Confirmed order: value: { id: 'order-001', status: 'pending' } Empty order: value: { id: 'order-002', items: [] }
description fields (Markdown by spec) now render as formatted HTML — headings, lists, inline code, links, emphasis, code blocks — everywhere they appear: endpoint summary, parameters, schema properties, request bodies, and responses. The page <meta> description is still flattened to clean plain text. (Closes #96)/index paths resolve to their canonical href — the */index forms now 308-redirect to the canonical href at runtime (query strings preserved) and count as valid targets for broken-link detection, so links to /guide/index no longer 404 or get flagged as broken.@holocron.so/vite/prism export — reuse Holocron's vendored Prism bundle (prismjs core + ~300 grammars in one ESM module) to highlight code outside MDX, without shipping a duplicate bundle:123import { Prism } from '@holocron.so/vite/prism' const html = Prism.highlight(code, Prism.languages[lang], lang)
bleed prop on CodeBlock accepts 'both' | 'right' | 'none' — control how a code block bleeds into the page margins. 'both' (or true) bleeds both sides, 'right' only the right margin, 'none' (or false) stays inside the parent.base slug prefix accepts a leading slash — the base field on OpenAPI and Changelog tabs is a slug prefix, so a leading slash is now allowed and ignored ("/docs/api" behaves like "docs/api"); trailing slashes are trimmed. The field was renamed from openapiBase to base and is now shared across virtual-tab providers.<Above> hero spans the full grid width including the side rails.globals.css edits — editing Holocron's global stylesheet hot-reloads without a full page refresh.SUBSCRIPTION_REQUIRED error. The CLI now surfaces the server's actionable message plus the upgrade URL instead of a generic Failed to create deployment:123npx -y @holocron.so/cli deploy # A Holocron Pro subscription is required for this deployment. # Subscribe to continue: https://holocron.so/...
login — when a saved session token is expired or invalid, the CLI now tells you to run the login command again instead of failing with a confusing error.@holocron.so/vite/mdx export — import Holocron MDX components in your own .tsx files:1import { Card, CardGroup, Callout, Steps, Step } from '@holocron.so/vite/mdx'
width or height on <Image> or <img> in MDX, those values are now preserved instead of being overridden with the natural image size. When only one dimension is provided, the other is computed proportionally from the aspect ratio.<Marquee>, card grids, and other flex layouts now use a definite pixel width capped at 100% instead of width: 100%, which caused circular sizing dependencies in flex items./holocron-api/ namespace — avoids collisions with user API routes.d to toggle dark mode — press d anywhere on the page to switch between light and dark mode. Skips when focus is in an input, textarea, or contenteditable, and ignores modifier combos (Cmd+D, Ctrl+D, etc.)<blockquote> for plain MDX — standard markdown > quoted text now renders with a left border accent and italic muted text. GitHub-style callouts (> [!NOTE], etc.) still render as Callout components--type-nav-group-size CSS variable — controls font-size of sidebar group titles. Override it to customize sidebar typography:123:root { --type-nav-group-size: 14px; }
caches.open() could throw in hosted environments where Cache API is unavailable, causing a 500. Now falls back to direct fetchpreventDefault() no longer accidentally trigger the dark mode toggleaddNoExternal for @holocron.so/vite now runs in all Vite environments (client, ssr, rsc)@holocron.so/vite and not hoisted in strict pnpm. Virtual modules like virtual:app-entry can't resolve bare spiceflow imports because they have no filesystem location. A resolveId hook now resolves spiceflow from holocron's own source directory.@holocron.so/vite/src/* resolveId hook that was only needed when spiceflow was a workspace dependency.resolveId hooks for spiceflow and @holocron.so/vite/src/* that were only needed when spiceflow was a workspace dependency. Vite's default resolution now handles everything correctly, fixing transitive dep resolution in strict pnpm workspaces.import type ensures it only loads when the config panel is opened.whoami command with multi-org support — holocron whoami now shows your user info, all organizations with IDs and roles, and projects grouped per org:1npx -y @holocron.so/cli whoami
holocron projects create accepts --org [orgId] to target a specific organization. When you belong to multiple orgs and no --org is passed, an interactive picker appears.integrations field in docs.json injects client-side analytics scripts. Supports Fathom, Plausible, Pirsch, GA4, GTM, PostHog, Mixpanel, Hotjar, Heap, Segment, Clarity, Amplitude, LogRocket, and Clearbit:1234567{ "integrations": { "ga4": { "measurementId": "G-XXXXXXXXXX" }, "plausible": { "domain": "docs.example.com" }, "fathom": { "siteId": "ABCDEF" } } }
<Marquee> MDX component — infinite scrolling content strip, available directly in MDX without imports. Supports horizontal and vertical directions, fade edges, configurable speed, and hover deceleration:1234<Marquee duration={30} fade slowOnHover> <img src="/logos/github.svg" /> <img src="/logos/vercel.svg" /> </Marquee>
logo.text config field — display a site name next to the logo in the navbar:1{ "logo": { "light": "/favicon.svg", "text": "My Docs" } }
layout (maxWidth, sidebarWidth, columnGap, radius) and fonts (fontSize, heading.fontSize) fields for customizing page geometry and font sizes without custom CSS.--radius, customizable via layout.radius.sidebarTitle frontmatter — use a long title for SEO while keeping the sidebar label short.--key option for holocron create — pass an existing API key to skip the entire cloud setup flow (no device flow login, no project creation, no API key creation). The key is written directly to .env:1npx -y @holocron.so/cli create my-docs --key holo_xxxxxxxxxxxx
placement field that controls where they render. "sidebar" (the new default) places anchors at the top of the left navigation sidebar with icon and label. "tabs" places them in the header tab bar, preserving the previous behavior. You can mix both placements in the same config:12345678{ "navbar": { "links": [ { "label": "GitHub", "url": "https://github.com/...", "placement": "sidebar" }, { "label": "Changelog", "url": "/changelog", "placement": "tabs" } ] } }
.md/.mdx extensions stripped from internal links — links like [guide](/getting-started.md) are now automatically rewritten to /getting-started at build time. Previously these links were excluded from broken-link validation and would serve raw markdown or 404. Reference-style links and JSX href attributes are also handled.<script> now reads the holocron-theme cookie before first paint, preventing the theme from flashing or resetting during RSC streaming.vite build now removes old client/, rsc/, ssr/ directories from dist/ before building, preventing stale artifacts from leaking into fresh builds. Cache files are preserved for incremental builds.12345678```ts title="vite.config.ts" highlight="3-5" lines=false bleed=true import \{ defineConfig \} from 'vite' import holocron from '@holocron.so/vite' export default defineConfig(\{ plugins: [holocron()], \}) ```
title="..." or bare words → filename/label header above the code blockhighlight="1-3,7" → dims non-highlighted lines with a background overlaylines=false → hides line numbers (on by default)bleed=true → extends the code block into page margins0.875em. Background pill is hidden, color uses full-contrast var(--foreground) to match heading text. H2 headings also get a decorative divider line (previously h1 only).var(--primary) instead of hardcoded green values, so they automatically match the site color theme.diagram, ascii, box) use line-height: 1.3 instead of 1.6, improving vertical alignment of box-drawing characters and connected lines..inline-code now uses var(--foreground) in both light and dark mode instead of hardcoded rgba() values, so it adapts to custom themes..md/.mdx imports at remark level — imported markdown files are now spliced directly into the page's mdast tree before any remark plugins run. Headings from imported files appear in the TOC automatically, images go through the normal build-time processor, and all remark plugins (callouts, code groups, mermaid, etc.) apply to the inlined content. Recursive imports are supported with cycle detection. Each imported file is parsed exactly once and the mdast is reused for import extraction, image dep collection, and pre-building spliced nodes. Pages without .md imports skip the full AST parse entirely via a regex fast path.knownPaths config field — suppress false broken-link warnings when mounting docs alongside other routes (API endpoints, dashboards, external apps). Supports exact paths and prefix wildcards:123{ "knownPaths": ["/api/*", "/dashboard", "/blog/*"] }
.md/.mdx files included in AI chat context — imported markdown snippets and shared fragments are now sent to the AI chat agent during local dev, matching production behavior where they were already included via docs.zip.--grid-content-width is now wrapped in min(720px, ...) so it never grows beyond 720px regardless of grid geometry.scroll-margin-top now uses --sticky-top instead of --header-height, adding breathing room below the navbar when navigating to #id anchors.wrangler dev. The Spiceflow RSC entry now uses the real custom entry file instead of routing through a virtual module, so vite-rsc can walk the import graph and collect all CSS dependencies.react-server export map fallback, so Holocron no longer needs to carry private path aliases for safe-mdx, safe-mdx/parse, and safe-mdx/client.workspace:^ references unresolved in the published package.json.wrangler dev. The Spiceflow RSC entry now uses the real custom entry file instead of routing through a virtual module, so vite-rsc can walk the import graph and collect all CSS dependencies.react-server export map fallback, so Holocron no longer needs to carry private path aliases for safe-mdx, safe-mdx/parse, and safe-mdx/client..md/.mdx files — imported markdown files (e.g. import Guide from "./snippets/guide.md") now go through the same build pipeline as regular pages: all remark plugins (GitHub callouts, code groups, etc.), image resolution (dimensions, placeholders, copy to public), and normalization. Previously these were loaded as raw strings and parsed at render time without any processing..md/.mdx files now show up in the left sidebar table of contents in correct document order. Previously imported components were opaque JSX nodes, so their headings were invisible to the TOC./foo), relative (./foo, ../bar), hash fragments, and query strings..mdx URLs — pages were already served as raw markdown at /<slug>.md for AI agents. Now .mdx URLs work identically, returning the same content with text/markdown content-type./docs.zip — the /docs.zip endpoint now includes imported markdown files (snippets, shared fragments, files outside pagesDir) alongside navigation pages.pnpm install resolves it automatically./.md (404) on the root page instead of /index.md.isExternalHref used new URL() origin comparison that produced different results on server vs client for relative paths. Replaced with a consistent regex.<div> wrapper.docs.json colors and styles now hot-reloads correctly without stale CSS artifacts.$schema URL in scaffolded projects — holocron create now writes "$schema": "https://holocron.so/docs.json" instead of the old unpkg URL that depended on npm publish timing and internal file paths.frontmatter-schema.json is generated alongside the config schema, describing all supported MDX frontmatter fields (title, description, icon, SEO meta, hidden, etc.). Add $schema: "https://holocron.so/frontmatter.json" to your MDX frontmatter for IDE autocomplete and validation.docs.json — the config JSON schema now references external enum schemas for lucide and Font Awesome icon names. IDEs that support $ref resolution fetch icon name lists on demand from holocron.so, giving you autocomplete for all 4,000+ supported icon names.cn() utility (clsx + tailwind-merge) — all components now use a shared cn() following the shadcn convention. This fixes a bug where passing className to <Logo> would completely replace the base sizing classes instead of merging with them. All components with className props now merge correctly via tailwind-merge.text prop on <Logo /> — pass <Logo text="My Docs" /> to render an AI-generated logo using that text, bypassing the site config logo entirely.muted-foreground for a cleaner active state.@holocron.so/vite, avoiding duplicate framework versions at runtime.<Logo /> MDX component — render the configured site logo directly inside docs content. It uses the same resolved light, dark, and generated logo variants as the navbar and footer.1<Logo />
pagesDir as a Tailwind source, so utility classes used in MDX content and imported docs components are included in the generated CSS.@fontsource-variable/jetbrains-mono, avoiding a third-party font request for the default monospace font.jsonc code blocks now reuse Prism's JSON grammar instead of rendering without highlighting.docs.jsonc — holocron create generates the starter config as JSONC, so new projects can keep comments and trailing commas in the same config file Holocron reads by default.1npx -y @holocron.so/cli create my-docs
overflow-x-hidden on chat text containers silently triggered vertical scrollbars due to CSS spec behavior. Content now grows naturally without nested scroll regions.--primary when colors.light is not set — if you only configure colors.primary without an explicit colors.light, the dark mode accent was identical to light mode, making links unreadable on dark backgrounds. Now auto-generates a lighter variant via color-mix(in oklch, <primary> 40%, white), roughly matching Tailwind's 200-scale lightness. If you explicitly set colors.light, your value is still used as-is.@cloudflare/vite-plugin was loaded via async import(), leaving an unresolved Promise in the plugins array. Spiceflow couldn't detect it, so noExternal: true was never set for SSR/RSC environments. Bare npm imports like isbot and history stayed external, crashing Dynamic Workers at runtime. The plugin is now imported synchronously and placed before spiceflow in the plugin array..slot-main img { height: auto !important } rule was overriding the explicit height: 100% set by the Image component for pixelated placeholder overlays. The global rule has been removed; height: auto and max-width: 100% are now applied only on specific image paths that need them.py-1.5 to py-1.dist/.holocron — when HOLOCRON_DEPLOY=1 is set, the Vite plugin now sets build.outDir to dist/.holocron instead of dist/, keeping deploy artifacts separate from normal platform-specific builds.holocron deploy now writes to dist/.holocron instead of dist/, keeping deploy artifacts isolated from platform-specific Vite builds (Cloudflare vs Node.js)--skip-build flag — builds always run during deploy. The separate output dir makes the flag unnecessaryholocron deploy now supports GitHub Actions OIDC authentication natively. No HOLOCRON_KEY secret needed; just set permissions: id-token: write in your workflow:123456permissions: id-token: write contents: read steps: - uses: actions/checkout@v4 - run: npx holocron deploy
spiceflow as a direct dependency — holocron create generates a leaner package.json. Spiceflow is a transitive dependency of @holocron.so/vite so users don't need to install it separately.holocron login, or GitHub Actions OIDC) instead of only the first two.@cloudflare/vite-plugin is now a direct dependency — users deploying to Cloudflare Workers no longer need to install it separately. It ships as a transitive dep of @holocron.so/vite.pagesDir is set — specs inside a custom pagesDir (e.g. pagesDir: "./src" with api.yaml in src/) now resolve correctly. Previously only the project root was probed, causing "OpenAPI spec not found" errors. The error message now lists all probed locations when neither has the file..env write path has been moved to the CLI deploy command. The Vite plugin no longer writes HOLOCRON_KEY or HOLOCRON_BRANCH to .env during build. Deploy authentication is now fully handled by holocron deploy.>=1.25.1-rsc.0 — fixes deploy failures where the SSR entry wasn't nested inside the RSC output directory, causing "deployment must include worker/ssr/index.js" errors.@fontsource-variable/inter instead of loading from third-party CDNs (rsms.me, Google Fonts). No external font requests on default config. Google Fonts preconnect tags only appear when you explicitly configure a custom Google font.permissions: id-token: write is set, the Vite plugin automatically mints a GitHub OIDC token and registers the deployment without any secret configuration:12345# No HOLOCRON_KEY secret needed permissions: id-token: write steps: - run: npx holocron deploy
#prism conditional import. SSR/RSC get a noop stub, then the client adds highlighting during hydration. Reduces SSR bundle by ~500KB and avoids the CJS global crash in Dynamic Workers.holocron-stable chunk in the RSC build. The entry chunk shrinks to ~20KB of virtual modules, while the stable chunk stays content-addressable across deploys for maximum KV dedup.listen() guard moved to renderChunk — the auto-start listen() call is now appended to the final RSC entry chunk after bundling, keeping import.meta.url correct even when code splitting moves framework code into dependency chunks.createRequire fix — createRequire(import.meta.url) calls in bundled CJS helpers are replaced at build time when HOLOCRON_DEPLOY=1, preventing module evaluation crashes in Dynamic Workers.HOLOCRON_DEPLOY=1 is set (by holocron deploy), @cloudflare/vite-plugin is auto-injected. Users don't need it in their vite.config.ts.### `config` now appear correctly in the sidebar and table of contents instead of showing as empty entries.app and default.yaml browser entry alias — the yaml package is aliased to its browser entry at build time, fixing resolution issues in the browser bundle.@cloudflare/vite-plugin optional peer dependency — added as optional so pnpm install doesn't warn when deploying to non-Cloudflare targets.holocron deploy command — build and deploy your docs site to holocron.so with a single command. Content-addressable uploads skip unchanged files across deploys:1holocron deploy
--branch flagholocron_url and holocron_deployment_id as GitHub Actions step outputsdocs.json and syncs it server-side--skip-build to deploy an existing dist/HOLOCRON_KEY env var or holocron login session123holocron login # logs into holocron.so holocron --api-url https://preview.holocron.so login # separate session holocron whoami # shows current server's user
--api-url flag — all commands now respect a top-level --api-url option instead of per-command -u/--url flags.create command UX — reuses existing login session instead of re-authenticating, appends -docs to the generated folder name, and skips the "start dev server?" prompt when dependencies weren't installed.holocron login fails fast with a clear message in non-interactive environments instead of hanging on stdin.decorativeLines in your config to "none", "lines", "dashed", or "lines-with-dots" (default):1{ "decorativeLines": "dashed" }
cache-control in page frontmatter to control HTTP caching headers per page:1234--- title: My Page cache-control: public, max-age=3600 ---
?raw imports in MDX modules — MDX files can now import raw text content from other files using Vite's ?raw query suffix.docs.jsonc config discovery — Holocron discovers config files in Mintlify-first order: docs.json, docs.jsonc, then holocron.jsonc. JSONC comments and trailing commas work without renaming your Mintlify config.holocron CLI bundled with vite package — installing @holocron.so/vite now also provides the holocron CLI command. No separate @holocron.so/cli install needed.HOLOCRON_KEY — deployment registration now only needs HOLOCRON_KEY (removed HOLOCRON_PROJECT). The project is resolved from the key server-side.listen() with import.meta.main — the built dist/rsc/index.js can now be imported by another framework (e.g. Next.js catch-all route) without starting a second server..sidebar-animate CSS class.@holocron.so/vite now exports config types and the JSON schema for programmatic config validation.0.21 to 0.16 oklch lightness for better contrast.holocron create command — scaffold a new docs project from a starter template with interactive setup. Optionally connects to holocron.so for AI chat and analytics:1holocron create my-docs --name "My Docs"
docs.json, MDX pages, vite.config.ts, and .env with your API key.projects list and projects create commands — manage projects for your org:12holocron projects create --name "My Docs" holocron projects list
HOLOCRON_PROJECT is no longer needed. Just set HOLOCRON_KEY:1holocron keys create --name production --project <projectId>
HOLOCRON_API_KEY to HOLOCRON_KEY — shorter env var name. Update your .env and CI secrets.docs.jsonc config support — the scaffold now outputs docs.json with a $schema URL pointing to the published npm package for IDE autocomplete.1234/.well-known/agent-skills/index.json /.well-known/agent-skills/{name}/SKILL.md /.well-known/skills/index.json /.well-known/skills/{name}/SKILL.md
/sitemap.xml, raw .md page URLs, and /docs.zip. Base-path deployments use relative URLs, and AI-user-agent redirects skip the well-known routes so JSON discovery stays machine-readable./llms.txt: every docs site now exposes a standard agent entry point that links to /docs.zip first, then individual raw markdown pages:1https://docs.example.com/llms.txt
.mdx and .md snippets, including files outside the docs root, and Holocron resolves them through the same safe-mdx rendering pipeline as normal pages:12345import Intro from './snippets/intro.mdx' import Readme from '../../README.md' <Intro /> <Readme />
<Visibility>: docs can render content only for humans or only for agent-facing markdown output:1234567<Visibility for="humans"> This appears on the website. </Visibility> <Visibility for="agents"> This appears in `.md` routes and docs.zip. </Visibility>
<details> support: copied docs that use native HTML details/summary blocks are normalized into Holocron's existing Expandable component.> [!NOTE], > [!TIP], and > [!WARNING] now render as Holocron callouts.Link where appropriate.mdx fences now reuse Prism's Markdown grammar so nested fenced code blocks inside MDX examples get syntax highlighting."openapi": "spec.yaml" to any navigation tab and Holocron processes the spec at build time, extracts all operations grouped by tag, and generates virtual pages with full endpoint documentation:12345678{ "navigation": { "tabs": [ { "tab": "Docs", "pages": ["index"] }, { "tab": "API Reference", "openapi": "openapi.yaml" } ] } }
openapiBase slug prefix — control the URL prefix for generated OpenAPI pages (defaults to "api"). Set to "" for no prefix:1{ "tab": "API", "openapi": "spec.yaml", "openapiBase": "reference" }
title but no H1 in the body get a heading injected automatically.text-sm instead of text-xs.bg-accent for cleaner tab panels.@tailwindcss/vite and tailwindcss as dependencies — were incorrectly in devDependencies causing missing styles in production.assistant.enabled config field to disable the AI chat widget.lucide:icon-name syntax to keep using Lucide icons.--prose-gap token.<Hero> → <Above> — update your MDX files if you use Hero directly.<Above> — components in this section now render correctly.<p> element.@types/node dependency.scrollbar-gutter: stable prevents layout shift.login, logout, whoami commands — authenticate with holocron.so via BetterAuth device flow. The CLI opens your browser, you approve, and the session token is saved locally:123holocron login holocron whoami holocron logout
keys create, keys list, keys delete commands — manage API keys for deploying docs sites. Keys are scoped to your org and can authenticate the hosted AI proxy via HOLOCRON_API_KEY:123holocron keys create --name production holocron keys list holocron keys delete <keyId>
spiceflow/client with types auto-derived from the website routes and safe error handling via errore patterns.docs.json (or holocron.jsonc) for navigation, tabs, groups, anchors, redirects, footer, banner, fonts, colors, SEO metadata, and favicon. Renders MDX pages with editorial typography, code blocks (Prism with all languages), callouts, tables, accordions, expandable fields, cards, steps, frames, panels, badges, tooltips, and more.navigation.tabs for switching sidebar content, navigation.versions for a version selector dropdown, and navigation.dropdowns (or navigation.products) for product-scoped navigation. Each switcher owns its own inner tab/group tree.123import { createHolocronApp } from '@holocron.so/vite/app' const holocronApp = await createHolocronApp() const app = new Spiceflow().use(holocronApp)
docs.json all hot-reload without a full page refresh./<page>.md URLs, redirects AI user-agents to .md endpoints, exposes /sitemap.xml with .md hints, and bundles all docs as /docs.zip.currentColor. Supports emoji, URL, and structured { name, library } icon objects.react-medium-image-zoom.@layer holocron — all styles wrapped in a CSS layer. Uses shadcn v2 CSS variable convention for full theme customization.:id), trailing wildcards (*). Query strings preserved. 301 status./docs.virtual:holocron-config and virtual:holocron-pages for programmatic control.<Aside> scoped to its section, <Aside full> spans multiple sections. RequestExample/ResponseExample auto-widen the sidebar.noindex meta.