The seam is a product surface
A project that ships libraries in several languages often inherits several documentation generators. Kayce Basques describes Pigweed's public docs as three sites joined together: Doxygen for C and C++, rustdoc for Rust, and Sphinx for the rest.[1]
That split is not a failure. Each generator understands its own language and user habits. Rustdoc can search by approximate function signature, including parameter and return types. Its manual documents queries such as usize -> vec and vec, vec -> bool.[3] Flattening that output into generic cards can discard working tools.
The hard part is not making three sites look alike. It is making the crossings predictable.
Transformation spends native knowledge
One route parses every generator's output and converts it to the main site's markup. This can unify the page structure, but the converter now owns details that the language tool already handled. Basques also reports a former Pigweed setup where the Breathe integration added build time and let documented symbols remain unpublished when a Sphinx directive was missing.[1]
The other route publishes each generator's output and joins the sites afterward. Pigweed injects a shared header into the built pages and uses one search entry point. This keeps the native pages, but it creates a new contract. Every output needs a route home, shared navigation, stable cross-links, and coverage in the common search index.
Index the built neighborhood
A post-build index can cross generator boundaries because it reads the final HTML instead of asking each generator to speak one source format. Pagefind's official guide says it runs after the static generator, writes a static search bundle, and accepts any set of static HTML files.[2]
That architecture solves one part of the problem. It does not prove that every subsite is included, that duplicate pages are excluded, or that a result lands on a stable route. Treat the search index as a release artifact. Record the input roots, page count, exclusions, and sample queries for each generator.
Test the crossings, not the paint
A shared font and header can hide a broken site boundary. Release checks should start inside each generated reference. Follow the home link. Search for one symbol from every engine. Open a cross-language link. Change the theme if the site offers one. Reload a deep link.
The switchyard below turns those crossings into four independent contracts. It is a teaching fixture. Selecting all four means the review template has all four sections. It does not prove that a real documentation build passed them.