diff --git a/.eslintrc.cjs b/.eslintrc.cjs
deleted file mode 100644
index ba40c4e..0000000
--- a/.eslintrc.cjs
+++ /dev/null
@@ -1,24 +0,0 @@
-module.exports = {
- root: true,
- parser: '@typescript-eslint/parser',
- parserOptions: {
- ecmaVersion: 2022,
- sourceType: 'module',
- ecmaFeatures: { jsx: true },
- },
- env: { browser: true, node: true, es2022: true },
- plugins: ['@typescript-eslint', 'react'],
- extends: [
- 'eslint:recommended',
- 'plugin:@typescript-eslint/recommended',
- 'plugin:react/recommended',
- 'plugin:react/jsx-runtime',
- 'prettier',
- ],
- settings: { react: { version: '18' } },
- ignorePatterns: ['build/', '.docusaurus/', 'node_modules/'],
- rules: {
- '@typescript-eslint/no-explicit-any': 'off',
- '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
- },
-};
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 6fd0c7f..388c5bb 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -4,12 +4,12 @@
# Docs: https://docs.github.com/code-security/dependabot/dependabot-version-updates
version: 2
updates:
- - package-ecosystem: "npm"
- directory: "/"
+ - package-ecosystem: 'npm'
+ directory: '/'
schedule:
- interval: "monthly"
+ interval: 'monthly'
open-pull-requests-limit: 1
groups:
all-dependencies:
- patterns: ["*"]
- update-types: ["major", "minor", "patch"]
+ patterns: ['*']
+ update-types: ['major', 'minor', 'patch']
diff --git a/.saggar/project.json b/.saggar/project.json
index a5311f6..3cb9717 100644
--- a/.saggar/project.json
+++ b/.saggar/project.json
@@ -1,3 +1,3 @@
{
- "name" : "Docusaurus plugins docs"
-}
\ No newline at end of file
+ "name": "Docusaurus plugins docs"
+}
diff --git a/CLAUDE.md b/CLAUDE.md
index d94ca7d..7e86288 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,7 +4,7 @@ Guidance for Claude Code when working in this repository.
## Project
-`docusaurus-plugins-docs` — a Docusaurus v3 documentation site for a family of Docusaurus plugins. The site installs and demos most plugins it documents, so docs and live behaviour stay in sync. Exceptions (`starter`, `marginalia`) are called out below.
+`docusaurus-plugins-docs` is a Docusaurus v3 documentation site for a family of Docusaurus plugins. The site installs and demos several plugins it documents. Embeds, Marginalia, Open with LLM, Speccy, and Starter aren't registered here. Their guides explain how to use them on your own site.
- Entry: `docusaurus.config.ts`
- Content: `docs/` (per-plugin nested structure), `blog/`, `src/pages/`
@@ -15,18 +15,21 @@ Guidance for Claude Code when working in this repository.
Each is a standalone npm package (not a workspace). Most install from the npm registry; `new-post-toast` and `starter` install from local tarballs in `vendor/` (see `package.json` — `file:./vendor/*.tgz`) because the published versions need the workarounds documented below:
-| Directory (this repo) | Package | Docs route |
-| --------------------- | ---------------------------------- | ------------------------ |
-| — | `docusaurus-plugin-banner` | `/docs/banner/*` |
-| — | `docusaurus-plugin-cookie-consent` | `/docs/cookie-consent/*` |
-| — | `docusaurus-plugin-glossary` | `/docs/glossary/*` |
-| — | `docusaurus-plugin-marginalia` | `/docs/marginalia/*` |
-| — | `docusaurus-plugin-mcp` | `/docs/mcp/*` |
-| — | `docusaurus-plugin-new-post-toast` | `/docs/new-post-toast/*` |
-| — | `docusaurus-plugin-omg` | `/docs/omg/*` |
+| Directory (this repo) | Package | Docs route |
+| --------------------- | ----------------------------------- | ------------------------- |
+| — | `docusaurus-plugin-banner` | `/docs/banner/*` |
+| — | `docusaurus-plugin-cookie-consent` | `/docs/cookie-consent/*` |
+| — | `docusaurus-plugin-embeds` | `/docs/embeds/*` |
+| — | `docusaurus-plugin-glossary` | `/docs/glossary/*` |
+| — | `docusaurus-plugin-marginalia` | `/docs/marginalia/*` |
+| — | `docusaurus-plugin-mcp` | `/docs/mcp/*` |
+| — | `docusaurus-plugin-new-post-toast` | `/docs/new-post-toast/*` |
+| — | `docusaurus-plugin-open-with-llm` | `/docs/open-with-llm/*` |
+| — | `docusaurus-plugin-omg` | `/docs/omg/*` |
| — | `docusaurus-plugin-share-selection` | `/docs/share-selection/*` |
-| — | `docusaurus-plugin-starter` | `/docs/starter/*` |
-| — | `docusaurus-plugin-statuspage` | `/docs/statuspage/*` |
+| — | `docusaurus-plugin-speccy` | External Speccy guide |
+| — | `docusaurus-plugin-starter` | `/docs/starter/*` |
+| — | `docusaurus-plugin-statuspage` | `/docs/statuspage/*` |
The source of each plugin lives in its own sibling repo under `~/Development/docusaurus/`. **Do not** introduce a monorepo or workspace spanning them — they are maintained as independent repos and that boundary is load-bearing.
diff --git a/README.md b/README.md
index 731fc3f..85c4775 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,24 @@
# docusaurus-plugins-docs
-Documentation site for a family of Docusaurus v3 plugins — and a live demo of all of them. Every plugin documented here is installed and running on this site, so the docs are dogfooded by definition.
+Documentation site for a family of Docusaurus v3 plugins, with live demos of several plugins. Embeds, Marginalia, Open with LLM, Speccy, and Starter aren't registered on this site. Their guides explain how to use them on your own site.
## Plugins
-| Plugin | Docs |
-| ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
-| [`docusaurus-plugin-banner`](https://www.npmjs.com/package/docusaurus-plugin-banner) | [`/docs/banner`](./docs/banner) |
-| [`docusaurus-plugin-cookie-consent`](https://www.npmjs.com/package/docusaurus-plugin-cookie-consent) | [`/docs/cookie-consent`](./docs/cookie-consent) |
-| [`docusaurus-plugin-glossary`](https://www.npmjs.com/package/docusaurus-plugin-glossary) | [`/docs/glossary`](./docs/glossary) |
-| `docusaurus-plugin-marginalia` (not yet published) | [`/docs/marginalia`](./docs/marginalia) |
-| [`docusaurus-plugin-new-post-toast`](https://www.npmjs.com/package/docusaurus-plugin-new-post-toast) | [`/docs/new-post-toast`](./docs/new-post-toast) |
-| [`docusaurus-plugin-omg`](https://www.npmjs.com/package/docusaurus-plugin-omg) | [`/docs/omg`](./docs/omg) |
-| [`docusaurus-plugin-speccy`](https://www.npmjs.com/package/docusaurus-plugin-speccy) | [Speccy docs](https://github.com/mcclowes/speccy/blob/main/apps/docusaurus-demo/docs/docusaurus.md) |
-| [`docusaurus-plugin-starter`](https://www.npmjs.com/package/docusaurus-plugin-starter) | [`/docs/starter`](./docs/starter) |
-| [`docusaurus-plugin-statuspage`](https://www.npmjs.com/package/docusaurus-plugin-statuspage) | [`/docs/statuspage`](./docs/statuspage) |
+| Plugin | Docs |
+| ------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------- |
+| [`docusaurus-plugin-banner`](https://www.npmjs.com/package/docusaurus-plugin-banner) | [`/docs/banner`](./docs/banner) |
+| [`docusaurus-plugin-cookie-consent`](https://www.npmjs.com/package/docusaurus-plugin-cookie-consent) | [`/docs/cookie-consent`](./docs/cookie-consent) |
+| [`docusaurus-plugin-embeds`](https://www.npmjs.com/package/docusaurus-plugin-embeds) | [`/docs/embeds`](./docs/embeds) |
+| [`docusaurus-plugin-glossary`](https://www.npmjs.com/package/docusaurus-plugin-glossary) | [`/docs/glossary`](./docs/glossary) |
+| `docusaurus-plugin-marginalia` (not yet published) | [`/docs/marginalia`](./docs/marginalia) |
+| [`docusaurus-plugin-mcp`](https://www.npmjs.com/package/docusaurus-plugin-mcp) | [`/docs/mcp`](./docs/mcp) |
+| [`docusaurus-plugin-new-post-toast`](https://www.npmjs.com/package/docusaurus-plugin-new-post-toast) | [`/docs/new-post-toast`](./docs/new-post-toast) |
+| [`docusaurus-plugin-open-with-llm`](https://www.npmjs.com/package/docusaurus-plugin-open-with-llm) | [`/docs/open-with-llm`](./docs/open-with-llm) |
+| [`docusaurus-plugin-omg`](https://www.npmjs.com/package/docusaurus-plugin-omg) | [`/docs/omg`](./docs/omg) |
+| [`docusaurus-plugin-share-selection`](https://www.npmjs.com/package/docusaurus-plugin-share-selection) | [`/docs/share-selection`](./docs/share-selection) |
+| [`docusaurus-plugin-speccy`](https://www.npmjs.com/package/docusaurus-plugin-speccy) | [Speccy docs](https://github.com/mcclowes/speccy/blob/main/apps/docusaurus-demo/docs/docusaurus.md) |
+| [`docusaurus-plugin-starter`](https://www.npmjs.com/package/docusaurus-plugin-starter) | [`/docs/starter`](./docs/starter) |
+| [`docusaurus-plugin-statuspage`](https://www.npmjs.com/package/docusaurus-plugin-statuspage) | [`/docs/statuspage`](./docs/statuspage) |
## Development
diff --git a/docs/glossary/component.md b/docs/glossary/component.md
index ce5ba08..708e03b 100644
--- a/docs/glossary/component.md
+++ b/docs/glossary/component.md
@@ -49,6 +49,10 @@ We use
## When to use it manually
+Omitting `routePath` uses the default glossary plugin instance's configured route. For example, with plugin `routePath: '/terms'` and a term ID of `api`, `` links to `/terms#api`. An explicit `routePath="/glossary"` still overrides that configuration. `documentationPath` or the term's `documentation.path` takes precedence over glossary-entry links.
+
+This fallback fix is unreleased. Until it is published, pass `routePath` explicitly when using a custom glossary route.
+
- The auto-linker won't touch terms inside code blocks, existing links, or existing MDX components — use the component manually if you want those matched
- When you need a one-off override of the term text or definition (e.g. localized phrasing) without editing `glossary.json`
diff --git a/docs/glossary/configuration.md b/docs/glossary/configuration.md
index 6119291..8c58a7c 100644
--- a/docs/glossary/configuration.md
+++ b/docs/glossary/configuration.md
@@ -19,6 +19,16 @@ title: Configuration
`generatePage`, `linkOnlyFirstOccurrence`, and category badges are unreleased. See
[embedding a glossary](component.md#embedding-a-glossary-in-a-doc) for docs sidebar support.
+Manual `` links to glossary entries inherit the default plugin instance's `routePath`. A nonempty `routePath` prop overrides that route; when neither is available, the component uses `/glossary`.
+
+The configured-route fallback fix is unreleased. Pass `routePath` explicitly on manual terms until the fix is published.
+
+## Anchor validation
+
+Standalone and embedded glossaries register their rendered term IDs and letter-navigation IDs with Docusaurus. Valid links to these anchors pass a build with `onBrokenAnchors: 'throw'`, including sites hosted under a base URL such as `/sub/`. Missing anchors still fail validation.
+
+The anchor-registration fix is unreleased and raises the minimum supported Docusaurus version from 3.0 to 3.1, which introduced the anchor collector API. Published versions may report valid glossary-entry anchors as broken.
+
## Glossary JSON schema
```ts
diff --git a/docs/glossary/getting-started.md b/docs/glossary/getting-started.md
index b151a64..5b0de54 100644
--- a/docs/glossary/getting-started.md
+++ b/docs/glossary/getting-started.md
@@ -11,6 +11,8 @@ title: Getting started
npm install docusaurus-plugin-glossary
```
+The unreleased anchor-registration fix requires Docusaurus 3.1 or newer. See [anchor validation](configuration.md#anchor-validation) for the support change.
+
## Use the preset
The easiest setup is to swap `@docusaurus/preset-classic` for the plugin's preset wrapper — it configures the classic preset **and** wires up the auto-linking remark plugin in one step:
diff --git a/docs/glossary/overview.md b/docs/glossary/overview.md
index 7e3ef3b..f957315 100644
--- a/docs/glossary/overview.md
+++ b/docs/glossary/overview.md
@@ -32,7 +32,8 @@ Full runnable example site at [`examples/docusaurus-v3/`](https://github.com/mcc
## Compatibility
-- Docusaurus `^3.0.0` with MDX v3
+- Published versions support Docusaurus `^3.0.0` with MDX v3.
+- The unreleased anchor-registration fix requires Docusaurus `^3.1.0`.
- React `^18` or `^19`
- Node.js 20 or newer
diff --git a/docs/intro.md b/docs/intro.md
index 5cd53f3..dccd764 100644
--- a/docs/intro.md
+++ b/docs/intro.md
@@ -7,7 +7,7 @@ sidebar_position: 1
# Docusaurus plugins
-This site documents — and dogfoods — a family of Docusaurus v3 plugins. Every plugin you read about here is also installed and configured in the site you're reading it on, so each page is itself an example of the plugin in action.
+This site documents a family of Docusaurus v3 plugins and runs several as live demos. Embeds, Marginalia, Open with LLM, Speccy, and Starter aren't live demos on this site. Their guides explain how to use them on your own site.
## The plugins
diff --git a/docs/marginalia/advanced/theming.md b/docs/marginalia/advanced/theming.md
index 66734a4..d912fd1 100644
--- a/docs/marginalia/advanced/theming.md
+++ b/docs/marginalia/advanced/theming.md
@@ -48,20 +48,20 @@ Wrap overrides in `[data-theme='dark']`:
## Variable reference
-| Variable | Maps to (default) | Purpose |
-| ----------------------------- | ------------------------------- | ---------------------------- |
-| `--marginalia-accent` | `--ifm-color-primary` | Anchor underline, hot border |
-| `--marginalia-accent-soft` | `--ifm-color-primary-lightest` | `link` kind swatch |
-| `--marginalia-accent-strong` | `--ifm-color-primary-darker` | `code` swatch, PUT/PATCH chip |
-| `--marginalia-danger` | `--ifm-color-danger` | `warning` / `endpoint` swatch |
-| `--marginalia-surface` | `--ifm-card-background-color` | Card + TOC background |
-| `--marginalia-border` | `--ifm-color-emphasis-300` | Card border, dividers |
-| `--marginalia-text` | `--ifm-font-color-base` | Body text inside cards |
-| `--marginalia-heading` | `--ifm-heading-color` | Card titles |
-| `--marginalia-muted` | `--ifm-color-emphasis-700` | Kind labels, muted copy |
-| `--marginalia-font-mono` | `--ifm-font-family-monospace` | Kind labels, pills, endpoint |
-| `--marginalia-font-serif` | `--ifm-font-family-base` | Card titles |
-| `--marginalia-navbar-offset` | `--ifm-navbar-height` | Sticky TOC offset |
+| Variable | Maps to (default) | Purpose |
+| ---------------------------- | ------------------------------ | ----------------------------- |
+| `--marginalia-accent` | `--ifm-color-primary` | Anchor underline, hot border |
+| `--marginalia-accent-soft` | `--ifm-color-primary-lightest` | `link` kind swatch |
+| `--marginalia-accent-strong` | `--ifm-color-primary-darker` | `code` swatch, PUT/PATCH chip |
+| `--marginalia-danger` | `--ifm-color-danger` | `warning` / `endpoint` swatch |
+| `--marginalia-surface` | `--ifm-card-background-color` | Card + TOC background |
+| `--marginalia-border` | `--ifm-color-emphasis-300` | Card border, dividers |
+| `--marginalia-text` | `--ifm-font-color-base` | Body text inside cards |
+| `--marginalia-heading` | `--ifm-heading-color` | Card titles |
+| `--marginalia-muted` | `--ifm-color-emphasis-700` | Kind labels, muted copy |
+| `--marginalia-font-mono` | `--ifm-font-family-monospace` | Kind labels, pills, endpoint |
+| `--marginalia-font-serif` | `--ifm-font-family-base` | Card titles |
+| `--marginalia-navbar-offset` | `--ifm-navbar-height` | Sticky TOC offset |
## Swizzling
diff --git a/docs/marginalia/configuration.md b/docs/marginalia/configuration.md
index 3e20c92..52b65b1 100644
--- a/docs/marginalia/configuration.md
+++ b/docs/marginalia/configuration.md
@@ -10,8 +10,8 @@ components.
## Plugin options
-| Option | Type | Default | Description |
-| --------- | --------- | ------- | ------------------------------------------ |
+| Option | Type | Default | Description |
+| --------- | --------- | ------- | ----------------------------------------------------- |
| `enabled` | `boolean` | `true` | Toggle the plugin without removing it from `plugins`. |
## ``
diff --git a/docs/marginalia/getting-started.md b/docs/marginalia/getting-started.md
index fa45bbe..9a6a872 100644
--- a/docs/marginalia/getting-started.md
+++ b/docs/marginalia/getting-started.md
@@ -33,7 +33,7 @@ import { Marginalia, Aside, Endpoint } from '@theme/Marginalia';
-The concept of has shaped software thinking.
+The concept of has shaped software thinking.
Request a session with .
diff --git a/docs/mcp/advanced/openapi.md b/docs/mcp/advanced/openapi.md
index a3a83d7..5aa655b 100644
--- a/docs/mcp/advanced/openapi.md
+++ b/docs/mcp/advanced/openapi.md
@@ -24,10 +24,10 @@ Point the plugin at one or more OpenAPI specs and it indexes every operation and
Configuring `openapi` adds three more tools to the server. Without it, they don't appear at all.
-| Tool | Description |
-| -------------- | ------------------------------------------------------------------------ |
-| `list_apis` | The indexed specs, with versions and operation counts. |
-| `search_api` | Search operations and webhook events by path, name, summary, or tag. |
+| Tool | Description |
+| -------------- | ------------------------------------------------------------------------------------- |
+| `list_apis` | The indexed specs, with versions and operation counts. |
+| `search_api` | Search operations and webhook events by path, name, summary, or tag. |
| `get_endpoint` | Full detail of one operation: params, request body, responses, with `$ref`s resolved. |
## Why resolved schemas matter
diff --git a/docs/mcp/configuration.md b/docs/mcp/configuration.md
index 486e471..5c1217c 100644
--- a/docs/mcp/configuration.md
+++ b/docs/mcp/configuration.md
@@ -5,16 +5,16 @@ title: Configuration
# Configuration
-| Option | Type | Default | Description |
-| --------------------------------- | -------------------------- | -------------------- | ------------------------------------------------------------------------ |
-| `server.name` / `server.version` | `string` | site title / `0.0.0` | Identity reported to MCP clients. |
-| `instructions` | `string` | — | One-line steer shown to the model on connect. |
-| `docsDir` | `string` | `docs` | Docs source dir, relative to the site. |
-| `routeBasePath` | `string` | `/` | Route base path your docs are served under. Used to build real page URLs. |
-| `openapi` | `{ name, spec }[]` | `[]` | Specs to index. `spec` is a JSON or YAML path relative to the site. See [OpenAPI](./advanced/openapi.md). |
-| `exclude` | `string[]` | `[]` | Substrings; any source-relative doc path containing one is skipped. |
-| `outputDir` | `string` | `mcp` | Snapshot location, relative to the build `outDir`. |
-| `endpoint` | `string` | `/mcp` | Default endpoint path for the CLI server. |
+| Option | Type | Default | Description |
+| -------------------------------- | ------------------ | -------------------- | --------------------------------------------------------------------------------------------------------- |
+| `server.name` / `server.version` | `string` | site title / `0.0.0` | Identity reported to MCP clients. |
+| `instructions` | `string` | — | One-line steer shown to the model on connect. |
+| `docsDir` | `string` | `docs` | Docs source dir, relative to the site. |
+| `routeBasePath` | `string` | `/` | Route base path your docs are served under. Used to build real page URLs. |
+| `openapi` | `{ name, spec }[]` | `[]` | Specs to index. `spec` is a JSON or YAML path relative to the site. See [OpenAPI](./advanced/openapi.md). |
+| `exclude` | `string[]` | `[]` | Substrings; any source-relative doc path containing one is skipped. |
+| `outputDir` | `string` | `mcp` | Snapshot location, relative to the build `outDir`. |
+| `endpoint` | `string` | `/mcp` | Default endpoint path for the CLI server. |
## Examples
diff --git a/docs/mcp/overview.md b/docs/mcp/overview.md
index ef6291b..6fb94a5 100644
--- a/docs/mcp/overview.md
+++ b/docs/mcp/overview.md
@@ -26,13 +26,13 @@ Docusaurus sites usually deploy as static files, which can't serve a live endpoi
The server exposes six read-only tools:
-| Tool | Description |
-| --------------------- | ------------------------------------------------------------------------ |
-| `search_docs` | Full-text search the docs. Returns URL, title, category, snippet. |
-| `read_doc` | Full markdown of a page by URL. |
-| `list_doc_categories` | Categories with page counts. |
-| `list_apis` | The indexed OpenAPI specs with versions and counts. |
-| `search_api` | Search operations and webhook events by path, name, summary, or tag. |
+| Tool | Description |
+| --------------------- | -------------------------------------------------------------------------------- |
+| `search_docs` | Full-text search the docs. Returns URL, title, category, snippet. |
+| `read_doc` | Full markdown of a page by URL. |
+| `list_doc_categories` | Categories with page counts. |
+| `list_apis` | The indexed OpenAPI specs with versions and counts. |
+| `search_api` | Search operations and webhook events by path, name, summary, or tag. |
| `get_endpoint` | Full detail of one operation: params, request body, responses, `$ref`s resolved. |
The three `*_api` tools only appear when you configure [`openapi`](./advanced/openapi.md). Everything is read-only.
diff --git a/docs/omg/advanced/renderers.md b/docs/omg/advanced/renderers.md
index 1512274..5be0303 100644
--- a/docs/omg/advanced/renderers.md
+++ b/docs/omg/advanced/renderers.md
@@ -81,7 +81,7 @@ If you just want a single embeddable page without another plugin, drop a Swagger
SwaggerUIBundle({
url: '/api/todo.yaml',
dom_id: '#swagger-ui',
- })
+ });