Minor Changes
-
#364
98bb186Thanks @MohamedH1998! - -nimbus-docs add <url>hands the Markdown recipe at an https URL to your coding agent, the same wayadd <feature>does, with a note saying where it came from. -
#389
a6bede5Thanks @MohamedH1998! - - The five agent route factories take{ body }, a function from the text Nimbus would send to the text to send; theETagand304are over what it returns. Use it instead of wrappingGETto change a document's body, which kept Nimbus's tag over its own bytes.- The build and
nimbus-docs checkwarn when a route file calls an agent factory from a shape Nimbus doesn't record, such assrc/pages/[...slug].md.ts, naming the file to move the call to and the recorded route it may answer ahead of. A prerenderedmarkdownRoute()ormarkdownSourceRoute()file at such a shape then fails the build.migratecarries an entry. - The build's agent surfaces line counts the pages the Markdown routes cover:
Page Markdown: served for 12 of 340 pages.
- The build and
-
#374
da9e84aThanks @MohamedH1998! - - Agent surfaces follow the site's route files: deletesrc/pages/[...slug]/index.md.tsand no page Markdown is built, linked, advertised or negotiated; the same goes for the.mdxsource,llms.txt, the section indexes andllms-full.txt, each by its own route. A Markdown route that covers part of the site publishes Markdown for that part only.IndexedEntry.markdownUrland the page helpers'markdownUrlareundefinedwhen no route serves them. NewgetPublishedLlmsUrl()returns thellms.txta route serves for a collection, ornull;getCollectionLlmsUrl()is unchanged.- The MCP server reads every page whether or not its Markdown is published;
list_pagesandget_pagereturnmarkdownUrlonly when it is, andget_pagetakes anoffsetto read on from a cut. - The build log and
nimbus-docs check(nimbus/agent-surfaces) say which surfaces the routes serve, naming the route files.astro devrestarts when one of those files is added or removed.
-
#342
eb60d78Thanks @MohamedH1998! - - An API page's Authorization section shows each scheme's header example and scopes again, and names HTTP Bearer and Basic schemes (Authorization: Bearer <token>); its Markdown names the scheme too.ApiAuthViewhas an optionalhttpScheme, the HTTP scheme lowercased (bearer,basic).
-
#341
7f146e0Thanks @MohamedH1998! - - API pages and their Markdown show fields declared beside a union, such as a DNS record'sid,created_onandmetabeside its record types: the fields first, then the options that add to them.- Object and array-of-object parameters list their fields, as body fields do.
- A request or response body that isn't an object shows its type, and its badge names its media type instead of "JSON".
-
#375
41a92a6Thanks @MohamedH1998! - - Request-rendered API collections no longer bake their pages' Markdown. The.mdroute,Accept: text/markdownand MCPget_pagerender it on request from the page record the server already holds, through the serialization the build uses, so the bytes equal the file a build-rendered site writes. Docs pages, static sites and"build"collections are unchanged.- A page's Markdown response carries an
ETagof its bytes, and a request that prefers Markdown is answered without rendering the page's HTML. - On a site whose
llms.txt, sectionllms.txtandllms-full.txtroutes render on request, those documents are no longer baked either: the server makes the indexes from the build's page list when asked, andllms-full.txtbecomes an index of per-section parts, each assembled on its first request and kept for the build's life; a section over the 25 MiB part limit answers with an index of its sub-sections, sized from the build's records (exact for built bodies, an estimate for pages made on request) without rendering a page, and a part that proves bigger while assembling still stops at the limit. Build-rendered routes keep writing the same files. - A versioned API gets one
llms-fullpart per version on such a site:/<api>/llms-full.txtfor the default and, for each other version, the same URL with the version in the query (?version=v1, or the family's own parameter) or, for path-versioned families, in the path right after the API's mount (/api/v1/tags/llms-full.txt). Query-versioned pages beyond the default are in no index and at no.mdURL, as before.
- A page's Markdown response carries an
-
#347
a2a14f3Thanks @MohamedH1998! - -getApiNav(Astro, { collection, href })from@cloudflare/nimbus-docs/runtimereturns the API sidebar opened at one API page, from any route, so a site's own pages can show the same sidebar as its API pages.ApiSidebarPanelinapi-sidebaris that sidebar as one component: the filter, the tree, groups that load when opened, and open groups and scroll kept across pages.ApiLayoutrenders it, and a page of your own renders it withgetApiNav.- With
sidebar: "on-demand", the API sidebar can live outsideApiLayoutwithout failing the components check. - A page of your own can use
DocsLayoutwith just atitle:sidebar,headings,breadcrumbsandprevNextare optional.
-
#369
645df3cThanks @MohamedH1998! - - On narrow screens an API operation's request sample comes right after its header, before the fields, so it's on the first screen for most pages.- On wide screens the page text sits in a 40rem column beside the request sample, which starts at the top and stays pinned.
- The description follows the page actions, and the endpoint box shows the operation's path, which opens the full URL in a popover; copy still copies the full URL.
-
#345
dea1e3dThanks @MohamedH1998! - - On wide screens an API page's code rail fits the viewport: its header stays put and a long sample scrolls both ways with both scrollbars in view. Code you can scroll gets a focus ring.- The endpoint box cuts the server address before the path, so the path stays visible.
- Spec descriptions get spaced headings and inline-code chips.
- On wide screens the previous/next bar spans the body and the code rail.
- A field with more than six allowed values lists every one on an "Allowed values" line, instead of behind a hover tooltip.
- Request body and Returns have anchors (
#request-body,#responses), and every API section heading gets a "#" link.headingAnchors()also links headings inside anydata-nb-heading-anchorscontainer. - CodeGroup's copy button comes before its code in Tab order.
- Every keyboard shortcut lives in
src/lib/shortcuts.ts: change a key or set it tofalseto remove it.[and]go to the previous and next page from anywhere on the page, and readers can turn single-key shortcuts off from the search dialog.onShortcut,syncShortcutHints, the key labels and the reader's switch are in@cloudflare/nimbus-docs/client. - A
Switchcomponent (nimbus-docs add switch): an on/off control. The shortcuts switch in the search dialog uses it.
-
#331
c3d3cc6Thanks @MohamedH1998! - - A parameter's ownexample, or the first of itsexampleswith an inline value, now reaches its API page and Markdown, ahead of its schema's.- On a split API home,
ApiHome.anchorPartssays which part holds each heading, andTOCItemtakes an optionalhref. homePartTarget()in@cloudflare/nimbus-docs/clienttells which heading a click on the home is going to.
- On a split API home,
-
#378
5bc942dThanks @MohamedH1998! - - Add Try it to API pages: withtryIton an API and theapi-try-itcomponent, readers send requests from the code rail, straight from the browser or through the site's proxy, and see the response.ApiLayoutandApiCodeRailtake the panel through atry-itslot.- A JSON body can be edited as JSON or as fields; switching keeps every change.
-
#376
28a3df0Thanks @MohamedH1998! - - The API code rail shows the reader's saved or linked code sample from the first paint, so it no longer resizes just after the page loads.choiceStateScriptin@cloudflare/nimbus-docs/runtimeshows a remembered choice among server-rendered panels before the page paints. Mark the group withdata-nb-choice(its storage key) and optionallydata-nb-choice-param, its panels withdata-nb-choice-paneland optionallydata-nb-choice-kind, and its<select>withdata-nb-choice-select, then render the script right after the group.- If you take the
api-code-railupdate, rename its old attributes in your own CSS, scripts and tests too.
-
#327
03c1609Thanks @MohamedH1998! - New sites'DocsLayoutandApiLayoutput the page's content before the sidebar in the HTML, so agents and text readers reach it first; pages look the same. The page actions row is a<nav aria-label="Page actions">, and the API union explorer's "View X schema →" link, which repeats the branch name's link, is markeddata-markdown-ignore.nimbus-docs migratelists them for existing sites as optional. -
#310
d993e42Thanks @MohamedH1998! - Update Astro, Markdown, API parsing, image processing, and starter dependencies. Support Satori 0.63 alongside 0.26, while retaining the declaration bundler that preserves API extension types.Node.js 22.23.4 or newer is now required by Nimbus and newly generated sites. Upgrade Node locally and in CI and hosting build environments before updating Nimbus. Sites using Astro below 7.2.10 must also update Astro; new starters use Astro 7.4.2.
Keep deployment-root sitemap URLs aligned with Astro's canonical URL for static and request-rendered pages, including sites hosted under a base path.
-
#343
372b6a1Thanks @MohamedH1998! - - A page can set its language and share-image alt text:NimbusHead,BaseLayoutandDocsLayouttakelocaleandsocialImageAlt. The page's<html lang>,og:localeand JSON-LDinLanguagefollow it, and a right-to-left language setsdir="rtl", as a right-to-leftconfig.localenow does on every page.og:localeis written in Open Graph's form (en_US) instead of as a BCP 47 tag (en-US), and left out when the tag has no two-letter region.getPageLanguage()in@cloudflare/nimbus-docs/runtimegives a page's{ lang, dir }.HastPluginDefinitionandHastVisitorContextare exported from@cloudflare/nimbus-docs/markdown, for typing your own plugins.
-
#344
5229f0eThanks @MohamedH1998! - - Search: each sub-result is its own option the arrow keys reach, result links leave the Tab order, Home and End move the caret unless a result is active, and a reader on a deprecated version's page searches that version.- The search dialog stays open when a text selection is dragged onto its backdrop.
- The table of contents leaves out headings without an anchor and marks the last real heading active at the bottom of the page.
- The sidebar filter shows the groups around a matching nested group.
- The theme toggle shows the right icon from first paint, and a dismissed banner no longer flashes before it disappears.
- The destructive button's text is readable in dark mode.
- Steps counts from a Markdown list's own start (
3.). - A failed copy after a successful one shows the copy icon again.
- Image zoom fills an aspect-ratio frame with a
<picture>. - The hidden note for AI agents is no longer two invisible Tab stops.
-
#396
c3d1f0aThanks @MohamedH1998! - -tryIt.testKeyis a public test key that Try it's API key and bearer token fields start with, so a reader can send a request without entering anything.- Try it's proxy refuses a request that sets
X-Real-IP,True-Client-IP,Forwarded,X-Forwarded-*orCF-Connecting-IP, so a caller can't pose as another address to the API.
- Try it's proxy refuses a request that sets
Patch Changes
-
#385
e9ad838Thanks @sansynx! -addexits with an error when a component's npm dependencies fail to install, so scripts can detect a partial install. -
#351
769f831Thanks @MohamedH1998! - -addskips a dependency the site already has at the registry's version, and installs a pinned one with its exact version.- A failed install or resolve ends with the error mark in a terminal, and prints as an error without one.
-
#327
03c1609Thanks @MohamedH1998! - An API page's Markdown carries what the page shows: the fields of named and discriminator-mapped union branches, each operation's method and path on tag pages, the full request URL on operation pages, and, on the API home, every endpoint and webhook under its section. An API with more than 150 endpoints lists each section with its endpoint count instead, so its home stays readable in one go. It words them as the page does: "One of the following:",array of X, andmaximum: 500 · minimum: 1 · default: 50. Nested types such asarray<array<number>>no longer lose their brackets.With
schemaPages: true, a field that chooses between named schemas, such as a DNS record that is an A, MX or CNAME record, still previews them, and a named schema anywhere else in a field, such as an id-or-object field, links to its schema page instead of repeating it. Large APIs with schema pages build several times faster and smaller. Without schema pages, previews are as they were: they're the only place those fields appear. -
#368
00e64f3Thanks @MohamedH1998! - - An API response example is one Tab stop, not two.- Long field names and inline code in field descriptions wrap on narrow screens, so API pages no longer scroll sideways on a phone.
-
#398
2467a04Thanks @MohamedH1998! - -nimbus-docs checkandadd adapter-cloudflareaccept@astrojs/cloudflare14.4 instead of asking for 14.3. -
#346
bdd81f7Thanks @MohamedH1998! - - Inastro dev, new pages, and collections added tocontent.config.ts, reach pages, Markdown, the sidebar andllms.txtwithout a restart.- A site whose
content.config.tsdeclares nodocscollection builds with the starter's docs route, which serves no pages.
- A site whose
-
#386
e564b45Thanks @MohamedH1998! - -astro devno longer recompiles the whole content store as a module after each save, which took seconds on sites with a lot of text. -
#383
673d85dThanks @MohamedH1998! - - Saving a page inastro devno longer reloads every module of the site or renders every page's Markdown again, so large sites answer the next request much sooner. -
#386
bb935beThanks @MohamedH1998! - -astro devno longer slows down on large sites when many files change at once: a file event that changes no page copies nothing. Part of #379.- A dev server stopped while writing its Markdown files restarts cleanly, instead of answering every request with an asset collision error.
astro syncno longer renders every page to collect headings it doesn't use, so it finishes sooner on large sites.
-
#352
596a315Thanks @MohamedH1998! - -lintandcheckskip re-reading the Astro config when it hasn't changed since the last build: about 300 ms faster perlintrun. -
#353
1115c05Thanks @MohamedH1998! - - With nestedllms.txtsections, an API operation is listed in its resource's or tag's index, as in the sidebar, instead of in a section named after its URL folder (such asmethods). -
#355
0d7f997Thanks @MohamedH1998! - -llms.txt, the section indexes andllms-full.txtlist pages and sections in the sidebar's order (sidebar.order, then label) instead of by URL. Pages the sidebar hides follow, by URL. -
#380
7ace7e0Thanks @MohamedH1998! - - A Markdown,llms.txtorllms-full.txtrequest that carriesIf-None-Matchwith the document's currentETagis answered304 Not Modified, on request-rendered routes and, on Cloudflare, for the baked files too. A mount's ownllms.txtnow carries anETaglike the others. -
#354
5028b19Thanks @MohamedH1998! - The Markdown style lint rules run about 9× faster, and the package no longer bundles remark-lint. -
#349
d056733Thanks @MohamedH1998! - -outdatedno longer asks to record a review that matches the installed prerelease.- With a preview package on a site scaffolded from a release,
outdatedsays the starter comparison is with the latest released tag, so the preview's starter changes don't show yet.
- With a preview package on a site scaffolded from a release,
-
#367
4c18262Thanks @MohamedH1998! - - Generated cURL, TypeScript and Python samples no longer need@readme/httpsnippet; onlyopenapi-sampleris needed for generated samples, and you can uninstall@readme/httpsnippet.- A TypeScript sample's options object wraps when its line would pass 80 characters, as the other samples already do.
-
#381
8706622Thanks @MohamedH1998! - - Generated sample URLs are written as browsers send them: a default port such as:443is dropped, IP shorthand is expanded, a server URL's own query is kept as written, and query parameters keep the spec's order.- A TypeScript sample's options object wraps when its whole line passes 80 characters.
- A sample with both a
Cookieheader and a cookie API key sends both cookies in one header, in every language.
-
#364
d7609caThanks @MohamedH1998! - - A sidebar link to a page withsidebar.hiddenno longer warns that it matches no entry. -
#365
c4c8fdfThanks @MohamedH1998! - - A relative link from a source collection's page to a Markdown file itspatternexcludes stays as written, with a warning, instead of becoming a URL with no page. -
#366
f7a6af2Thanks @MohamedH1998! - - Upgrading Nimbus reuses the Vite your Astro already has instead of installing a second copy, which broke type checks ofastro.config.mjs.migrate --yesrecords the reviewed version without reformatting the rest ofnimbus.json.- With
sidebar: "on-demand", the build accepts anApiLayoutthat renders the sidebar through a component of your own; it still stops the starter's pre-on-demand layout, whose groups wouldn't open.