<?xml version="1.0" encoding="UTF-8"?>
<spec xmlns="https://vibevm.org/spec/1">
  <title id="root">The manifest: vibe.toml</title>
  <status stage="doc" state="work" audience="user,author"/>
  <p p="1">`vibe.toml` is the one file you write to describe a project or a package: its name, what it depends on, where packages come from, and what it delivers. This page lists every table and field with its meaning.</p>
  <section id="one-file" title="One file, three roles">
    <p p="2">Every node, whether a consumer project, a publishable package or a workspace root, has a file named `vibe.toml`. The tables present decide the role: `[project]` marks a consumer that is never published, `[package]` a publishable package, `[workspace]` a coordinator of members; the first two exclude each other, the third composes with either or with neither.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-007#ONE-MANIFEST" p="3"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-007#PACKAGE-XOR-PROJECT" p="4"/>
    <p p="5">Unknown keys are rejected, not ignored: a [manifest](../glossary/index.xml#manifest) written for a newer vibe than the one reading it fails to parse with the offending key named.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#DENY-UNKNOWN-FIELDS" p="6"/>
  </section>
  <section id="package-table" title="[package]">
    <table p="7">
      <tr>
        <td>Field</td>
        <td>Meaning</td>
      </tr>
      <tr>
        <td>`name`</td>
        <td>the package name, kebab-case, unique within its group</td>
      </tr>
      <tr>
        <td>`group`</td>
        <td>the publisher's namespace, a reversed domain such as `org.vibevm.world`; mandatory; `(group, name)` is the identity</td>
      </tr>
      <tr>
        <td>`kind`</td>
        <td>one of the eight kinds; metadata, not identity</td>
      </tr>
      <tr>
        <td>`version`</td>
        <td>semantic version of this package</td>
      </tr>
      <tr>
        <td>`epoch`, `format`</td>
        <td>the package's manifest epoch and its content form (`simple` by default, `normal` for the contract-and-source layout)</td>
      </tr>
      <tr>
        <td>`authors`, `license`, `description`, `homepage`, `keywords`</td>
        <td>the card every registry shows</td>
      </tr>
      <tr>
        <td>`title`, `abstract`</td>
        <td>the human-readable name and the four-question summary shown on documentation shelves; required for `doc` packages, optional otherwise</td>
      </tr>
      <tr>
        <td>`authorship`</td>
        <td>who wrote the prose of a `doc` package: `human`, `ai` or `mixed`; a reader's filter, not the commits' attribution</td>
      </tr>
      <tr>
        <td>`describes`</td>
        <td>the Package URL of an upstream library this package documents or wraps, for version-matched discovery</td>
      </tr>
      <tr>
        <td>`publish`</td>
        <td>the publishing posture of a workspace member</td>
      </tr>
    </table>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-008#GROUP-MANDATORY" p="8"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-008#GROUP-GRAMMAR" p="9"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#CARD-FIELDS" p="10"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#CARD-AUTHORSHIP" p="11"/>
    <p p="12">`[project]` carries the same descriptive fields for a consumer, without a version line or a kind.</p>
  </section>
  <section id="requirements" title="[requires] and its neighbours">
    <table p="13">
      <tr>
        <td>Table</td>
        <td>Meaning</td>
      </tr>
      <tr>
        <td>`[requires.packages]`</td>
        <td>one key per required coordinate, the value a constraint string or an inline table with `version`, a `git` or `path` source, `link` for the boot inclusion type, and the visibility marks `access`, `friend` and `exclude`</td>
      </tr>
      <tr>
        <td>`[visibility]`</td>
        <td>`friends`, `unfriend`, `allow-friends` and `ignore-concept-warnings` for the package as a whole; see [Dependency visibility](../model/dependency-visibility.xml)</td>
      </tr>
      <tr>
        <td>`[override]` (table)</td>
        <td>rewrites the visibility marks of edges you do not own, keyed `"a -&gt; b"`, or a provider's `allow-friends`, keyed by its coordinate</td>
      </tr>
      <tr>
        <td>`[requires] capabilities`</td>
        <td>abstract abilities any provider may satisfy, `namespace:name@constraint`</td>
      </tr>
      <tr>
        <td>`[[requires_any]]`</td>
        <td>a disjunction: exactly one of `one_of` must be satisfied</td>
      </tr>
      <tr>
        <td>`[provides] capabilities`</td>
        <td>the abilities this package offers</td>
      </tr>
      <tr>
        <td>`[obsoletes]`, `[conflicts]`</td>
        <td>packages this one supersedes, and packages that cannot coexist with it</td>
      </tr>
      <tr>
        <td>`[features]`</td>
        <td>optional, additive content sets with a `default` list; features may depend on features</td>
      </tr>
      <tr>
        <td>`[compatibility]`</td>
        <td>`min_vibe_version` and `requires_kinds`</td>
      </tr>
    </table>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#SCHEMA-LINK-FIELD" p="14"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#FEATURES-TABLE" p="15"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-REQUIRES-PACKAGES" p="16"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-REQUIRES-CAPABILITIES" p="17"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-REQUIRES-ANY" p="18"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-PROVIDES" p="19"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-OBSOLETES" p="20"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#CAP-CONFLICTS" p="21"/>
    <p p="22">A [feature](../glossary/index.xml#feature) adds content and never removes or contradicts any; `default` lists the features active when nothing is said, and `--no-default-features` omits them. When two packages require one package with different features, the resolver materialises it once with the union. On the command line `vibe install &lt;coordinate&gt; --features a,b`, `--no-default-features` and `--all-features` control activation.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#KEEP-ADDITIVE" p="23"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#KEEP-DEFAULT" p="24"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#KEEP-UNIFICATION" p="25"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#CLI-INSTALL-FEATURES" p="26"/>
  </section>
  <section id="sources" title="Where packages come from">
    <table p="27">
      <tr>
        <td>Table</td>
        <td>Meaning</td>
      </tr>
      <tr>
        <td>`[[registry]]`</td>
        <td>an ordered list of package sources: `name`, `url` (the organisation root), `naming`, `auth`, optional `index_url` and `token_env`</td>
      </tr>
      <tr>
        <td>`[[mirror]]`</td>
        <td>an alternative address for one registry or for any, tried by `priority` and verified by fingerprint</td>
      </tr>
      <tr>
        <td>`[[override]]`</td>
        <td>a replacement source for one coordinate, short-circuiting the registries</td>
      </tr>
      <tr>
        <td>`[boot]`</td>
        <td>workspace-wide loading settings; today a default `link`</td>
      </tr>
      <tr>
        <td>`[i18n]`</td>
        <td>`preferred` and `fallback` languages in a project; `canonical` and `available` in a package</td>
      </tr>
      <tr>
        <td>`[workspace] members`</td>
        <td>the member paths of a workspace, globs allowed</td>
      </tr>
    </table>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#REGISTRY-ARRAY" p="28"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-registry/PROP-002#MIRROR-LAYER" p="29"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#I18N-DECISION" p="30"/>
    <p p="31">A localised file sits beside the canonical one with a language tag before the extension, `README.ru.md` next to `README.md`. Every package ships the canonical form of every file it lists, and translations only add to it, so a project with no translation in its preferred language installs without an error. `vibe install --language ru` sets the preference for one run.</p>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#SIDECAR-PATTERN" p="32"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#I18N-CANONICAL-INVARIANT" p="33"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-resolver/PROP-003#PREF-CLI-FLAG" p="34"/>
  </section>
  <section id="deliveries" title="What a package delivers">
    <table p="35">
      <tr>
        <td>Table</td>
        <td>Meaning</td>
        <td>Legal in</td>
      </tr>
      <tr>
        <td>`[boot_snippet]`</td>
        <td>`source`, the snippet file inside the package, and `category` for its place in the boot order; optional `when` and a suggested `link`</td>
        <td>every kind but `doc`</td>
      </tr>
      <tr>
        <td>`[[skill]]`</td>
        <td>`name`, `path`, `description`, optional target `agents`: a [skill](../glossary/index.xml#skill) an agent may install</td>
        <td>every kind</td>
      </tr>
      <tr>
        <td>`[[binary]]`</td>
        <td>`name` and `crate`: a tool vibe builds on install and runs through `vibe bin exec`</td>
        <td>code-bearing kinds; not `doc`</td>
      </tr>
      <tr>
        <td>`[[mcp_server]]`</td>
        <td>`name`, `binary`, `args`: a server registered into agents</td>
        <td>`mcp` only</td>
      </tr>
      <tr>
        <td>`[hooks]`</td>
        <td>`pre-install` and `post-install` script base paths</td>
        <td>packages</td>
      </tr>
      <tr>
        <td>`[[extension]]`</td>
        <td>`id`, `point`, `handler`, optional selector and config: a contribution to the lifecycle</td>
        <td>packages and projects</td>
      </tr>
      <tr>
        <td>`[[embedded_source]]`</td>
        <td>an immutable external source a package refers to without vendoring it</td>
        <td>bridge packages</td>
      </tr>
    </table>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-009#SCHEMA-BOOT-SNIPPET" p="36"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#SKILL-TABLE-SHAPE" p="37"/>
    <p p="38">A [skill](../glossary/index.xml#skill) is a manifest section, never a kind of its own. `include` narrows which files of `path` are projected into an agent's skill folder, and its absence projects the whole tree. A skill may take its body from a declared `[[embedded_source]]` and add resources below a `references/` folder, under the same include selection and traversal checks.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#SKILL-SECTION-NOT-KIND" p="39"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-mcp/PROP-015#INCLUDE-SELECTIVE" p="40"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#SKILL-EXTERNAL-SHAPE" p="41"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#SKILL-EXTERNAL-LAWS" p="42"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-025#BINARY-TABLE" p="43"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-mcp/PROP-027#TABLE-ONLY-IN-KIND" p="44"/>
    <rule ref="spec://org.vibevm.core/vibevm/modules/vibe-workspace/PROP-020#HOOKS-TABLE" p="45"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-054#CONTRIB-GRAMMAR" p="46"/>
  </section>
  <section id="documentation-tables" title="Documentation and its subjects">
    <table p="47">
      <tr>
        <td>Table</td>
        <td>Meaning</td>
        <td>Legal in</td>
      </tr>
      <tr>
        <td>`[[documents]]`</td>
        <td>`package` and a `version` constraint: a [subject](../glossary/index.xml#subject) this documentation describes; required, repeatable</td>
        <td>`doc`</td>
      </tr>
      <tr>
        <td>`[documentation]`</td>
        <td>`primary` (at most one coordinate) and `official` (any number): the documentation a package names as its own</td>
        <td>every kind</td>
      </tr>
      <tr>
        <td>`[translates]`</td>
        <td>`package` and `version` of the documentation this translation mirrors</td>
        <td>`doc`</td>
      </tr>
      <tr>
        <td>`[navigation]`</td>
        <td>`pinned`, the document paths listed first, and `[[navigation.section]]` rows with `id` and `title` for the folders of the page tree</td>
        <td>`doc`</td>
      </tr>
      <tr>
        <td>`[media]`</td>
        <td>`icon`, `banner`, `preview`: source image files within the card limits</td>
        <td>every kind</td>
      </tr>
    </table>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#REL-DOCUMENTS-REQUIRED" p="48"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#REL-DOCUMENTATION-UNVERSIONED" p="49"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#LOC-PACKAGE-PER-LANGUAGE" p="50"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#CARD-MEDIA-SOURCE" p="51"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#NAV-PINNED" p="52"/>
  </section>
  <section id="example-manifest" title="A complete example">
    <fence lang="text" p="53"># Written by `vibe doc build-site`: the level-0 view of one published version
# (PROP-057 `##LEVEL-ZERO`). It is a render input and never a package.

[package]
name = "vibevm-docs"
group = "org.vibevm.core"
version = "1.0.0"
kind = "doc"
title = "VibeVM Manual"
abstract = "What it covers: what VibeVM is and how it gives a coding agent the right text to read; installing vibe; creating a project; packages, registries, the lock file and the machine store; installing, updating, publishing and working offline; giving an agent the vibevm skill and asking it to do the work; the lifecycle from validate to deploy; a full command, manifest, lock-file and settings reference; writing packages of every kind, including documentation and its translations.\nFor whom: people who run vibe in their projects, people who write packages, and the agents that read on their behalf.\nWhat it assumes known: how to use a terminal and a text editor, what a coding agent is, and what a package manager does for a programming language.\nWhat it leaves out: the normative specifications themselves (this manual quotes them, never restates them), the internals of any one agent product, and the design history of vibe."
description = "The VibeVM manual: install vibe, understand packages and the boot lane, work with an agent, author and publish packages."
authorship = "ai"
authors = ["Oleg Chirukhin"]

[i18n]
canonical = "en"

[[documents]]
package = "org.vibevm.core/vibevm"
version = "^1.0"

[navigation]
pinned = ["start/what-vibevm-is", "start/index"]

[[navigation.section]]
id = "start"
title = "Start"

[[navigation.section]]
id = "model"
title = "Model"

[[navigation.section]]
id = "howto"
title = "How to"

[[navigation.section]]
id = "agent"
title = "Agent"

[[navigation.section]]
id = "lifecycle"
title = "Lifecycle"

[[navigation.section]]
id = "authoring"
title = "Authoring"

[[navigation.section]]
id = "reference"
title = "Reference"

[[navigation.section]]
id = "architecture"
title = "Architecture"

[[navigation.section]]
id = "diagnostics"
title = "Diagnostics"

[[navigation.section]]
id = "faq"
title = "Questions"

[[navigation.section]]
id = "glossary"
title = "Glossary"</fence>
    <p p="54">The manifest of this manual, generated from the package itself, shows a `doc` package with a card, a [subject](../glossary/index.xml#subject) and a [skill](../glossary/index.xml#skill).</p>
  </section>
</spec>
