Content
A content item after Markdown parsing and plugin processing. It carries frontmatter, rendered HTML, and a resolved public location, so Riebeckite works with the processed item rather than the raw file.
The processed item, not the file
Riebeckite reads a file, parses it, runs it through the plugin pipeline, and resolves where it will live on the site. Everything after that point is content: the entry, its location, and its relationships.
Code that queries content reads the manifest, not the filesystem.
Life of a content item
- A Content Source discovers and reads the file.
- The Content Manager parses it and runs the pipeline.
- Location resolution assigns a permalink.
- The item is recorded as a Content Entry in the manifest.
Content processing modules
Riebeckite's content pipeline is composed of distinct modules, each with a focused responsibility:
-
content_manager.ts(packages/core/src/content/content_manager.ts) — Orchestrates the full build flow: scanning content sources, building the content index, resolving locations, running the plugin pipeline viaPipeline, building the manifest and content graph, and committing incremental build state. It coordinates between the plugin runtime, content index builder, and build coordinator. -
content_collection.ts(packages/core/src/content/content_collection.ts) — DefinesContentCollectionDefinition,ContentCollection, and thebuildContentCollectionsfunction that groups manifest entries into taxonomy/date/folder-based listings with pagination, sort, and filter support. -
content_graph.ts(packages/core/src/content/content_graph.ts) — Represents the content graph as aContentGraphtype with methods to query nodes, incoming/outgoing links, and neighbors. Built from the manifest'soutgoingLinksandincomingLinksduringrunGraphHook. -
content_index_builder.ts(packages/core/src/content/content_index_builder.ts) — Builds the content resolution index that maps slug variants (including case-insensitive and alias mappings) to their canonical slug. UsesresolveContentIndexto collapse candidates into a single resolution, flagging ambiguities for diagnostics.
Content manifest entry
Each content entry in the manifest is typed as ContentManifestEntry (packages/core/src/types/content_manifest.ts). Key fields include:
slug— the internal lookup keypermalink— the resolved canonical public URLpublicLocation— combines slug, permalink, optional redirects, and metadatacontentId— stable author‑written identifier in frontmatter, independent of slug/permalinkfrontmatter—PostFrontmattercontainingid,title,description,date,published,tags, and other metadatahtml— the processed Markdown HTML bodyaliases— alternative lookup keys for the notetagsandlinks— taxonomy and wikilink/MMD links collected during processing
Example entry structure:
{
slug: "notes/hello",
permalink: "/docs/notes/hello/",
contentId: "abc123",
frontmatter: {
id: "abc123",
title: "Hello World",
tags: ["intro"],
},
html: "<p>Hello world</p>",
tags: ["intro"],
links: [],
backlinks: [],
assets: [],
}