Skip to content
Search
Search the documentation
Svelte DocSmith
GitHub GitHub

Changelog

What shipped in each release.

Subscribe via Atom

0.13.1

Patch Changes

  • Refine docs chrome edges and ship the full typeface stack:

    • Self-host JetBrains Mono from theme.css so code faces match without a separate Google Fonts link
    • Theme toggle labels the destination mode (Switch to light/dark mode)
    • Search empty state lists suggested starter pages once the index loads
    • Prev/next cards get directional chevrons and a light primary hover fill
    • Mobile header includes the GitHub control when configured
    • Background pattern grid lines follow the --border token so presets stay coherent
    • Sidebar hover is quieter than the active state on dense trees
  • Polish the docs chrome and landing sections for reading measure, identity, and recovery:

    • Ship Source Serif 4 with theme.css and apply it on landing display headings (Hero, FeatureGrid, CTA); land body copy on foreground ink
    • Cap markdown articles at max-w-prose so body measure stays ~65ch on wide screens
    • Make breadcrumbs navigable: group steps link to the group's first page
    • After a "No" on page feedback, offer Edit this page and Open an issue when configured
    • Label the mobile table-of-contents control ("On this page") instead of an icon-only button
    • Add an optional before snippet on CTA so notes can sit above the heading while the section still ends on the actions

0.13.0

Minor Changes

    • Report the pages an archive copies that import across the freeze boundary, so archive-version says out loud when a frozen page will keep resolving to current code
    • The notice names each page and the specifiers it crosses on ($lib, bare npm packages, relative paths that climb out of the docs root), and is informational: the archive is still written and the config block still printed

Patch Changes

    • Document every package export and the features they power (versioning, changelog/feed, mermaid, landing sections, generators, archive CLI) so the README matches what ships
    • Use the full git+https:// form for repository.url so publint stays quiet
  • Omit git-derived page dates on a shallow clone instead of dating every page the same day. A shallow history makes the walk look successful while stamping every file with the tip commit, which turns sitemap <lastmod> into uniform noise. The build warns and leaves lastUpdated unset (frontmatter still wins); use a full clone (fetch-depth: 0) when real dates matter.

    • Document the 1.0 stability promise: which surface ordinary semver will cover, and that versioning (DocsVersions, currentOnly, archive marker, archive-version) stays experimental outside it

0.12.2

Patch Changes

    • Scope the code block styles to the component's own <pre>, so they no longer restyle unrelated code blocks in the consuming app
    • Fix the layout shift when hovering a link, caused by those styles arriving with a preloaded route and repainting code blocks the component never rendered

0.12.1

Patch Changes

    • Date every page from one git history walk instead of a git log per page, cutting the content index's git cost by about 11x (93ms to 8.5ms on a 23-page site) and scaling with history rather than page count
    • Reuse that walk for the life of the dev server, so editing a page no longer re-runs git at all; dates now refresh on restart rather than on save
    • Report a failed date lookup instead of silently dating only some pages, which a large repo could hit when the walk outgrew the default output buffer
    • Freeze archived pages' dates from the same walk, so archive-version no longer spawns git per copied page

0.12.0

Minor Changes

  • svelte-docsmith/vite now exports only docsmith and DocsmithViteOptions. The collectDocs, collectSearchDocs, collectLlmsDocs and collectReleases re-exports are gone: they were internal build steps that the plugin's own tests reached through the package entry, never part of its contract.

    • Build the content, search and llms indexes as projections of one source-page list, instead of three independent scans of the docs root
    • Report a missing or empty docs root from the plugin, so index building no longer writes to the console

Patch Changes

    • Fix the version switcher sending readers to the landing page instead of the matching page, on sites serving their docs from the routes root
    • Accept a path without a leading slash in generateSitemap entries and in generateFeed's path, joining it to the origin with exactly one slash
    • Tolerate any number of trailing slashes on a configured url or editUrl, not just one, wherever a URL is built from it
    • Build every doc URL through one internal vocabulary, replacing three disagreeing trailing-slash regexes and three copies of the segment-boundary rule

0.11.0

Minor Changes

  • Give the archive-version command one seam into the library, so version identity and commit dates are decided in one place instead of two.

    • One lastCommitDate, shared by the command and the Vite plugin. Both now emit a commit day (2026-03-04); archived pages and current pages no longer carry different shapes in the same lastUpdated field.
    • "Last updated" and changelog release dates render as a UTC calendar day, so they read the same in every timezone and match between the server render and hydration. They previously formatted in the ambient zone, which showed the wrong day west of UTC.
    • Version ids are validated wherever they are declared, not only in the command. The rule covers current too, since archiving turns today's current id into an archive folder.
    • A versions config that disagrees with your docs folder now fails the build, reporting the config to paste. Both mismatches were previously silent: an undeclared archive was merged into the current version, and a section folder declared as a version dropped out of the current sidebar.
    • .docsmith-archive is now documented contract. A folder is an archived version when it carries the marker and is declared in versions; an archive copied by hand needs one.

    Breaking, for sites already using versions. DocsContentItem.lastUpdated is a YYYY-MM-DD day rather than a full ISO timestamp, so a consumer reading time-of-day off it loses that; sitemap.xml already truncated to the day and is unaffected. The new checks can also fail a build that previously passed, which is the point: every case they reject was producing a wrong content index. Unversioned sites are unaffected.

Patch Changes

    • The mobile menu now shows the version switcher on non-doc pages (a landing page, or any layout="page" route), matching what the desktop header already did there.

0.10.0

Minor Changes

  • Add opt-in versioned docs. The current version stays unprefixed at your docs root, so turning versioning on never moves a URL.

    • Declare versions: { current, archived } in docsmith(). The sidebar, search, prev/next, and breadcrumbs scope to the version being read. No versions means today's single-tree behaviour, unchanged.
    • Archived versions are served at /docs/<id>/…, get a banner linking to the current equivalent, and drop their "Edit this page" link.
    • A header version switcher appears once an archive exists, and keeps you on the same page across versions.
    • Archives stay indexable with a self-canonical; sitemap.xml and llms.txt scope to the current version via the new currentOnly helper.
    • svelte-docsmith archive-version <id> freezes the current docs into an archive, rewriting in-content links to stay inside it and preserving each page's real last-updated date.
    • DocsShell's search prop now receives the active version id, so a loader can return one version's records.
    • lastUpdated frontmatter, when present, takes precedence over the git commit date.

Patch Changes

    • ErrorPage takes a versions prop and forwards it to the shell, so an error under an archived prefix keeps that version's search scope, switcher, and noindex instead of falling back to the current version.
    • ErrorPage's search prop now receives the active version id, matching DocsShell.
    • The scaffolded +error.svelte passes versions (a no-op until you declare versions).
    • Fenced code is detected per CommonMark everywhere at build time: a fence now closes only on a marker of the same character, at least as long as the opener, carrying no info string. A page whose samples nest one fence inside another (```svelte inside ````) no longer leaks its code into the search index or phantom headings into the table of contents.
    • The fence rule and the frontmatter delimiters live in one module the search index, table of contents, llms.txt content and the archive rewriter all cross, instead of a copy per pass.
  • Accessibility polish across the docs chrome.

    • Honour prefers-reduced-motion: overlay (dialog, sheet, popover, dropdown, accordion) and transition animations collapse to instant; opacity fades still play.
    • The copy button announces "Copied to clipboard" to screen readers via a polite live region, instead of only swapping its icon.
    • The header GitHub link sets rel="noopener noreferrer".

0.9.0

Minor Changes

  • Publish your releases as a page and a feed. The docsmith() plugin now parses a Changesets CHANGELOG.md into the generated svelte-docsmith/changelog module, and the new Changelog component renders it. Because the entries come from the changelog you already ship, the page cannot fall behind what actually went out.

    Commit hashes are stripped, multi-paragraph entries survive intact, and each entry's markdown is rendered to HTML at build time so your site needs no runtime markdown renderer. Release dates come from git, specifically the commit that first introduced each version's heading; no date is invented when the history isn't available. Point the new changelog option at the package you publish (docsmith({ changelog: '../../packages/my-lib/CHANGELOG.md' })) or set it to false to skip.

    generateFeed builds an Atom feed from the same index, for a changelog.xml/+server.ts alongside the existing sitemap and llms.txt endpoints. Atom rather than RSS because it requires an unambiguous id and timestamp per entry, which a version and its release date give exactly.

    A release that deserves more than a terse entry can have a hand-written page at src/routes/changelog/<version>/, which the generated entry then links to instead of to its anchor, so the ones worth writing up get a proper post while the rest stay generated.

  • Add filenames and line numbers to code blocks. A fence's metadata now drives both: ```ts title="vite.config.ts" puts a filename bar above the block, and showLineNumbers adds a gutter. Pair startLine=12 with numbering when the snippet is lifted out of a longer file so the numbers match the real source.

    Number every block by default with the new lineNumbers preprocessor option; an individual fence still opts out with noLineNumbers. The numbers are a CSS counter over Shiki's existing per-line spans, so they add no markup and stay out of what the copy button copies. When a block has a title, the copy button moves into the filename bar instead of floating over the first line of code.

  • Add landing page sections, so the marketing page in front of your docs is built from the same design tokens as the docs themselves rather than hand-rolled.

    Five new components: Hero (headline, description, call-to-action buttons, and an optional second column for a code sample or screenshot; without one it centres on a single column), FeatureGrid and Feature (a two or three column grid of icon-and-text cells, with an optional tinted band for alternating against neighbouring sections), CTA (the closing panel, with a soft glow behind the heading), and Action (the call-to-action link used by Hero and CTA, in filled and outlined variants).

    Each renders its own full-width <section> with the container and spacing already set, so a landing page is a handful of components rather than a wall of layout classes. They use only design tokens, so they follow every theme preset and both colour schemes without configuration.

  • Add Mermaid diagram support. A ```mermaid code fence now renders as a diagram instead of highlighted code, themed to match the site — diagrams draw their colors, borders and text from your design tokens and follow the light/dark toggle. Diagrams render in the browser, and mermaid is an **optional peer dependency** pulled in only on pages that actually contain one — install it (npm i -D mermaid) to use diagrams; sites without them stay lean and need nothing. A <pre> source fallback shows if a diagram fails to parse or mermaid isn't installed.

  • Highlight code lines by number from the fence: ```svelte {4}, with lists and ranges ({1,5}, {2-4}) too. This is the only way to mark a line inside a Svelte template region, where Shiki's comment markers cannot reach: an HTML comment there is stripped without highlighting anything, so the marker silently does nothing. Comment markers keep working everywhere they already did.

    Header nav links now show which one is active. A link is matched on its section rather than its exact path, since a header link is usually the entry point to an area rather than a page you sit on: "Docs" pointing at /docs/introduction stays lit across all of /docs/*. External links are never marked, and a link to / matches only the root. The active link also carries aria-current="page".

  • Add Twoslash, so a code sample can show real types on hover. Mark a fence with ```ts twoslash and the block is compiled by TypeScript, then annotated with the types it actually infers rather than ones written by hand beside the code. Svelte fences work too, via twoslash-svelte.

    It is opt-in twice: docsmith({ twoslash: true }) in the preprocessor, then per fence. @shikijs/twoslash, twoslash-svelte, and typescript are optional peer dependencies, loaded only when a fence asks for them, so sites that don't use Twoslash pay nothing.

    Because the snippet really is compiled, it has to typecheck, and an unresolved import or a type error means there is no type to show. Rather than fail the build over one block, DocSmith falls back to an ordinary highlight and warns which block it was. The usual Twoslash directives apply: // @errors: 2322 to show an error deliberately, // @noErrors to silence one, and // ---cut--- to keep setup lines out of the rendered output while still compiling them.

    The hover popup is restyled from the stock rich theme onto your design tokens, so it matches the site in both colour schemes.

Patch Changes

  • Stop the header showing a stray divider when search isn't wired. The separator between the search trigger and the header action icons rendered unconditionally, so a site that passed no search loader to DocsShell got a rule with nothing before it. It now appears only alongside the trigger it divides.

  • Stop the code block clipping Twoslash hover popups. A code block is a scroll container, so an absolutely positioned popup was cut off at its edges: hovering a token on the last line showed a sliver of the type and nothing else. CSS alone can't solve it, because an element that scrolls horizontally must also clip vertically. The popup is now promoted to fixed positioning on hover, so it escapes the block, and it flips above the token when there isn't room below. Popups also shrink to the width of the type rather than always filling the maximum. Without JavaScript the popup still opens on hover exactly as before.

    The popup's documentation also reads as documentation now. Sitting inside a <pre>, it inherited monospace and whatever token colour the hovered word happened to carry, so the prose looked like more code; it is now sans-serif and muted, with the signature alone staying mono. Each @param is its own line with a space after the tag, rather than the whole block running together as @paramcallbackfn.

    The @param tags also took on the colour of whatever word you hovered, because the dark-theme swap repaints every span inside a code block with --shiki-dark, which those spans inherited from the hovered token. The popup's documentation now defines that variable itself, so tags read as tags and their text as prose.

0.8.0

Minor Changes

  • Add an announcement bar. Set announcement in your config ({ text, tag?, href?, external?, id?, dismissible? }) to show a thin bar above the header on every page, with an optional leading tag pill (e.g. "New") carrying the accent color. It's dismissible by default and, once dismissed, stays dismissed (persisted in localStorage) until you change its id or text, so a new announcement shows again. A blocking head script keeps an already-dismissed bar from flashing in and shifting the layout on reload. The bar sits above the sticky header, so it scrolls away as the reader moves down the page.

  • Add nested sidebar sections. A page's section frontmatter now accepts an array as well as a string: section: [Guides, Advanced] nests the page inside a collapsible Advanced subsection under Guides. Nesting can go any number of levels deep; order still sorts each level, and a subsection takes the smallest order of its pages so it slots into reading order. In the sidebar, nested groups are collapsible (a caret on the right of the row), with the branch containing the current page expanded on load and the rest collapsed. Breadcrumbs and the prev/next pager follow the full nested path. Single-string section values are unchanged.

    Also makes sidebar ordering deterministic: pages that share an order (for example all defaulting to 0) now tie-break by title instead of by filesystem scan order, so the sidebar is stable across machines.

  • Add synced tab groups. Give related <Tabs> a syncKey and they share one selection: choosing (say) pnpm in any block selects it in every block with the same key, and the choice is remembered across reloads and navigation via localStorage. Ideal for package-manager, runtime, or OS variant blocks that a reader picks once. Tabs without a syncKey are unchanged, and the server still renders the default tab so there's no hydration flash.

0.7.0

Minor Changes

  • Make Darkmatter the built-in default theme. svelte-docsmith/theme.css now ships the Darkmatter tokens as its base, so importing it alone gives the Darkmatter look (near-monochrome with a warm orange primary) without importing a preset. Sites that want the previous look can import svelte-docsmith/themes/tangerine.css after theme.css.

    Also fixes Darkmatter's dark-mode destructive token, which was a teal carried over from the source preset instead of a red, so delete buttons and error surfaces now read as errors in dark mode.

0.6.0

Minor Changes

  • Add reading time and a page-feedback widget to DocsShell.

    Doc pages now show an estimated reading time (computed at build time from the page's word count, in the content index as readingTime); toggle it with the readingTime prop (default true). The new feedback prop renders a "Was this page helpful?" thumbs up/down widget at the foot of each page: pass true for the UI alone, or a (vote, path) => void callback to record votes.

0.5.1

Patch Changes

  • Declare @lucide/svelte as a runtime dependency. The shipped components import icons from @lucide/svelte/icons/*, but it was listed only under devDependencies, so standalone consumers (anything outside this monorepo, including projects scaffolded with create-svelte-docsmith) failed to build with "failed to resolve import @lucide/svelte/icons/...". The dogfood docs site masked it because the workspace already had the package installed.

0.5.0

Minor Changes

  • Add "Edit this page" and "Last updated" to the bottom of each doc page. Set editUrl in your config (the GitHub edit URL for your docs directory, e.g. https://github.com/you/repo/edit/main/apps/docs) and each page links to its own source. The "Last updated" date is read from each page's last git commit automatically, no config needed. Both sit just above the prev/next navigation.

  • Add llms.txt and "Copy page" support for AI tooling.

    The docsmith() plugin now emits a svelte-docsmith/llms module with each page's full markdown. Two framework-agnostic helpers, generateLlmsTxt and generateLlmsFullTxt, turn it into the llms.txt index and llms-full.txt corpus defined by the llmstxt.org standard, both following the sidebar reading order (grouped by section, sorted by order). Wire them into src/routes/llms.txt/+server.ts and src/routes/llms-full.txt/+server.ts.

    A new copyPage prop on DocsShell adds a "Copy page" split button to doc pages: copy the page as Markdown, view the raw .md, or open it in ChatGPT / Claude. Back it with a catch-all src/routes/[...slug].md/+server.ts over the same svelte-docsmith/llms index. See the SEO docs page.

  • Add a generateSitemap helper that builds a sitemap.xml body from the content index. Wire it into a src/routes/sitemap.xml/+server.ts and each doc page is listed with a <lastmod> from its last git commit. Pair it with a static/robots.txt pointing at the sitemap. See the SEO docs page.

Patch Changes

  • Accessibility pass on the shell: add a "Skip to content" link (visible on keyboard focus) that jumps to the main content, give <main> an id and focus target, and label the sidebar, header, mobile, and pagination navs so screen readers can tell the landmarks apart.

  • Normalize trailing slashes when matching the current route. /docs/intro/ and /docs/intro now resolve to the same page, so the SEO tags, "Edit this page" link, prev/next nav, sidebar highlight, and canonical URL all work regardless of the app's SvelteKit trailingSlash setting (they previously broke on a trailing slash).

0.4.0

Minor Changes

  • Add code-block annotations. On top of Shiki line highlighting, doc code fences now support the full set of comment-driven markers, each styled for light and dark:

    • Diff// [!code ++] / // [!code --], with colored backgrounds and +/- gutter markers (this finishes a feature that was styled but not wired).
    • Focus// [!code focus] dims the other lines and sharpens them on hover.
    • Error / warning// [!code error] / // [!code warning] tint a line red or amber.
    • Word highlight// [!code word:name] highlights a token.

    Markers are stripped from the rendered output. No new dependencies (the transformers ship with the @shikijs/transformers DocSmith already used). See the new Code blocks page in the docs.

Patch Changes

  • Point the README at the new create-svelte-docsmith scaffolder as the fastest way to start a new docs site.

0.3.0

Minor Changes

  • Add an ErrorPage component for 404 and error routes. Drop it into a SvelteKit +error.svelte to get a styled error screen that keeps the full site chrome — header, search, footer, theme — so a lost reader can navigate away or search instead of hitting a bare stack trace.

    <script lang="ts">
    	import { docs } from 'svelte-docsmith/content';
    	import { ErrorPage } from 'svelte-docsmith';
    	import { siteConfig } from '$lib/site-config';
    </script>
    
    <ErrorPage config={siteConfig} content={docs} home="/docs" homeLabel="Back to the docs" />
    

    It reads the status and message from the current page by default (404 → "Page not found"), and accepts status, title, message, home/homeLabel, search, and a children snippet for overrides.

  • Render each doc page's <h1> and lead subtitle from frontmatter. The markdown layout now emits the page heading from title and a lead paragraph from description, so the visible page title, the sidebar label, and the <title> tag all come from one source — pages start their body at ## and never repeat the title.

    Note: if a page previously wrote its own top-level # Heading, remove it to avoid two h1s (the frontmatter title now provides the page heading).

  • Emit a searchable body-text index. The docsmith() Vite plugin now serves a second virtual module, svelte-docsmith/search, alongside svelte-docsmith/content. It exports one record per page — { path, title, section, description, headings, text } — where text is the page's prose and headings reduced to plain text (frontmatter, <script> blocks, fenced code, tags, and markdown punctuation removed). It is a separate chunk from the nav index so it can be lazy-loaded only when needed. This is the data layer for upcoming full-text search; the new SearchDoc type is exported from the package root.

  • Add a full-text search palette. DocsShell now accepts a search loader that enables a ⌘K / Ctrl-K command palette:

    <DocsShell
      {config}
      content={docs}
      search={() => import('svelte-docsmith/search').then((m) => m.docs)}
    >
    

    The palette lazily fetches the generated svelte-docsmith/search index (a separate chunk, loaded only when search first opens), builds a FlexSearch index over each page's title, headings, description, and body, and links results to their pages with a context snippet. Header (⌘K button) and mobile (search icon) triggers share one dialog and one shortcut. Omit the prop to keep search off.

    The framework-agnostic engine is also exported for custom search UIs: createSearchEngine(docs) returning { search(query, limit?) }, plus the SearchEngine and SearchResult types.

    Adds flexsearch as a runtime dependency.

  • Emit SEO head tags from frontmatter. DocsShell now renders <title>, <meta name="description">, canonical, and Open Graph / Twitter Card tags for every page — no per-page wiring. Doc pages get their title and description straight from frontmatter (via the content index); other pages fall back to the site title and the new config.description.

    • New optional config fields: description (default meta description), url (canonical origin — enables <link rel="canonical"> and absolute og:url), and ogImage (default share image).
    • New DocsShell prop seo={{ title?, description? }} to set or override the head on non-doc pages (landing pages, custom routes).

    Previously pages shipped with no <title> or meta description at all.

  • Normalize the public component API ahead of v1.0 (breaking).

    • Tabs no longer takes an items array. Each TabItem now declares its own label, and Tabs builds the trigger row from them, so labels are written once instead of duplicated between items and each TabItem's value. The first tab is selected by default; pass value on Tabs to start elsewhere.

      <!-- before -->
      <Tabs items={['npm', 'pnpm']} value="npm">
          <TabItem value="npm">…</TabItem>
          <TabItem value="pnpm">…</TabItem>
      </Tabs>
      
      <!-- after -->
      <Tabs>
          <TabItem label="npm">…</TabItem>
          <TabItem label="pnpm">…</TabItem>
      </Tabs>
      
    • Callout's type prop is renamed to variant, matching Badge and the shadcn convention (<Callout variant="tip">). The CalloutType type is renamed to CalloutVariant and is now exported from the package root.

    • Badge gains an external prop: a linked badge (href) can now open in a new tab with rel="noopener noreferrer", matching Card and header/footer links.

Patch Changes

  • Polish anchor navigation and copy resilience.

    • Mobile table of contents is now server-rendered. The mobile TOC button and list are driven by the build-time heading index, so they're present on first paint (and without JavaScript) instead of popping in after hydration — matching the desktop TOC.
    • Heading anchor links are keyboard-accessible. The # link on each h2/h3 now reveals on focus (not just hover) and carries an accessible label, so it's reachable by keyboard and announced by screen readers.
    • Copying to the clipboard fails quietly. The copy button no longer throws an unhandled rejection in insecure contexts or when clipboard permission is denied; it logs a warning and leaves the button in its normal state.
  • Refresh the README and clean up stale source comments. The README's exports table now reflects the full public API (ErrorPage, createSearchEngine, the svelte-docsmith/search entry point, the theme presets) and gains short sections for search, SEO, error pages, and themes. Dead references to the old velite pipeline and to an internal PLAN.md were removed from the shipped source comments.

  • Fix PropsTable overflow on narrow content. The four-column table forced a horizontal scrollbar and crushed the Description column to a sliver whenever a prop had a long type signature (e.g. () => Promise<SearchDoc[]>). Each prop now renders as a stacked row — name, required badge, type chips, and default on one wrapping line, with the description full-width below — so nothing overflows and the description stays readable at every width. The PropsTable / Prop API is unchanged.

  • Fix the page layout header on mobile. DocsShell layout="page" (landing pages, the themes gallery, any non-doc page) previously rendered the full desktop header at every breakpoint, so on phones the nav links, version badge, and controls crammed together with no menu — and it sat at a different horizontal inset than the docs pages.

    Both layouts now share one header system: DocsHeader on desktop and the responsive mobile header below lg, so every page's header lines up and collapses to a hamburger identically. The mobile menu now also lists the configured header nav (config.nav) alongside the doc sidebar, so links like a top-level "Themes" are reachable from the mobile menu on doc pages too.

  • Fix server-rendered TOC anchors that could miss their heading. The build-time TOC extractor used a hand-rolled slugifier that only approximated rehype-slug, so headings with punctuation or symbols drifted — e.g. ## Anchors & copy buttons rendered the id anchors--copy-buttons but the TOC linked #anchors-copy-buttons, a dead anchor until hydration re-scanned the DOM. The extractor now slugs with the same github-slugger rehype-slug uses, including its duplicate-suffixing, so SSR TOC links resolve on first paint for every heading.

  • Fail loudly instead of silently on misconfiguration.

    • defineConfig now validates the footer. footer.copyright, footer.poweredBy, and footer.columns (each column's title/links, and every link's label/href) are checked, so a malformed footer throws a named error instead of rendering blank.
    • The docsmith() Vite plugin warns when it finds no pages. A missing content directory, or one with no titled +page.md files, now logs an actionable warning explaining the empty sidebar instead of leaving you guessing.
    • Invalid YAML frontmatter reports the file. A page with broken frontmatter throws an error naming the offending file, rather than a bare parser message.

0.2.0

Minor Changes

  • Add the darkmatter theme preset (svelte-docsmith/themes/darkmatter.css) — a near-monochrome shell with a warm orange primary and muted teal secondary, in light and dark.

    Add a "Powered by Svelte DocSmith" attribution to the footer. It is shown by default whenever a footer is configured; opt out with footer.poweredBy: false in your DocsmithConfig.

0.1.1

Patch Changes

  • Declare all runtime dependencies. @lucide/svelte, clsx, tailwind-merge, tailwind-variants, tw-animate-css, and @fontsource-variable/inter were devDependencies, so installs outside this monorepo failed to resolve imports from the shipped components and theme.css. They are now regular dependencies.

0.1.0

Minor Changes

  • Initial public release of svelte-docsmith — a framework for building documentation sites with Svelte 5 + SvelteKit.

    • docsmith() markdown pipeline (mdsvex + Shiki dual-theme highlighting + heading anchors) and Vite plugin (frontmatter-driven content index + ?source imports).
    • DocsShell layout, LiveExample, and docs components: Tabs/TabItem, Callout, Steps/Step, Card/CardGrid, Accordion/AccordionItem, Badge, Kbd, FileTree, PropsTable.
    • One-import theme contract (svelte-docsmith/theme.css) with a set of tweakcn-based theme presets and light/dark support.
    • defineConfig() for typed site configuration.