> Agent-readable docs index: /llms.txt. Download /docs.zip to grep all markdown files locally.

---
title: "Changelog"
description: "Release notes for Changelog."
mode: "center"
---

import _ChangelogIntro from './changelog/intro.mdx'

<Aside full>
  <Note>
    This changelog is generated automatically from the [GitHub releases](https://github.com/remorses/holocron/releases) page.
  </Note>
</Aside>

import { HeroSection } from '../components/hero-section.tsx'

<Above>
  <HeroSection />
</Above>

What's new in Holocron. All releases are published on [GitHub](https://github.com/remorses/holocron/releases).

<Update id={"@holocron.so/vite@0.21.0"} label={"Jun 15, 2026"}>
  ## @holocron.so/vite\@0.21.0

  1. **Standalone ChatWidget with shadow DOM isolation** — the AI chat component is now available as a drop-in widget via `@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.

  2. **GitHub star count in navbar and footer** — links pointing to GitHub repos now automatically show the star count (e.g. "3.6k stars"). Stars are fetched server-side with a 3-layer cache (in-memory 1h, Cloudflare Cache API 1h, GitHub API fallback) and streamed to the client via RSC so the page renders instantly without blocking.

  3. **Broken asset detection at build time** — local image, video, and audio references in MDX are validated during the build. Missing files produce warnings with page source and line number. Covers markdown images, JSX `<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.

  4. **`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.

  5. **Deferred virtual tab providers in dev** — OpenAPI, changelog, and MCP providers now run in the background instead of blocking dev server startup. Doc pages are available immediately; provider-generated pages appear a moment later. Build mode is unchanged.

  6. **Resolve relative `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.

  7. **Footer layout improvements** — sites with 2 or fewer link columns now render them inline with the logo on the same row. Sites with 3+ columns center the logo above. Footer group titles are smaller and more refined.

  8. **Tooltips on navbar and footer icons** — icon-only navbar links and footer social icons now show a tooltip on hover with the link label or platform name.

  9. **Auto-unwrap `<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.

  10. **Fixed Safari `VideoBackgroundShader` compositing** — premultiplied shader color output before WebGL canvas compositing so low-opacity dots and ASCII glyphs fade correctly in Safari.

  11. **Fixed slug collision in page chunk names** — pages with similar slugs (e.g. `api/users` vs `api--users`) no longer collide. Chunk filenames now include a short hash suffix.

  12. **Fixed sidebar horizontal overflow** — nav items with badges (API method, deprecated, custom tags) now truncate the title instead of pushing the sidebar wider.

  13. **Deterministic named RSC chunks** — virtual modules emit stable chunk names for better caching across builds.
</Update>

<Update id={"@holocron.so/cli@0.17.0"} label={"Jun 15, 2026"}>
  ## @holocron.so/cli\@0.17.0

  1. **New `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:

     ```bash
     # Interactive mode
     holocron subscribe

     # Non-interactive
     holocron subscribe --project <projectId> --interval yearly
     ```

     If the project already has an active subscription, opens the Stripe billing portal instead.

  2. **New `holocron subscription status` command** — check the current subscription state for a project. Works with both session auth and API key auth (`HOLOCRON_KEY`):

     ```bash
     holocron subscription status --project <projectId>
     ```
</Update>

<Update id={"@holocron.so/cli@0.16.0"} label={"Jun 5, 2026"}>
  ## @holocron.so/cli\@0.16.0

  1. **New `--base-path` flag for `holocron deploy`** — deploy your docs at a subpath on your own domain instead of a separate subdomain:

     ```bash
     npx -y @holocron.so/cli deploy --base-path /docs
     ```

     The flag sets Vite's `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.

  2. **Fixed device flow login on some servers** — the poll response body was being read twice (once for success check, once for error handling). The second read silently failed, masking expired-token and access-denied errors.

  3. **Allow `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.

  4. **Removed `dotenv` dependency** — the CLI gets `HOLOCRON_KEY` from CI env vars or sigillo, not `.env` files, so dotenv was unnecessary.
</Update>

<Update id={"@holocron.so/vite@0.20.0"} label={"Jun 5, 2026"}>
  ## @holocron.so/vite\@0.20.0

  1. **Auto-generate `<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.

  2. **Resolve relative MDX links to absolute paths at build time** — relative markdown links like `[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.

  3. **Subpath hosting support** — when deploying with `--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`.

  4. **AI chat drawer improvements** — the sidebar AI widget now morphs into the full chat drawer using the View Transitions API with blur cross-fade. Copy/regenerate footer buttons appear on all assistant messages, and the footer visibility gap between submitting a prompt and receiving a response is fixed.

  5. **Fixed `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!

  6. **Fixed inlined MDX imports with overlapping export/import paths** — when an imported `.mdx` partial contained both an exported string constant and an import with the same relative path, only the actual import source is rewritten now.

  7. **Fixed base path link collision** — replaced spiceflow's built-in `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.
</Update>

<Update id={"@holocron.so/vite@0.19.0"} label={"Jun 4, 2026"}>
  ## @holocron.so/vite\@0.19.0

  1. **MCP documentation tabs** — auto-generate documentation pages from MCP (Model Context Protocol) definitions. Point a tab at a local JSON file or a remote Streamable HTTP MCP server:

     ```jsonc
     {
       "tab": "MCP",
       "mcp": "mcp-tools.json",
       "base": "mcp"
     }
     ```

     Each tool becomes a page with its input schema rendered as a parameter field list and a sampled JSON-RPC request example in the sidebar. Resources get their own pages with URI and MIME type. Supports selective mode with `"..."` rest expansion to interleave custom MDX pages with auto-generated ones, same as OpenAPI tabs.

  2. **Changelog `initialContent` field** — prepend custom MDX content above auto-generated release entries in changelog tabs:

     ```jsonc
     {
       "tab": "Changelog",
       "changelog": "https://github.com/owner/repo",
       "initialContent": "changelog/intro"
     }
     ```

     The referenced file goes through the same URL rewriting pipeline as inline `.md` imports, so relative image paths and links resolve correctly.

  3. **OpenAPI multi-status response examples** — the Response panel now shows examples for every response status, not just the first 2xx. When multiple statuses have examples, tab titles are prefixed with the status code for clarity. Closes #98

  4. **OpenAPI spec HMR** — editing a local `.yaml` or `.json` OpenAPI spec now triggers an automatic re-sync so API reference pages update without restarting the dev server.

  5. **VideoBackgroundShader MDX component** — a WebGL-powered dotted video background available directly in MDX as `<VideoBackgroundShader>`. Supports `dotStyle="ascii"` for an ASCII character atlas effect, configurable dot size, color, and fade gradients.

  6. **Same-origin absolute URLs treated as internal links** — absolute URLs pointing to the same site now use client-side routing instead of full page reloads.

  7. **Stripped HTTP method from OpenAPI sidebar labels** — the sidebar already shows a colored method badge, so the text label now omits the method to avoid redundancy.

  8. **Fixed nested list spacing** — nested lists inside `<Li>` elements are properly spaced.

  9. **Fixed duplicate title in code blocks inside Tabs** — code blocks inside `<Tabs>` no longer show the panel title twice.

  10. **Fixed HMR race condition** — concurrent `syncNavigation` calls during rapid file saves are serialized, preventing interleaved state corruption.

  11. **Fixed AI widget aside overlap** — the synthetic AI chat aside only uses `full` mode when the page has no other asides.

  12. **Fixed query string/hash preservation on redirects** — root and markdown-index redirects carry through query parameters and hash fragments.

  13. **Fixed sidebar layout shift** — removed font weight change on active sidebar items.

  14. **Fixed AI chat drawer close behavior** — the chat drawer closes on any link click, not just pathname changes.
</Update>

<Update id={"@holocron.so/vite@0.18.2"} label={"Jun 3, 2026"}>
  ## @holocron.so/vite\@0.18.2

  1. **Fixed false broken link warnings for imported files outside pagesDir** — when a markdown file outside `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.

     Previously all relative links in such imported files showed as broken even when the target page existed. For example, a `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.
</Update>

<Update id={"@holocron.so/vite@0.18.1"} label={"Jun 3, 2026"}>
  ## @holocron.so/vite\@0.18.1

  1. **Restored `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.
</Update>

<Update id={"@holocron.so/vite@0.18.0"} label={"Jun 3, 2026"}>
  ## @holocron.so/vite\@0.18.0

  1. **Build summary with actionable tips** — after all individual warnings are logged, the build now prints a final summary:

     ```
     ▲ holocron found 3 invalid internal links across 2 pages.
     ▲ holocron 2 pages with MDX errors. Fix the syntax issues listed above.
     ```

     The broken links summary includes a link to the docs page explaining `knownPaths`.

  2. **`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.

  3. **Fixed OpenAPI renderer CJS crash in dev** — `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:

     ```
     The requested module "format/format.js" does not provide an export named "default"
     ```

     The fix removes the `'use client'` directive so the OpenAPI renderer stays server-side.

  4. **Trimmed Prism syntax highlighting bundle (891 KB -> 471 KB)** — removed \~170 obscure languages, keeping \~130 popular ones. If you need a removed language, open an issue.

  5. **Deduplicated acorn in RSC bundle (180 KB saved)** — a resolve alias now forces all acorn imports to the ESM entry, eliminating the CJS+ESM duplication. RSC bundle: 3,998 KB -> 3,818 KB.

  6. **Removed dead dependencies** — dropped `@fastify/deepmerge`, `image-size`, and `motion` from the package.
</Update>

<Update id={"@holocron.so/cli@0.15.1"} label={"Jun 3, 2026"}>
  ## @holocron.so/cli\@0.15.1

  1. **`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.
</Update>

<Update id={"@holocron.so/vite@0.17.1"} label={"Jun 2, 2026"}>
  ## @holocron.so/vite\@0.17.1

  1. **Fixed OpenAPI double-framed code panels** — when an operation defined multiple named request body or response examples, `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.

  2. **Fixed app entry CSS crash without the Vite plugin** — importing `@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/`.

  3. **Hidden tab scrollbars and press feedback** — the horizontal tab scroll container no longer shows a scrollbar on overflow, and tab buttons no longer flash a press/active highlight.
</Update>

<Update id={"@holocron.so/vite@0.17.0"} label={"Jun 2, 2026"}>
  ## @holocron.so/vite\@0.17.0

  1. **Changelog tab generated from GitHub releases** — add a tab with a `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):

     ```jsonc
     {
       "tab": "Changelog",
       "changelog": "https://github.com/owner/repo"
     }
     ```

     The generated page uses `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.

  2. **Page mode frontmatter (`mode: center`)** — hide the left navigation sidebar per-page, matching Mintlify's `mode` layout control:

     ```mdx
     ---
     title: Landing
     mode: center
     ---
     ```

     Holocron collapses Mintlify's five mode values into two real layouts: `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.

  3. **Static page prerendering with `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:

     ```mdx
     ---
     title: Overview
     rendering: static
     ---
     ```

     The default is `ssr`, which renders on every request so pages can react to per-request data like cookies.

  4. **Multiple OpenAPI examples render as switchable tabs** — when an operation defines several named examples (the `examples` map), Holocron renders all of them as a tabbed code group instead of showing only the first. Example names become the tab labels:

     ```yaml
     responses:
       '201':
         content:
           application/json:
             examples:
               Confirmed order:
                 value: { id: 'order-001', status: 'pending' }
               Empty order:
                 value: { id: 'order-002', items: [] }
     ```

  5. **Markdown in OpenAPI descriptions** — `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)

  6. **Mix MDX pages with endpoint pages in OpenAPI tabs** — an API Reference tab can now interleave hand-written MDX pages (overviews, authentication guides) with auto-generated endpoint pages.

  7. **`/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.

  8. **New `@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:

     ```tsx
     import { Prism } from '@holocron.so/vite/prism'

     const html = Prism.highlight(code, Prism.languages[lang], lang)
     ```

  9. **`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.

  10. **Scroll-driven fade mask on the left navigation sidebar** — the sidebar top/bottom edges fade as you scroll.

  11. **Collapsible TOC headings in the left sidebar** — nested headings can now collapse and expand.

  12. **Broken link validation runs during builds** — links pointing to non-existent pages are reported at build time.

  13. **`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.

  14. **`<Above>` hero spans the full grid width** including the side rails.

  15. **Restyled inline code pills** — GitHub-style with baseline alignment; body prose softened so bold text and headings stand out at full foreground color.

  16. **Seamless HMR for `globals.css` edits** — editing Holocron's global stylesheet hot-reloads without a full page refresh.

  17. **Skip auto H1 injection for non-default page modes and JSX-first pages.**

  18. **Fixed per-section asides scoped on heading-first pages.**

  19. **Updated spiceflow to 1.26.0-rsc.3**
</Update>

<Update id={"@holocron.so/cli@0.15.0"} label={"Jun 2, 2026"}>
  ## @holocron.so/cli\@0.15.0

  1. **Clear deploy error when a subscription is required** — when a deploy exceeds the free plan (a preview deploy, or a 2nd production deploy on the free tier), the server returns a `SUBSCRIPTION_REQUIRED` error. The CLI now surfaces the server's actionable message plus the upgrade URL instead of a generic `Failed to create deployment`:

     ```bash
     npx -y @holocron.so/cli deploy
     # A Holocron Pro subscription is required for this deployment.
     # Subscribe to continue: https://holocron.so/...
     ```

  2. **Clearer expired-session message on `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.

  3. **Updated spiceflow to 1.26.0-rsc.3**
</Update>

<Update id={"@holocron.so/vite@0.16.0"} label={"May 27, 2026"}>
  ## @holocron.so/vite\@0.16.0

  1. **New `@holocron.so/vite/mdx` export** — import Holocron MDX components in your own `.tsx` files:

     ```tsx
     import { Card, CardGroup, Callout, Steps, Step } from '@holocron.so/vite/mdx'
     ```

     Useful when building custom components that compose Holocron primitives. In MDX pages, all components remain available globally without imports.

  2. **Image processing preserves user-specified dimensions** — when you set `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.

  3. **SVG images skip placeholder generation** — SVG files no longer get a pixelated 16px rasterized WebP placeholder since SVGs are vector and render instantly.

  4. **Fixed images in flex containers** — images inside `<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.

  5. **AI logo proxy moved to `/holocron-api/` namespace** — avoids collisions with user API routes.

  6. **AI logo cache improvements** — stale SVG fallback responses are now evicted from the Cache API, and SVG fallbacks are never cached so retries can fetch the real AI-generated image.

  7. **Reduced nav group font size** — sidebar group titles decreased from 13px to 12px for a tighter sidebar.

  8. **Thinner search clear icon** — strokeWidth 1.5 instead of 2.

  9. **Reduced chat input placeholder opacity** — 75% for a subtler appearance.

  10. **Removed vertical margin from Marquee** — lets the component inherit spacing from its parent layout gap.
</Update>

<Update id={"@holocron.so/vite@0.15.0"} label={"May 27, 2026"}>
  ## @holocron.so/vite\@0.15.0

  1. **Keyboard shortcut `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.)

  2. **Styled `<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

  3. **New `--type-nav-group-size` CSS variable** — controls font-size of sidebar group titles. Override it to customize sidebar typography:

     ```css
     :root {
       --type-nav-group-size: 14px;
     }
     ```

  4. **Smarter AI chat assistant** — gives shorter, messenger-style answers. Prefers linking to docs pages over re-explaining content

  5. **Fixed ai-logo proxy crash in Dynamic Workers** — `caches.open()` could throw in hosted environments where Cache API is unavailable, causing a 500. Now falls back to direct fetch

  6. **Fixed theme shortcut firing during input** — components that call `preventDefault()` no longer accidentally trigger the dark mode toggle

  7. **Removed paragraph opacity 0.82** — body text no longer renders at reduced opacity

  8. **Fixed subpath externalization in client builds** — `addNoExternal` for `@holocron.so/vite` now runs in all Vite environments (client, ssr, rsc)

  9. **Updated spiceflow to 1.26.0-rsc.0**
</Update>

<Update id={"@holocron.so/cli@0.14.1"} label={"May 27, 2026"}>
  ## @holocron.so/cli\@0.14.1

  1. **Updated spiceflow to 1.26.0-rsc.0**
</Update>

<Update id={"@holocron.so/vite@0.14.3"} label={"May 25, 2026"}>
  ## @holocron.so/vite\@0.14.3

  1. **Fixed spiceflow resolution in strict pnpm workspaces** — spiceflow is a transitive dep of `@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.
  2. **Logo text uses heading font** — navbar logo text now uses the configured heading font-family at 22px with weight 560 and tighter letter-spacing.
  3. **Removed preserveSymlinks resolver** — eliminated the custom `@holocron.so/vite/src/*` resolveId hook that was only needed when spiceflow was a workspace dependency.
  4. **Updated spiceflow to 1.25.4-rsc.0**
</Update>

<Update id={"@holocron.so/vite@0.14.2"} label={"May 25, 2026"}>
  ## @holocron.so/vite\@0.14.2

  1. **Logo text uses heading font** — the logo text in the navbar now renders with the configured heading font-family, heavier weight (560), and tighter letter-spacing at 22px, matching the editorial heading style.
  2. **Removed preserveSymlinks resolver** — eliminated custom `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.
  3. **Updated spiceflow to 1.25.4-rsc.0**
</Update>

<Update id={"@holocron.so/vite@0.14.1"} label={"May 25, 2026"}>
  ## @holocron.so/vite\@0.14.1

  1. **DialKit config panel persists open/closed state** — the config panel no longer resets to its default state on page refresh or RSC remount. Open/closed state is saved to localStorage so the panel stays how you left it.
  2. **Reduced main bundle size** — DialKit is now fully lazy-loaded. A stray value import was pulling the entire dialkit package into the eager bundle; switching to `import type` ensures it only loads when the config panel is opened.
</Update>

<Update id={"@holocron.so/cli@0.14.0"} label={"May 25, 2026"}>
  ## @holocron.so/cli\@0.14.0

  1. **Rich `whoami` command with multi-org support** — `holocron whoami` now shows your user info, all organizations with IDs and roles, and projects grouped per org:

     ```bash
     npx -y @holocron.so/cli whoami
     ```

  2. **Multi-org project creation** — `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.

  3. **Deploy project picker shows org names** — when deploying with multiple projects across orgs, the interactive picker now displays the org name alongside each project.

  Thanks @tanishqkancharla for directing most of the UI changes!
</Update>

<Update id={"@holocron.so/vite@0.14.0"} label={"May 25, 2026"}>
  ## @holocron.so/vite\@0.14.0

  1. **Analytics integrations for 14 providers** — new `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:

     ```json
     {
       "integrations": {
         "ga4": { "measurementId": "G-XXXXXXXXXX" },
         "plausible": { "domain": "docs.example.com" },
         "fathom": { "siteId": "ABCDEF" }
       }
     }
     ```

  2. **New `<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:

     ```mdx
     <Marquee duration={30} fade slowOnHover>
       <img src="/logos/github.svg" />
       <img src="/logos/vercel.svg" />
     </Marquee>
     ```

  3. **`logo.text` config field** — display a site name next to the logo in the navbar:

     ```json
     { "logo": { "light": "/favicon.svg", "text": "My Docs" } }
     ```

  4. **Layout and typography controls in docs.json** — new `layout` (maxWidth, sidebarWidth, columnGap, radius) and `fonts` (fontSize, heading.fontSize) fields for customizing page geometry and font sizes without custom CSS.

  5. **Live config panel on preview deployments** — a DialKit-powered config panel appears in dev mode and on preview deployments, letting you live-tweak colors, layout, fonts, and more.

  6. **Relative-path global anchors with client-side navigation** — anchors pointing to relative paths now use client-side navigation instead of full page reloads.

  7. **Version/dropdown inner tabs visible in the tab bar** — inner tabs inside versions/dropdowns now correctly appear in the header tab bar.

  8. **Search UI improvements** — keyboard-layout-aware shortcut hints, accent border on focus, clear button, and "/" shortcut alongside Cmd+K/Ctrl+K.

  9. **Lazy-loaded Prism.js** — syntax highlighting loaded via dynamic import for faster initial page render.

  10. **Safe-mdx render errors shown in-page during dev** — missing components and invalid JSX now display as a Warning callout directly on the page.

  11. **CSS variable border-radius tokens** — all border-radius values now derive from `--radius`, customizable via `layout.radius`.

  12. **`sidebarTitle` frontmatter** — use a long `title` for SEO while keeping the sidebar label short.

  13. **Fixed ordered list numbering** — lists split by code blocks now continue numbering correctly.

  14. **Fixed theme token cascade** — Holocron tokens now use a low-priority CSS cascade layer so user CSS overrides them properly.

  15. **Fixed sidebar search filtering** — search results update synchronously, fixing flaky states.

  16. **UI polish** — hover background on cards, bottom border on last table row, cleaner active tabs, differentiated sidebar group labels, wider API reference aside panel (460px), hidden line numbers in API reference examples, and more.

  Thanks @tanishqkancharla for directing most of the UI changes!
</Update>

<Update id={"@holocron.so/cli@0.13.0"} label={"May 21, 2026"}>
  ## @holocron.so/cli\@0.13.0

  1. **New `--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`:

     ```bash
     npx -y @holocron.so/cli create my-docs --key holo_xxxxxxxxxxxx
     ```

     This enables one-step scaffolding when the key is already known, e.g. from the holocron.so dashboard.
</Update>

<Update id={"@holocron.so/vite@0.13.0"} label={"May 21, 2026"}>
  ## @holocron.so/vite\@0.13.0

  1. **Anchor placement in tabs or sidebar** — anchors now support a `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:

     ```json
     {
       "navbar": {
         "links": [
           { "label": "GitHub", "url": "https://github.com/...", "placement": "sidebar" },
           { "label": "Changelog", "url": "/changelog", "placement": "tabs" }
         ]
       }
     }
     ```

  2. **Copy-to-clipboard button on code blocks** — every fenced code block now shows a copy button on hover in the top-right corner. The button fades in, transitions to a checkmark icon on success, and gracefully handles clipboard write failures in insecure contexts.

  3. **`.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.

  4. **Dark mode persists across reloads** — a blocking `<script>` now reads the `holocron-theme` cookie before first paint, preventing the theme from flashing or resetting during RSC streaming.

  5. **Stale build artifacts cleaned before each build** — `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.
</Update>

<Update id={"@holocron.so/vite@0.12.0"} label={"May 21, 2026"}>
  ## @holocron.so/vite\@0.12.0

  1. **Code block meta props: bleed, lines, title, highlight** — fenced code blocks now support meta string options parsed at build time:

     ````md
     ```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 block
     * `highlight="1-3,7"` → dims non-highlighted lines with a background overlay
     * `lines=false` → hides line numbers (on by default)
     * `bleed=true` → extends the code block into page margins

  2. **Improved inline code in headings** — inline code inside headings now inherits the heading font size and weight instead of shrinking to `0.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).

  3. **Theme-adaptive diagram labels** — ASCII diagram labels in code blocks now use `var(--primary)` instead of hardcoded green values, so they automatically match the site color theme.

  4. **Tighter line-height for diagram code blocks** — code blocks with diagram languages (`diagram`, `ascii`, `box`) use `line-height: 1.3` instead of `1.6`, improving vertical alignment of box-drawing characters and connected lines.

  5. **Inline code color fix** — `.inline-code` now uses `var(--foreground)` in both light and dark mode instead of hardcoded `rgba()` values, so it adapts to custom themes.
</Update>

<Update id={"@holocron.so/vite@0.11.0"} label={"May 20, 2026"}>
  ## @holocron.so/vite\@0.11.0

  1. **Inline `.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.

  2. **New `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:

     ```json
     {
       "knownPaths": ["/api/*", "/dashboard", "/blog/*"]
     }
     ```

  3. **Imported `.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`.

  4. **Content column capped at 720px** — the derived `--grid-content-width` is now wrapped in `min(720px, ...)` so it never grows beyond 720px regardless of grid geometry.

  5. **Fixed heading anchor scroll offset** — `scroll-margin-top` now uses `--sticky-top` instead of `--header-height`, adding breathing room below the navbar when navigating to `#id` anchors.

  6. **Fixed AI chat loading dots alignment** — loading indicator dots are now aligned to top-start instead of vertically centered.
</Update>

<Update id={"@holocron.so/vite@0.10.2"} label={"May 19, 2026"}>
  ## @holocron.so/vite\@0.10.2

  1. **Fixed custom entry CSS under Cloudflare dev** — custom-entry apps now correctly load Holocron's global stylesheet when running under `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.

  2. **Removed manual safe-mdx aliases** — safe-mdx 1.11.1 ships a package-level `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`.

  3. **Fixed broken 0.10.1 publish** — 0.10.1 was published with npm instead of pnpm, leaving `workspace:^` references unresolved in the published package.json.
</Update>

<Update id={"@holocron.so/vite@0.10.1"} label={"May 19, 2026"}>
  ## @holocron.so/vite\@0.10.1

  1. **Fixed custom entry CSS under Cloudflare dev** — custom-entry apps now correctly load Holocron's global stylesheet when running under `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.

  2. **Removed manual safe-mdx aliases** — safe-mdx 1.11.1 ships a package-level `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`.
</Update>

<Update id={"@holocron.so/vite@0.10.0"} label={"May 19, 2026"}>
  ## @holocron.so/vite\@0.10.0

  1. **Build-time processing for imported `.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.

  2. **Imported MDX headings appear in sidebar TOC** — headings from imported `.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.

  3. **Broken internal link warnings during sync** — Holocron now walks the mdast tree during sync and resolves every internal link against the page index and redirect sources. Links pointing to non-existent pages log a warning with source location. Handles absolute (`/foo`), relative (`./foo`, `../bar`), hash fragments, and query strings.

  4. **Serve raw markdown at `.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.

  5. **Imported files included in `/docs.zip`** — the `/docs.zip` endpoint now includes imported markdown files (snippets, shared fragments, files outside pagesDir) alongside navigation pages.

  6. **Global CSS loads for custom entries** — custom-entry apps that mount Holocron through a user-owned Spiceflow entry now correctly load Holocron's global stylesheet.

  7. **Spiceflow moved to regular dependencies** — users no longer need to install spiceflow separately. It ships as a regular dependency, so `pnpm install` resolves it automatically.

  8. **Fixed copy-as-markdown button on index pages** — the button was fetching `/.md` (404) on the root page instead of `/index.md`.

  9. **Fixed link hydration mismatch** — `isExternalHref` used `new URL()` origin comparison that produced different results on server vs client for relative paths. Replaced with a consistent regex.

  10. **Fixed empty sidebar group labels** — unnamed sidebar groups no longer render an empty `<div>` wrapper.

  11. **Fixed config HMR** — editing `docs.json` colors and styles now hot-reloads correctly without stale CSS artifacts.
</Update>

<Update id={"@holocron.so/cli@0.12.2"} label={"May 19, 2026"}>
  ## @holocron.so/cli\@0.12.2

  1. **Fixed `$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.
</Update>

<Update id={"@holocron.so/vite@0.9.0"} label={"May 18, 2026"}>
  ## @holocron.so/vite\@0.9.0

  1. **New prev/next page navigation in the right sidebar** — every page now shows chevron arrows linking to the previous and next pages in navigation order, plus a "Copy as Markdown" button that copies the current page content to clipboard. Tooltips on the arrows show the target page title via portal-based rendering to avoid clipping.

  2. **Frontmatter JSON Schema** — a new `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.

  3. **Icon name autocomplete in `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.

  4. **Shared `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`.

  5. **`text` prop on `<Logo />`** — pass `<Logo text="My Docs" />` to render an AI-generated logo using that text, bypassing the site config logo entirely.

  6. **Fixed Tailwind HMR for MDX page edits** — editing MDX files or imported components no longer triggers a full page reload. New Tailwind utility classes are now compiled and injected in-place during HMR, preserving client state. Previously, Tailwind treated MDX files as external template changes and forced a reload.

  7. **Upgraded Spiceflow to 1.25.3-rsc.0** — aligns all workspace packages on the same RSC build, avoiding duplicate framework versions.

  8. **Search bar focus styling** — replaced the thick box-shadow focus ring with a subtle border-color change to `muted-foreground` for a cleaner active state.

  9. **AI chat polish** — reduced the ShowMore collapsed height from 80px to 40px for tighter tool output previews.
</Update>

<Update id={"@holocron.so/cli@0.12.1"} label={"May 18, 2026"}>
  ## @holocron.so/cli\@0.12.1

  1. **Upgraded Spiceflow to 1.25.3-rsc.0** — aligns with the latest RSC build used by `@holocron.so/vite`, avoiding duplicate framework versions at runtime.
</Update>

<Update id={"@holocron.so/vite@0.8.0"} label={"May 14, 2026"}>
  ## @holocron.so/vite\@0.8.0

  1. **New `<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.

     ```mdx
     <Logo />
     ```

  2. **Tailwind scans your docs tree** — Holocron now adds your configured `pagesDir` as a Tailwind source, so utility classes used in MDX content and imported docs components are included in the generated CSS.

  3. **Better MDX error pages and build failures** — MDX parse failures stay attached to their page route in dev, rendering a focused error page instead of turning into a 404. Production builds fail with the formatted code-frame message so broken docs do not deploy silently.

  4. **MDX component validation during sync** — Holocron validates rendered MDX against the supported component map while syncing navigation. Unknown components and invalid imported MDX now surface earlier with the page source that caused the failure.

  5. **Self-hosted JetBrains Mono** — code now uses `@fontsource-variable/jetbrains-mono`, avoiding a third-party font request for the default monospace font.

  6. **JSONC syntax highlighting** — fenced `jsonc` code blocks now reuse Prism's JSON grammar instead of rendering without highlighting.

  7. **OpenAPI success responses open by default** — generated endpoint pages now expand successful response examples first, making the useful response shape visible immediately.

  8. **Navigation and layout polish** — browser scroll restoration works across docs navigation, unnamed sidebar groups no longer break search, responsive images keep their intended sizing, Frame captions align better, and the page AI widget stays hidden on mobile.
</Update>

<Update id={"@holocron.so/cli@0.12.0"} label={"May 14, 2026"}>
  ## @holocron.so/cli\@0.12.0

  1. **Scaffolded projects now use `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.

     ```bash
     npx -y @holocron.so/cli create my-docs
     ```

     The create command now parses the template as JSONC before writing the project name and schema URL, so custom starter templates can use JSONC syntax safely.
</Update>

<Update id={"@holocron.so/vite@0.7.1"} label={"May 13, 2026"}>
  ## @holocron.so/vite\@0.7.1

  1. **Fixed internal links opening in new tabs** — relative links, hash links, and same-origin links in docs content now navigate in-place using client-side navigation instead of opening a new browser tab. External links still open in a new tab as expected.
  2. **Table edges align flush with page content** — removed left padding from the first table column and right padding from the last column so table data aligns with surrounding editorial content.
  3. **Improved AI chat scroll behavior** — after submitting a message, the chat drawer now scrolls your message to the top of the viewport instead of jumping to the bottom. The loading state and assistant response area get enough height to keep the scroll position stable during streaming.
  4. **Fixed chat message overflow** — resolved an issue where `overflow-x-hidden` on chat text containers silently triggered vertical scrollbars due to CSS spec behavior. Content now grows naturally without nested scroll regions.
</Update>

<Update id={"@holocron.so/vite@0.7.0"} label={"May 13, 2026"}>
  ## @holocron.so/vite\@0.7.0

  1. **Auto-derive dark mode `--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.

  2. **Fixed Cloudflare Workers deploy crash ("No such module ssr/isbot")** — the `@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.

  3. **Fixed image height override in content area** — a blanket `.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.

  4. **Tighter TOC panel spacing** — reduced right-sidebar table of contents item vertical padding from `py-1.5` to `py-1`.

  5. **Excluded spiceflow from RSC/SSR optimizeDeps** — prevents Vite from pre-bundling spiceflow in RSC and SSR environments so it stays in the transform pipeline as-is.

  6. **Deploy output writes to `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.
</Update>

<Update id={"@holocron.so/cli@0.11.1"} label={"May 13, 2026"}>
  ## @holocron.so/cli\@0.11.1

  1. **Deploy auth check runs before build** — credentials are validated upfront so missing auth fails immediately instead of after a full Vite build
  2. **Deploy output separated from normal build** — `holocron deploy` now writes to `dist/.holocron` instead of `dist/`, keeping deploy artifacts isolated from platform-specific Vite builds (Cloudflare vs Node.js)
  3. **Removed `--skip-build` flag** — builds always run during deploy. The separate output dir makes the flag unnecessary
</Update>

<Update id={"@holocron.so/cli@0.11.0"} label={"May 12, 2026"}>
  ## @holocron.so/cli\@0.11.0

  1. **Keyless deploys from GitHub Actions via OIDC** — `holocron deploy` now supports GitHub Actions OIDC authentication natively. No `HOLOCRON_KEY` secret needed; just set `permissions: id-token: write` in your workflow:

     ```yaml
     permissions:
       id-token: write
       contents: read
     steps:
       - uses: actions/checkout@v4
       - run: npx holocron deploy
     ```

     The CLI mints a fresh OIDC token for each deploy step (create, upload, finalize) and the server derives project, branch, and preview state from the verified JWT claims. API key and session auth continue to work as before.

  2. **Scaffold no longer lists `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.

  3. **Improved deploy error messages** — auth failure now suggests all three auth methods (env var, `holocron login`, or GitHub Actions OIDC) instead of only the first two.
</Update>

<Update id={"@holocron.so/vite@0.6.1"} label={"May 12, 2026"}>
  ## @holocron.so/vite\@0.6.1

  1. **`@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`.

  2. **Fixed OpenAPI spec resolution when `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.

  3. **Removed build-time OIDC registration from the Vite plugin** — the OIDC token minting and `.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`.

  4. **Bumped spiceflow peer dep to `>=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.
</Update>

<Update id={"@holocron.so/vite@0.6.0"} label={"May 12, 2026"}>
  ## @holocron.so/vite\@0.6.0

  1. **Self-hosted Inter font** — the default Inter font is now bundled via `@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.

  2. **OIDC keyless deploys from GitHub Actions** — when `permissions: id-token: write` is set, the Vite plugin automatically mints a GitHub OIDC token and registers the deployment without any secret configuration:

     ```yaml
     # No HOLOCRON_KEY secret needed
     permissions:
       id-token: write
     steps:
       - run: npx holocron deploy
     ```

  3. **Prism excluded from SSR** — syntax highlighting now runs client-only via a `#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.

  4. **Stable dependency code splitting** — framework and vendor code is grouped into a single `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.

  5. **`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.

  6. **Dynamic Workers `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.

  7. **Auto-inject Cloudflare plugin** — when `HOLOCRON_DEPLOY=1` is set (by `holocron deploy`), `@cloudflare/vite-plugin` is auto-injected. Users don't need it in their `vite.config.ts`.

  8. **Headings with inline code** — headings like `` ### `config` `` now appear correctly in the sidebar and table of contents instead of showing as empty entries.

  9. **Empty headings filtered** — headings with no text content are dropped from the sidebar TOC and right-side table of contents instead of rendering as blank items.

  10. **User entry exports preserved** — custom spiceflow entries now re-export all named exports alongside `app` and `default`.

  11. **`yaml` browser entry alias** — the `yaml` package is aliased to its browser entry at build time, fixing resolution issues in the browser bundle.

  12. **`@cloudflare/vite-plugin` optional peer dependency** — added as optional so `pnpm install` doesn't warn when deploying to non-Cloudflare targets.
</Update>

<Update id={"@holocron.so/cli@0.10.0"} label={"May 12, 2026"}>
  ## @holocron.so/cli\@0.10.0

  1. **New `holocron deploy` command** — build and deploy your docs site to holocron.so with a single command. Content-addressable uploads skip unchanged files across deploys:

     ```bash
     holocron deploy
     ```

     * Auto-detects branch from git, GitHub Actions, or `--branch` flag
     * Zip-batched parallel uploads with progress reporting
     * SHA-256 content hashing; only new/changed files are uploaded
     * Auto-sets `holocron_url` and `holocron_deployment_id` as GitHub Actions step outputs
     * Reads project name from `docs.json` and syncs it server-side
     * Supports `--skip-build` to deploy an existing `dist/`
     * Auth via `HOLOCRON_KEY` env var or `holocron login` session

  2. **Multi-environment auth** — CLI now stores session tokens keyed by server URL, so you can be logged into production and preview simultaneously:

     ```bash
     holocron login                              # logs into holocron.so
     holocron --api-url https://preview.holocron.so login  # separate session
     holocron whoami                              # shows current server's user
     ```

  3. **Global `--api-url` flag** — all commands now respect a top-level `--api-url` option instead of per-command `-u`/`--url` flags.

  4. **Improved `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.

  5. **Colored CLI output** — all commands use a centralized logger with color-coded status icons for better readability.

  6. **Non-TTY safety** — `holocron login` fails fast with a clear message in non-interactive environments instead of hanging on stdin.
</Update>

<Update id={"@holocron.so/vite@0.5.0"} label={"May 11, 2026"}>
  ## @holocron.so/vite\@0.5.0

  1. **Decorative grid lines** — configurable vertical lines with dot ornaments at intersections. Set `decorativeLines` in your config to `"none"`, `"lines"`, `"dashed"`, or `"lines-with-dots"` (default):

     ```json
     { "decorativeLines": "dashed" }
     ```

  2. **Per-page CDN caching via frontmatter** — set `cache-control` in page frontmatter to control HTTP caching headers per page:

     ```yaml
     ---
     title: My Page
     cache-control: public, max-age=3600
     ---
     ```

  3. **`?raw` imports in MDX modules** — MDX files can now import raw text content from other files using Vite's `?raw` query suffix.

  4. **`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.

  5. **`holocron` CLI bundled with vite package** — installing `@holocron.so/vite` now also provides the `holocron` CLI command. No separate `@holocron.so/cli` install needed.

  6. **Deploy with just `HOLOCRON_KEY`** — deployment registration now only needs `HOLOCRON_KEY` (removed `HOLOCRON_PROJECT`). The project is resolved from the key server-side.

  7. **Generated entry guards `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.

  8. **OG images and logos served from holocron.so** — OG image rendering and logo generation moved to a dedicated Cloudflare Worker, dropping \~5 MiB from the vite plugin bundle.

  9. **Sidebar nav animations disabled by default** — sidebar expand/collapse transitions are off by default, gated behind a `.sidebar-animate` CSS class.

  10. **Config types and schema exported from index** — `@holocron.so/vite` now exports config types and the JSON schema for programmatic config validation.

  11. **Darker dark mode** — dark mode background darkened from `0.21` to `0.16` oklch lightness for better contrast.

  12. **Fixed TOC heading highlight** — same-hash re-click and scrollbar drag edge cases now correctly update the active heading.

  13. **Fixed sidebar heading click** — clicking a heading in the sidebar now highlights correctly after scroll.

  14. **Fixed page overflow** — decorative grid dots no longer extend below the content container.

  15. **Fixed title injection** — pages that already start with any heading level are left untouched.

  16. **Tab link and scrollbar polish** — removed lowercase transform, fixed indicator height, thinner scrollbar thumbs, softer light mode borders.
</Update>

<Update id={"@holocron.so/cli@0.9.0"} label={"May 11, 2026"}>
  ## @holocron.so/cli\@0.9.0

  1. **New `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:

     ```bash
     holocron create my-docs --name "My Docs"
     ```

     Non-interactive mode supported for CI/agent use. The scaffold includes `docs.json`, MDX pages, `vite.config.ts`, and `.env` with your API key.

  2. **New `projects list` and `projects create` commands** — manage projects for your org:

     ```bash
     holocron projects create --name "My Docs"
     holocron projects list
     ```

  3. **API keys are now project-scoped** — each key is tied to a project. The key alone identifies which project a deployment belongs to, so `HOLOCRON_PROJECT` is no longer needed. Just set `HOLOCRON_KEY`:

     ```bash
     holocron keys create --name production --project <projectId>
     ```

  4. **Renamed `HOLOCRON_API_KEY` to `HOLOCRON_KEY`** — shorter env var name. Update your `.env` and CI secrets.

  5. **Simplified API routes** — the CLI no longer manages org IDs client-side. Org resolution and auto-creation happen server-side.

  6. **`docs.jsonc` config support** — the scaffold now outputs `docs.json` with a `$schema` URL pointing to the published npm package for IDE autocomplete.
</Update>

<Update id={"@holocron.so/vite@0.4.0"} label={"May 2, 2026"}>
  ## @holocron.so/vite\@0.4.0

  1. **Agent discovery endpoints for every docs site**: Holocron now serves the well-known agent-skills discovery files automatically so coding agents can discover and install a docs-specific skill:

     ```txt
     /.well-known/agent-skills/index.json
     /.well-known/agent-skills/{name}/SKILL.md
     /.well-known/skills/index.json
     /.well-known/skills/{name}/SKILL.md
     ```

     The generated skill points agents at `/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.

  2. **Added `/llms.txt`**: every docs site now exposes a standard agent entry point that links to `/docs.zip` first, then individual raw markdown pages:

     ```txt
     https://docs.example.com/llms.txt
     ```

  3. **Imported MDX and Markdown snippets**: MDX pages can import local `.mdx` and `.md` snippets, including files outside the docs root, and Holocron resolves them through the same safe-mdx rendering pipeline as normal pages:

     ```mdx
     import Intro from './snippets/intro.mdx'
     import Readme from '../../README.md'

     <Intro />
     <Readme />
     ```

  4. **Added Mintlify-compatible `<Visibility>`**: docs can render content only for humans or only for agent-facing markdown output:

     ```mdx
     <Visibility for="humans">
     This appears on the website.
     </Visibility>

     <Visibility for="agents">
     This appears in `.md` routes and docs.zip.
     </Visibility>
     ```

  5. **More Mintlify-compatible MDX components**: callouts, badges, cards, expandables, frames, tooltips, trees, accordions, and tabs accept more Mintlify props without requiring docs rewrites.

  6. **HTML `<details>` support**: copied docs that use native HTML details/summary blocks are normalized into Holocron's existing `Expandable` component.

  7. **GitHub-style callout quotes**: Markdown alerts like `> [!NOTE]`, `> [!TIP]`, and `> [!WARNING]` now render as Holocron callouts.

  8. **Search shortcut changed to Cmd/Ctrl+K**: docs search now uses the standard docs-site shortcut.

  9. **Page-level grid gap overrides**: pages can override the editorial grid gap through frontmatter, and generated OpenAPI pages use tighter spacing automatically.

  10. **Client-side routing is used consistently**: navigation links, configured links, footer links, MDX links, and TOC hash links now go through Spiceflow `Link` where appropriate.

  11. **Docs chat uses the hosted typed API**: chat requests go through the hosted Holocron API, with preserved model history for tool calls and local-development support for inline docs content.

  12. **Temporary AI fallback for previews**: preview docs can use a low-cost temporary model when no Holocron API key is configured.

  13. **New docs pages hot-reload in dev**: adding Markdown or MDX files now refreshes navigation without needing a server restart.

  14. **Better code highlighting for MDX snippets**: `mdx` fences now reuse Prism's Markdown grammar so nested fenced code blocks inside MDX examples get syntax highlighting.

  15. **Smaller server bundles for Mermaid sites**: Mermaid is resolved through an SSR stub and loaded only in the browser, reducing the SSR bundle for the real-world Polar fixture from about 7.55 MiB to 2.17 MiB.

  16. **Cleaner build output for Mermaid**: Mermaid's dynamic diagram dependencies are grouped into one lazy chunk instead of dozens of tiny files.

  17. **Table and layout polish**: Markdown tables use lighter row dividers, stay inside the content column, and preserve visible borders.

  18. **Sidebar and scrollbar polish**: navigation spacing, scrollbar thumbs, page breathing room, and border contrast were tuned for better readability in light and dark mode.

  19. **Fixed sidebar hydration state**: sidebars now use loader-provided route state for the first render, preventing hydration mismatches on non-default tabs.

  20. **Fixed active TOC tracking**: the active heading now updates when a section reaches the top reading position instead of using the viewport center.
</Update>

<Update id={"@holocron.so/vite@0.3.0"} label={"Apr 27, 2026"}>
  ## @holocron.so/vite\@0.3.0

  1. **OpenAPI auto-generated API reference pages** — add `"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:

     ```json
     {
       "navigation": {
         "tabs": [
           { "tab": "Docs", "pages": ["index"] },
           { "tab": "API Reference", "openapi": "openapi.yaml" }
         ]
       }
     }
     ```

     Each endpoint page includes parameter tables, request/response bodies with JSON Schema types, cURL examples in a sticky right sidebar, and response code expandables.

  2. **Configurable `openapiBase` slug prefix** — control the URL prefix for generated OpenAPI pages (defaults to `"api"`). Set to `""` for no prefix:
     ```json
     { "tab": "API", "openapi": "spec.yaml", "openapiBase": "reference" }
     ```

  3. **Mermaid dark mode** — diagrams now re-render with the correct theme when toggling dark/light mode.

  4. **Auto-inject H1 from frontmatter title** — pages with a frontmatter `title` but no H1 in the body get a heading injected automatically.

  5. **Typography and layout refinements** — uniform 16px heading sizes, narrower content column for better readability, sidebar uses `text-sm` instead of `text-xs`.

  6. **Tabs component restyled** — uses `bg-accent` for cleaner tab panels.

  7. **OpenAPI field styling** — divider lines between fields, copy button on request examples, Mintlify-style rounded CodeCard containers.

  8. **Fixed `@tailwindcss/vite` and `tailwindcss` as dependencies** — were incorrectly in devDependencies causing missing styles in production.

  9. **Fixed OpenAPI active tab matching** and H1 filtering from TOC.
</Update>

<Update id={"@holocron.so/vite@0.2.0"} label={"Apr 25, 2026"}>
  ## @holocron.so/vite\@0.2.0

  1. **MDX import support** — import components from anywhere in your project using standard MDX import syntax. Components are discovered at build time and resolved at render time.

  2. **Auto-detect user global CSS** — Holocron automatically discovers and loads user global CSS files for smoother Mintlify migration.

  3. **AI Assistant control** — new `assistant.enabled` config field to disable the AI chat widget.

  4. **Default icon library switched from Lucide to FontAwesome** — use explicit `lucide:icon-name` syntax to keep using Lucide icons.

  5. **Wider content column with flexible grid** — tables and tabs now bleed properly with min-width 150px on table cells and horizontal scroll.

  6. **H3 headings** now use the same foreground color as h1/h2.

  7. **Unified vertical spacing** — Steps, lists, and containers now all use the `--prose-gap` token.

  8. **Component rename: `<Hero>` → `<Above>`** — update your MDX files if you use Hero directly.

  9. **Fixed phantom 48px gap** from empty first section in the editorial page grid.

  10. **Fixed imported components inside `<Above>`** — components in this section now render correctly.

  11. **Fixed sticky sidebar** — sidebar sticks below navbar even without a tab bar.

  12. **Fixed active TOC tracking** — improved heading highlight with 50% viewport threshold + hash change detection.

  13. **Fixed heading text rendering** — heading text no longer wrapped in prose-styled `<p>` element.

  14. **Fixed callout content** — no longer split incorrectly during MDX serialization.

  15. **Fixed spiceflow dual-instance crash** — deduplicated `@types/node` dependency.

  16. **Chat/AI fixes** — stale text, textarea preservation, store/hook boundary fixes.

  17. **Scrollbar gutter prevention** — `scrollbar-gutter: stable` prevents layout shift.

  18. **Performance** — shared pre-parsed mdast between module resolution and page rendering.

  19. **Improved sidebar link contrast** — opacity increased from 0.45 to 0.65.

  20. **Fixed implicit "Docs" tab visibility** — works correctly with versions + anchors.

  21. **Fixed nested index slugs** — loader titles resolve for nested directory pages.

  22. **Fixed tab indicator height and zustand import path**.
</Update>

<Update id={"@holocron.so/cli@0.6.0"} label={"Apr 25, 2026"}>
  ## @holocron.so/cli\@0.6.0

  1. **New `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:

     ```bash
     holocron login
     holocron whoami
     holocron logout
     ```

  2. **New `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`:

     ```bash
     holocron keys create --name production
     holocron keys list
     holocron keys delete <keyId>
     ```

  3. **Typed API client** — all API calls go through `spiceflow/client` with types auto-derived from the website routes and safe error handling via `errore` patterns.
</Update>

<Update id={"@holocron.so/vite@0.1.0"} label={"Apr 16, 2026"}>
  ## @holocron.so/vite\@0.1.0

  Initial release — drop-in Mintlify replacement as a Vite plugin.

  1. **Full Mintlify-compatible docs site from MDX** — reads `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.

  2. **React Server Components on Vite 8** — powered by spiceflow. Server-rendered pages with full client hydration, client-side navigation, and per-page loaders.

  3. **Navigation with tabs, versions, and dropdowns** — `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.

  4. **Custom entry point support** — mount holocron as a child of your own spiceflow app:
     ```ts
     import { createHolocronApp } from '@holocron.so/vite/app'
     const holocronApp = await createHolocronApp()
     const app = new Spiceflow().use(holocronApp)
     ```

  5. **HMR for config and MDX** — editing MDX content, adding/removing pages, and changing `docs.json` all hot-reload without a full page refresh.

  6. **AI agent support** — serves raw markdown at `/<page>.md` URLs, redirects AI user-agents to `.md` endpoints, exposes `/sitemap.xml` with `.md` hints, and bundles all docs as `/docs.zip`.

  7. **Built-in icon atlas** — resolves Lucide and Font Awesome icons at build time. Icons render inline as SVGs inheriting `currentColor`. Supports emoji, URL, and structured `{ name, library }` icon objects.

  8. **Image processing with pixelated placeholders** — local images get dimensions + compact WebP placeholders at build time. Blur-to-sharp transition and click-to-zoom via `react-medium-image-zoom`.

  9. **OG image generation** — auto-generates Open Graph PNG images per page using Takumi.

  10. **Generated fallback logo** — text-based logo PNG using Bagnard font, with light and dark variants.

  11. **Sidebar search** — Orama full-text index with keyboard navigation and wrap-around.

  12. **Dark mode** — class-based with cookie persistence and a blocking theme script (no flash). OS preference fallback.

  13. **CSS `@layer holocron`** — all styles wrapped in a CSS layer. Uses shadcn v2 CSS variable convention for full theme customization.

  14. **Redirects** — exact match, named parameters (`:id`), trailing wildcards (`*`). Query strings preserved. 301 status.

  15. **Base path support** — mount docs under a subpath like `/docs`.

  16. **Footer with socials** — logo, social icons, up to 4 link columns.

  17. **Banner** — dismissible top banner with MDX content and configurable colors.

  18. **Custom virtual modules** — override `virtual:holocron-config` and `virtual:holocron-pages` for programmatic control.

  19. **Sticky per-section asides** — `<Aside>` scoped to its section, `<Aside full>` spans multiple sections. `RequestExample`/`ResponseExample` auto-widen the sidebar.

  20. **404 page** — styled 404 inside the editorial layout with missing path, link home, and `noindex` meta.
</Update>

<Update id={"@holocron.so/cli@0.3.2"} label={"Sep 18, 2025"}>
  ## @holocron.so/cli\@0.3.2

  ### Patch Changes

  * export holocronjsonc type
</Update>

<Update id={"@holocron.so/cli@0.3.1"} label={"Sep 18, 2025"}>
  ## @holocron.so/cli\@0.3.1

  ### Patch Changes

  * fix double api api in client
</Update>
