Docs for v0.0.17.v0.0.18 is the current release.

Build metadata

What a page can learn about the build that produced it, at sys.inputs.baudelaire. Use it for a version stamp, a “last built” line, or a commit link in the footer.

#let build = sys.inputs.baudelaire

#build.version           // baudelaire's version
#build.date              // "2026-08-02"
#build.mode              // "build" | "serve" | "check"
#build.git.hash          // full commit SHA
#build.site.title        // your configured site title
#build.client.analytics  // any constant from your `client { }` block

What it carries

Key Type Is
version str Baudelaire’s own version.
date str The build date, YYYY-MM-DD.
mode str build, serve, or check.
profile str The active --profile. Absent when none is set.
git dict Repository state. Absent outside a git repository.
site dict title, url, lang, author, languages, from the config.
client dict The client { } block, verbatim.

site mirrors the config, and unset values read as none. It is the same data @baudelaire/site binds by name, which is the nicer way to reach it: see Typst modules. client is the same set of constants the baudelaire:config module hands your client JavaScript, so Typst and the browser read one source.

Typst’s own version comes from typst, at sys.version.

git

Key Type Is
hash str The full commit SHA. Slice it yourself for a short form.
dirty bool Whether the tree had uncommitted changes.
rev str Commits reachable from HEAD.
branch str The branch checked out. Absent on a detached HEAD.
tag str The nearest reachable tag.
committed str The commit’s date, ISO 8601.

hash and dirty are always set inside a repository. The rest appear only when git can supply them, so guard those reads:

#let git = sys.inputs.baudelaire.at("git", default: none)
#if git != none [
  Built from #raw(git.hash.slice(0, 7))#if git.dirty [ (dirty)]
]

This is the repository as a whole, at the moment of the build. What a page knows about its own file is page.git, which is a different question and its own opt-in: see templates.

Your own inputs

Anything under typst { inputs } lands at sys.inputs, for threading site-wide constants into your pages:

typst {
  inputs {
    environment "production"
  }
}
#sys.inputs.environment  // "production"

Values arrive as strings, whatever they look like in KDL. baudelaire is reserved for the block above. For constants that also need to reach client JavaScript, use client { } instead.

NOTE

The sys.inputs.baudelaire.* facts are tracked per value: a new commit rebuilds only the pages that read the commit, a new day only the ones that show the date. Your own typst { inputs } values fold into the config fingerprint instead, so changing one rebuilds the whole site.