Skip to content
Marcos Caceres edited this page Mar 28, 2026 · 14 revisions

postProcess

Type: Array<(config: Object, document: Document, utils: Object) => void | Promise<void>> Default: []

An array of functions that run after ReSpec has finished all processing. Use this to add custom sections, validate the final output, or modify generated markup.

Usage

async function addImplStatus(config, document) {
  const res = await fetch("https://api.example.org/impl-status.json");
  const status = await res.json();

  // Add a badge to each section that has implementation data
  for (const [id, data] of Object.entries(status)) {
    const section = document.getElementById(id);
    if (!section) continue;
    const badge = document.createElement("span");
    badge.className = "impl-badge";
    badge.textContent = `${data.implementations} implementations`;
    section.querySelector("h2, h3")?.append(" ", badge);
  }
}

var respecConfig = {
  postProcess: [addImplStatus],
};
function validateSpec(config, document) {
  // Check that all normative sections have at least one dfn or algorithm
  const normativeSections = document.querySelectorAll(
    "section:not(.informative):not(.appendix)"
  );
  for (const section of normativeSections) {
    if (!section.querySelector("dfn, ol.algorithm")) {
      console.warn("Section with no dfn or algorithm:", section.id);
    }
  }
}

var respecConfig = {
  postProcess: [validateSpec],
};

Function signature

Each function receives three arguments:

Argument Type Description
config Object The respecConfig object plus ReSpec internal state
document Document The fully processed ReSpec document
utils Object ReSpec utility functions

Notes

  • Functions run in order, awaiting async functions before proceeding
  • At this point: headings are numbered, ToC is built, dfn panels are generated, xrefs are resolved, boilerplate is inserted. You are working with the final output.
  • Changes appear in both the live preview and the saved HTML export
  • To be notified when ALL processing is complete (including postProcess), use document.respec.ready
  • For pre-processing before ReSpec starts, see preProcess

Guides

Configuration options

W3C Configuration options

Linting rules

Internal properties

Handled by ReSpec for you.

Special <section> IDs

HTML elements

Custom Elements

HTML attributes

CSS Classes

Special properties

Clone this wiki locally