Skip to content

Lint rules

Every rule nimbus-docs lint and the build check, with what each flags, its options, and whether it fixes itself.

AI-generated · awaiting reviewUpdated

Nimbus checks content in two ways. Build validators catch what would break a page; they always run and fail the build. Authoring rules catch what renders but shouldn’t ship; they’re off until you turn them on, and nimbus-docs lint runs them. Linting shows how to turn rules on, set their severity per collection, and use --fix.

Rule Kind Fixes itself Options
nimbus/mdx-syntax Build validator — —
nimbus/component-pascalcase Build validator — —
nimbus/partial-exists Build validator — —
nimbus/duplicate-slug Build validator — —
nimbus/frontmatter-shape Authoring rule — —
nimbus/description-required Authoring rule — —
nimbus/internal-link Authoring rule — allowRelative, components, ignore
nimbus/redirected-link Authoring rule — components, ignore
nimbus/image-ref Authoring rule — aliases, components, ignore
nimbus/single-h1 Authoring rule — —
nimbus/heading-hierarchy Authoring rule — —
nimbus/heading-punctuation Authoring rule Yes —
nimbus/duplicate-heading-text Authoring rule — —
nimbus/code-block-lang Authoring rule — —
nimbus/code-block-prompt-prefix Authoring rule — —
nimbus/no-self-host-url Authoring rule — hosts
nimbus/bare-url Authoring rule — —
nimbus/list-marker-style Authoring rule Yes style
nimbus/emphasis-style Authoring rule Yes style

Build validators

These run during every build and can’t be turned off in the config. To skip one on a single page, use a nimbusDisableRules frontmatter entry or an inline disable comment; see Linting.

nimbus/mdx-syntax

A page’s MDX doesn’t parse, such as an unclosed tag or a stray {.

nimbus/component-pascalcase

A capitalised tag that’s neither registered in src/components.ts nor imported in the page. MDX would print it as text, so the build stops instead.

nimbus/partial-exists

<Render file="…" /> names a partial that doesn’t exist in src/content/partials/.

nimbus/duplicate-slug

Two pages resolve to the same URL.

Authoring rules

Turn these on in rules in the Nimbus integration options, with "error" or "warn". Rules marked fixes itself are applied by nimbus-docs lint --fix.

nimbus/frontmatter-shape

A page’s frontmatter isn’t valid YAML. It reports the parse error before other rules run. The content schema itself, such as unknown keys and wrong types, is checked by the build.

nimbus/description-required

A page has no description, which search results, share cards and agent indexes use. Turn it off for partials with a collection override.

A link to a page or file on the site that doesn’t exist. It reads the routes from the last build, so run astro build first. Options: ignore (paths to skip), allowRelative, components (extra components whose props hold links).

A link that works only through a permanent redirect; the message gives the URL to write instead. Options: ignore, components.

nimbus/image-ref

An image whose file doesn’t exist: a path starting with / is looked up in public/, a relative one next to the page. Options: aliases, ignore, components.

nimbus/single-h1

More than one # heading on a page. The page title already renders as the H1, so a page usually starts at ##.

nimbus/heading-hierarchy

A heading that skips a level, such as an ### straight after an #, which breaks the outline readers and screen readers use.

nimbus/heading-punctuation

A heading that ends in ., ,, :, ; or !. A question mark is allowed. Fixes itself.

nimbus/duplicate-heading-text

Two headings with the same text on one page. Their anchors collide, so links land on the wrong one.

nimbus/code-block-lang

A fenced code block without a language, which loses highlighting and the language badge.

nimbus/code-block-prompt-prefix

A shell code block whose lines start with $ . Readers copy the prompt along with the command.

nimbus/no-self-host-url

A link to the site written as an absolute URL on its own host, such as https://docs.example.com/guide, which breaks on previews. It always flags the configured site and localhost. Option: hosts (other hostnames that are the same site).

nimbus/bare-url

A bare URL in prose, or a link whose text is its URL. Write descriptive link text instead.

nimbus/list-marker-style

A bullet list that uses a different marker from the rest. Option: style, "dash" (default) or "asterisk". Fixes itself.

nimbus/emphasis-style

Italics that use a different delimiter from the rest. Option: style, "asterisk" (default) or "underscore". Fixes itself.

Build and check findings

The build and nimbus-docs check report these codes with the file and the fix. They aren’t lint rules, so they can’t be turned off.

Collection routing

Errors. See Collection URLs.

Code Cause
nimbus/collection-two-routes Several static routes for one collection, none at its default URL. Keep one.
nimbus/collection-same-url Two collections at one URL. Move one of their routes.
nimbus/collection-dynamic-folder A collection other than docs served only from routes under dynamic folders. Give it a static route.
nimbus/collection-docs-route docs routed away from the site root. Move the route to src/pages/[...slug].astro, or set Astro’s base.
nimbus/collection-version-route A docs version routed away from /<version>. Move the route there.
nimbus/collection-route-param A route helper in a route whose parameter isn’t slug ([...path].astro). Rename it to [...slug].astro.
nimbus/collection-owns-url A page under another collection’s moved URL. Move the page.

A page rendered from a route its collection isn’t served from fails the build, naming the route’s folder and the collection’s route file.

On request, such a route returns not found and logs the same advice. Routes under a dynamic folder, such as src/pages/[locale]/kit/[...slug].astro, aren’t reported, since their folder depends on the URL.

Warnings:

Code Cause
nimbus/collection-unread-route A route in a nested folder whose getStaticPaths Nimbus can’t read. The collection stays at its default URL.
nimbus/collection-alias-route Several static routes for one collection; the extra ones duplicate its pages in the sitemap and search. Delete them or redirect them.

Content sources

Warnings from nimbus-docs check. See Content from another repository.

Code Cause
nimbus/source-floating-ref A source pinned to a literal branch or tag, so its pages can change between builds.
nimbus/source-unreferenced A source that no collection and no api entry reads.

Reserved codes

nimbus/orphan-page and nimbus/sidebar-entry are reserved for future rules. Configuring either as "error" or "warn" stops the build with a message saying so; "off" is accepted.

Type to search…

↑↓ navigate↵ selectEsc close