VibeVM
Contents
On this page
en
Publisher
org.vibevm.core
Version
1.0.0latest
Audiences
user
Reading time
4 min
Rendered
Read aloud
never

Read documentation locally

01Documentation of the packages you use, including private ones, can be read on your own machine with nothing sent anywhere. This page fetches the manual onto your machine and opens the reader in a browser.

02
Fetch the VibeVM manual, the package org.vibevm.core/vibevm-docs, into the machine store, open the local documentation reader, and tell me the address to open in my browser.

the vibevm skill installed for your agent; network access to the registry once, or the package already in the store

vibe cache list shows org.vibevm.core/vibevm-docs; vibe doc serve is running and prints an address on 127.0.0.1; the browser shows the manual's first page

  • vibe cache list --quiet

What happens

03The agent runs vibe cache add org.vibevm.core/vibevm-docs. A documentation package is never installed into a project; it is warmed into the machine store together with the packages it documents, so that every rule it cites can be resolved offline. Then the agent runs vibe doc serve: vibe starts a small web server that listens on your own machine only, renders each page from the store on request, and prints the address. Nothing is fetched from the internet while you read, and no page leaves the machine.

04 spec: vibe install MUST refuse a doc…
vibe install MUST refuse a doc package with a hint naming the warm-up command; documentation is warmed into the machine store with vibe cache add (§11), and the local reader and vibe explain read the store.
05 spec: vibe doc serve starts an HTTP…
vibe doc serve starts an HTTP server on 127.0.0.1 only, serves the shell and, on every request, glues in the island rendered from the machine store, the current project's lock file or a private registry. The language preference comes from the project's [i18n].preferred when present. The mode is fully autonomous: no request to vibevm.org, no external CDN or fonts, everything in the bundle. The server serves files only from known roots (the store, the shell), without path traversal and without directory listing, with a content security policy naming no external source.

By hand

061. Warm the store. Inside a project, its registries are the source; outside one, the machine-wide registries:

07
vibe cache add org.vibevm.core/vibevm-docs

082. Start the reader and open the printed address in a browser. Stop it with Ctrl+C:

09
vibe doc serve --help

103. Pick a language with the selector on any page. Where a page has no translation, the reader shows the manual's own language and says so.

Reading in order

11A manual that declares a learning path opens in that order. The list beside the page shows its chapters, numbered, with the reference pages last, and every page ends with links to the previous and the next page on the path. A switch above the list shows the same pages grouped by section instead, and the reader remembers your choice. A manual without a path lists its pages by section.

12 spec: Where the package declares a learning…
Where the package declares a learning path, the site and the local reader show the contents as the path by default — the chapters numbered in order, an appendix chapter without a number — with a switch to the sections view, which is the navigation of ##NAV-PINNED unchanged. A page on the path ends with links to the previous and the next page of the path, and the package page lists the path by chapter and opens it with its first page. Without a declared path nothing changes.

Quotations from the specifications

13A page quotes the rules it rests on, word for word, from the specifications. The reader folds each quotation to one line: a small triangle, the word spec: and a few words from the rule itself, or the words "quote from the specification" when the rule is too short to describe. Select the line to read the whole rule, and select it again to fold it. A printed page shows every rule in full, and the .md and .xml versions of a page carry every rule inline.

14 spec: Cited rules are folded
Cited rules are folded (added 2026-09-26). In the HTML island every rule block is a disclosure that starts closed: one line — the mark ▶, the word spec: and a short description of the rule — and, opened, the rule's full text with its address, as before. The description comes from the rule's own words: its bold lead when the lead has two to eight words; after a one-word lead such as «Decision», that word and the first words after it; otherwise the rule's first words, at most six and never ending on a function word, with an ellipsis. A rule of ten words or fewer, or one whose text is not in hand, shows the edition's words for «quote from the specification» instead — цитата из спецификации in a Russian edition. The block number stays visible while the rule is closed, and printing opens every rule. The fold is for a person's eye only: the .md and .xml projections, the llms files and the MCP surfaces carry the full text inline.

Words from the glossary

15A word that links to the manual's glossary shows its definition when you point at it on a wide screen. After a moment a small card opens beside the link, and it closes when you move away. On a phone or in a narrow window the link opens the glossary, as before.

16 spec: A glossary term shows its definition…
A glossary term shows its definition on hover, in the desktop layout only (added 2026-09-26). When the page lays the contents column beside the text and the pointer is a fine one that can hover, pointing at a link to an entry of the glossary the documentation declares (##GLOSSARY-DECLARED) opens, after a short pause, a small card beside the link with the entry's term and the first paragraph of its definition, as the glossary page states them. The card also opens when the link takes keyboard focus, stays while the pointer is on it, and closes when the pointer leaves or on Escape. The link is unchanged: selecting it still opens the glossary at the entry. In the narrow layout and on a touch screen no card appears, and the glossary page itself shows none. The definitions travel in the page's HTML island, resolved at build time (##PIPE-SHELL-PARSES-NOTHING): nothing is fetched or parsed in the browser, and a screen reader hears the definition as the link's description on every device.

Private packages

17The same reader shows the documentation of packages that live in a private registry or only on your machine: whatever the store holds, the reader renders. This is the intended path for proprietary documentation, and it is why the reader never contacts the public site.

18 spec: The local reader listens on 127.0.0.1…
The local reader listens on 127.0.0.1 only, serves only known roots, loads nothing external, and contacts the network only for a shell download the user explicitly confirmed.

The reader's shell

19A released vibe carries the reader's interface inside the binary. A vibe you built from source carries a plain fallback; vibe doc shell install fetches the full interface for its version from the release assets, verified by size and digest, into ~/.vibe/opt/, and only when you ask. The reader works, plainly, without it, and vibe doc serve --print-shell says which of the two it holds.

20 spec: When the instance's shell pin names…
When the instance's shell pin names a shell that is not in the shell store and there is no network, the reader falls back to the bare shell and warns; it never contacts the network without consent (§12).

Edge cases and rules

21Warming a documentation package warms its subjects too, so the rules a page quotes resolve without a network.

22 spec: Warming a doc package with vibe…
Warming a doc package with vibe cache add warms its subjects too, so that spec:// citations resolve offline.

23Inside a project whose local registry holds the package in-tree, vibe cache add --offline warms it without a network. The reader's language comes from the project's [i18n].preferred or from a flag at launch.

24 spec: The store is warmed with vibe…
The store is warmed with vibe cache add <coordinate> from a registry, or vibe cache add --offline <coordinate> from a project root whose project-local registry holds the package in-tree; the sources of vibe-doc are the store (lookup, list_all), the lock file (Lockfile::read, slot_abs_path), a registry (resolve_and_fetch) and a checkout (LocalRegistry).
25 spec: The local reader serves the same…
The local reader serves the same from the store; the preference comes from the project's [i18n].preferred or a launch flag.

26On the site the same page lives under /doc/, with the language as the next path segment and no prefix for the source language. An address with a version number shows the current content of that version, because a version may be published again and the registry keeps no past publications.

27 spec: The site is mounted under…
The site is mounted under the path /doc of the main domain. The language is the path segment after /doc/; the source language of a documentation carries no prefix. The address map is deterministic and needs no index:
28 spec: An address with a version number…
An address with a version number always shows the current content of that version in the registry: one number may be published ten times a day, and the site shows the last publication. There are no permanent links to past publications — they do not exist in the registry either (§14).

29The reader can be embedded by an editor plugin through an iframe; then the plugin passes its own origin at launch and the reader accepts frames from that origin alone.

30 spec: The policy is sent…
The policy is sent as a header, not a <meta>: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; base-uri 'none'; form-action 'none'; frame-ancestors <origin>, where frame-ancestors names only the origin of the host that launched the reader — the launch parameter vibe doc serve --frame-ancestor <origin>, because a webview's origin changes from window to window — and is 'none' without the parameter. The reader has no CORS layer at all and sends x-content-type-options: nosniff. The public site is not embeddable in frames.

31An agent reads the same store: vibe explain "spec://org.vibevm.core/vibevm-docs/start/what-vibevm-is" prints a page or a block as text.

For an agent

This page has a machine mirror. The citation carries the version rather than latest, so what an agent quotes does not move under it.

spec://org.vibevm.core/vibevm-docs@1.0.0/howto/read-documentation-locally

.md.xmlllms.txt