Changelog

What changed in each release, newest first. The full technical notes for every version are in CHANGELOG.md on GitHub.

Changelog ​

Each release in a few lines. The full notes — every change, every migration step, every measurement — are in CHANGELOG.md, and a tagged release copies its section to GitHub Releases automatically.

2.2.0 ​

Nov 2, 2026

One extractor for HTML pages, and a roadmap to 3.0 ​

  • One extractor reads every HTML page. docpilot import, docpilot index --html-dir and docpilot doctor choose the body of the page, keep tab panels, accordions, tables and code as written, drop navigation and banners, and print a table of what was kept and dropped. See Imported pages.
  • docPilot.html sets the body selector and what to remove, per source, and takes a fetcher for pages a plain request cannot read. It is server-only. --html-select and --html-exclude set the same for one run. See html.
  • A bad page no longer stops index --html-dir. It is skipped, named and counted. A page marked noindex is skipped too, and a dead link in an imported page becomes its text.
  • eval --baseline compares a run with a frozen baseline and exits 1 when a ranking moved. See Measure.
  • No size ceiling on a server index. With runtime: 'server' the browser downloads only the shell, so the 64 KB and 5 MB limits apply to the browser runtime alone.
  • import --out stays under importDir. An absolute path or a .. segment is refused before the fetch.
  • A roadmap to 3.0. Roadmap to 3.0 shows the plan, the progress and the latest update. No 3.0 package is published yet. After 3.0, DocPilot moves to a new website and gets a new product name that does not collide with other products, so people who look for it can find it more easily.

A site written in Markdown builds the same index as in 2.1.1. If you index built HTML or import pages, run docpilot index again: the extractor is part of the corpus hash for those pages, and index names every imported page an older extractor wrote, with the command that re-imports it.

Full notes

2.1.1 ​

Oct 27, 2026
  • The citation rule is clearer. With gpt-6-luna at reasoning: 'low', most answers printed a section id in brackets where the link marker goes. The Sources list was right, and the claim had no link. The instruction now asks for numbers in the text and keeps section ids in the citations list. Measured on one production turn: 13 of 16 answers before, 0 of 24 after.
  • The markers are settled in code. When a model still writes an id, the turn rewrites it to its [n] before the answer is shown, stored or signed. [1, 2] now links both, and a number after a dropped invented citation no longer links the source one row down.
  • eval checks the links. An answer to a covered question, shown with sources and no working link in its text, now fails the run, like a hallucinated citation. A small model that writes no markers can fail it on the first run. See Measure.
  • No refusals on a reader's first question with OpenAI. The openai row states what OpenAI's guide says of its reasoning models — search steps at reasoning_effort: 'none', no temperature beside an effort — so gpt-6-luna no longer pays two refused requests on every page load. See A model this table has never heard of.
  • A search that finds nothing new says so in one line instead of a row per repeat, and the model asking again for the search that primed the turn is answered from the turn. On ten live turns: 27 requests and no refusals, where the same questions cost 34 and 8.
  • No section id flickers in a streaming answer. It stays hidden until the turn settles and turns it into its marker.

Run docpilot index after the upgrade: the instruction changed, so the baked opener answers are baked again.

Full notes

2.1.0 ​

Oct 27, 2026

Your own tools in the chat, citations that land on their heading, and a review pass ​

  • Your own tools. A tools key adds functions the model calls for live data — a plan's limits, an API's status — cited as a source "from the site", and actions the answer offers as a button or a form, which run only when the reader presses them. Off by default; with tools: null every request is byte-identical to 2.0.1. See Tools and actions.
  • A citation lands on its heading. Anchors are now VitePress's own: a heading with ., _, ', an accent or a leading digit linked to the top of its page. HTML comments are no longer indexed. Rebuild your index after the upgrade, and run docpilot lint if your golden set pins section ids.
  • Security fixes from a full review. The /ai proxy rebuilds tools and messages, the server's leak guard also reads the summary and an action's arguments, the reference feedback receiver limits who can write, and a tool's URL template keeps its path. See Security.
  • Fixes on every host. setConfig() and the React config prop reach the panel, Docusaurus highlights code again, and a site under a base path keeps its scopes and its links. A misspelled setting prints a warning that names the nearest key.
  • The panel is in parts. The component files are Panel.vue, Trigger.vue, Cta.vue, Icons.vue and Quote.vue. The exported names do not change, and the old file paths still resolve until 3.0. The tarball no longer carries 808 KB of unused chunks.

Full notes

2.0.1 ​

Oct 27, 2026

gpt-6-luna answers, and it is the default OpenAI model ​

  • A model that DocPilot has not heard of works when you name it. When a refusal names its cause — max_tokens, temperature, or function tools that need reasoning_effort: 'none' — DocPilot asks the same model again with that one change, once, and keeps the change. See A model this table has never heard of.
  • gpt-6-luna is the default openai model, in place of gpt-4o-mini. OpenAI removes gpt-4o-mini from its API on January 14, 2027. A config that names its model does not change.
  • OpenAI gets max_completion_tokens for every model, and doctor prints the field that each request carries.

Full notes

2.0.0 ​

Oct 26, 2026

Two installs, measured, a panel that opens from a bar, and an agent that tunes your docs ​

  • Choose your install first. npx docpilot init asks where a question is answered: in the reader's browser (static) or on your server. See Choose your install. Upgrading from 1.x: Migrate to 2.0.
  • A faster server turn. One-shot by default: on a local model the first token comes three times sooner, with answer quality inside the noise. A metrics endpoint, stage timings in the turn log, and limits and a deadline on by default. See Server operations.
  • A guarded server. Signed history, a leak guard on your own instructions, a capped body. See Security.
  • A verified static index. Every file is named by its own bytes and checked with Subresource Integrity. Its answers are byte-identical to 1.5's.
  • Measure and improve. eval scores the server turn, a dev and test split and attack probes; docpilot improve turns failing questions into edits and judges them; the docpilot-tuner agent runs that loop for you. See Measure and The tuning agent.
  • A terminal that shows the numbers. docpilot status, docpilot monitor and an eval scorecard. See The terminal.
  • Every claim is on a benchmark you can rerun: Harborline.
  • The panel opens three ways, from a bar by default. A question bar at the bottom centre whose answer rises above it is the shipped shape; a sidebar that moves the page from the left or the right and the corner popup are settings — ui: { panel: 'popup' } keeps 1.x. Motion leaves as well as arrives, on springs, and plays whatever the reader's OS says — ui: { motion: 'auto' } defers to it as 1.x did; the window is frosted glass, and the hover travels between the items of a row or a list. See The assistant panel and Migrate to 2.0.
  • Every stylesheet is in @layer docpilot. Your own CSS outranks the panel with one class and no !important — and an unlayered reset does too. See Appearance and Migrate to 2.0.

Full notes

1.5.0 ​

Oct 25, 2026

The turn on your own server, a smaller index, and a security pass ​

  • runtime: 'server'. Retrieval, the gate, the prompt and every key run on your server; the panel posts a question and reads a stream. npx docpilot serve runs it, docker/ runs it against local models. See The server runtime.
  • The turn log, and four commands that read it: traffic, dataset, model and llms. See Improving answers and Fine-tuning.
  • Security fixes from a full scan. A key now goes only to the host it belongs to, the dev proxy serves your machine only, serve survives malformed requests and withholds the index by real path, import checks every redirect, and reader and remote text is escaped. See Security.
  • One bit per dimension. Chunk vectors are stored as sign bits when the embedder can afford it: this site's vectors went from 2.3 MB to 292 KB with the same recall. --quantize=int8 keeps the old format.
  • Conversation memory. The last answer goes to the model whole; older answers go as one- or two-sentence summaries the model writes itself. See Conversation memory.
  • Cross-language retrieval. A question in one language finds sections written in another more often: the embedder now also sees your vocabulary's terms.
  • Enter no longer stops a running answer, and code blocks in the panel get room to breathe.

Full notes

1.4.0 ​

Sep 4, 2026

One request per question by default ​

  • A provider named without a model now takes that provider's own default model, instead of a pool the browser walked through one model at a time.
  • chat.chain ships false: a second key in the environment no longer quietly adds a second provider.
  • Request accounting and the chain resolver were made exact; a member behind the head no longer inherits a pool it was not given.

Full notes

1.3.0 ​

Sep 3, 2026

The relevance gate is opt-in ​

  • guard.mode ships as 'off'. A floor calibrated on one language refused good questions in another; the gate now scores every turn and refuses only when you opt in. See Relevance gate.
  • A prepared opener that cannot serve its own text still hands the turn its evidence.

Full notes

1.2.0 ​

Sep 2, 2026

Better follow-ups, and feedback you can collect ​

  • A follow-up starts from the evidence the previous turn already retrieved.
  • The feedback receiver ships, and npx docpilot init copies it into your project.
  • Eval reports say what moved, not only how much, and name the embedder they ran on. The golden set grew from 56 to 70 questions.

Full notes

1.1.0 ​

Sep 2, 2026

Measurement you can trust ​

  • Eval reports gain citationRecall, cached-token counts and a seed that actually reaches the model.
  • doctor --json, lint --json, docpilot help <command>, four exit codes, diagnostics on stderr.
  • The empty panel holds five suggestions, not three.

Release on GitHub

1.0.1 ​

Sep 1, 2026

Prepared answers and a cheaper rebuild ​

  • The empty panel's questions are answered at build time — a click needs no request. See Suggestions.
  • npx docpilot feedback faq ranks the questions your readers actually asked.
  • A content-addressed embedding cache: a rebuild buys only the chunks that changed.

Full notes

1.0.0 ​

Aug 31, 2026

TypeScript throughout, and a stable API ​

  • The package is built from TypeScript; every entry point resolves into dist/, with hand-checked type declarations.
  • index --html-dir indexes a site that is already built; docPilot.openapi points at your specs.
  • A reload keeps a streaming answer and a half-typed question; the status line says Still working at 8 and 25 seconds.
  • CI runs the full gate on every push and pull request.

Full notes

0.5.0 ​

Aug 29, 2026

Pin the panel's colours ​

  • ui.theme pins the panel to light or dark, in DocPilot's own palette.

Full notes

0.4.0 ​

Aug 28, 2026

The answer ladder ​

  • A turn never ends empty-handed: when the model is unavailable, the reader gets a search answer with the closest passages.
  • chat: false — a search-only panel with no model at all.
  • Turns outlive the panel (ui.background), the vocabulary maps readers' words to your docs' words, and the panel wears your site's font.
  • The floating button becomes the default trigger.

Full notes

0.3.3 ​

Aug 27, 2026

No peer dependencies ​

  • All eleven peerDependencies were removed; nothing else changed.

Full notes

0.3.2 ​

Aug 27, 2026

The provider chain ​

  • chat.provider: 'auto' picks a provider from the keys in your environment; every provider carries its own default model.
  • The embedding model is discovered from the provider when you name none — it changes the model, never the provider.
  • llamacpp joins as a provider; embed: { fallback: 'lexical' } prefers a word-only index to no index.

Full notes

0.3.1 ​

Aug 27, 2026

Triggers as a list ​

  • ui.trigger accepts a list of placements, and no value can fail a build.
  • Every setting is in one table in the configuration reference, checked against the code.

Full notes

0.3.0 ​

Aug 26, 2026

For any site, not only documentation ​

  • DocPilot is described — and documented — as an assistant for any page: a new Where it can go guide.
  • Every default is written out in one block in the reference.

Full notes

0.2.0 ​

Aug 24, 2026

Beyond VitePress ​

  • Entry points for Docusaurus, Vue, React, plain JavaScript and a script tag.
  • Conversation history, quoting a selection, and a switch for every reader-visible action.
  • A block-aware chunker, docpilot tune, a pluggable syntax highlighter, and embed: false.

Full notes