
Treasury Desk
A browser-local crypto treasury demo with payment proposals, two-of-three approvals, revision history, simulated execution and a ledger that records the result.
A command-line tool for inspecting the HTML your server sends, including content and metadata that arrive in a stream. It records when important elements appear and compares responses for different browser, search-crawler and social-preview user agents.

"Server-rendered" doesn’t necessarily mean everything arrives at once. The page content might come through first, with the title, canonical URL or sharing metadata following later. Different user agents can receive different versions, too. So checking the finished page and deciding “yep, looks fine” leaves a few things unanswered.
SSRWire reads the response as it arrives. It records when it finds titles, descriptions, canonicals, indexing directives, headings and other important elements, along with whether they appear in the head or body. Late metadata isn’t automatically a problem—the checks depend on the requirements you’ve selected.
It also checks Open Graph and Twitter Card metadata, which is handy when you’re trying to work out why sharing a perfectly normal page produces a rather unhelpful preview. You can see which values the server supplied, whether anything is missing and whether those values change between user agents.
One successful request doesn’t always tell the whole story, either. You can take repeated samples to catch inconsistent responses, or save audits from production and a preview deployment and compare them before releasing a change.
The reports explain what was found and suggest fixes. There’s a standalone HTML report you can open or share, plus machine-readable output for automated checks.
It’s written in TypeScript and runs on Node.js, without installing a browser. RoutePlay handles the browser and navigation checks; SSRWire concentrates on the server response. Its user-agent profiles test how your server responds to those strings—they don’t reproduce a search engine’s rendering or indexing process.
check --sitemap <url-or-path> reads plain or gzipped sitemaps and nested indexes, with path
filters, URL and download limits, and target IDs that match across deployment origins.--baseline <path> compares an audit against saved JSON. --update-baseline records a new
baseline and refuses incomplete audits. Comparisons go to stderr to keep JSON output usable.ignore entries waive accepted findings with a reason and optional expiry date. Reports count
waived findings and flag expired or unused waivers.Accept-Encoding:
identity, explaining that byte offsets refer to decoded content.expectNoRegressions() and RegressionError for using comparisons in test suites.schemaVersion: 2. Version-1 reports remain readable and comparable.--concurrency and the matching configuration option limit parallel requests to 1–16
(default 4), including robots.txt discovery.External download
Added
check --format html for one self-contained, script-free audit report with a per-target verdict,
plain-language findings, fix recipes, probe timings, streaming arrival order, social-preview
readiness, and a social preview card that prints the captured values and image URL without
fetching anything.explainFinding(), nextSteps(), targetVerdict(), and
auditVerdict(): every built-in finding code now maps onto what was observed, why it matters,
and what to change, with a generic fallback for unrecognized codes.x-powered-by and x-nextjs-cache response headers, the working
directory's package.json or composer.json, or an explicit --framework override.X-Robots-Tag response-header checks per crawler profile: robots-header-noindex (error),
robots-header-restrictive (warning), and robots-header-ineffective (information) with
X-Robots-Tag added to the allowlisted response-header snapshot.gptbot, oai-searchbot, chatgpt-user,
claudebot, and perplexitybot, with aliases such as claude and perplexity.Changed
renderReport() and renderAuditHtml(), and embeds the
run's --fail-on policy and exit code when the CLI writes it.schemaVersion: 1 audit contract and offline comparison behavior are unchanged.External download
Fixed
end() or finish() closes an unfinished element.External download
Changed
External download
Added
ssrwire compare for two redacted JSON audits, with stable target IDs
for matching the same route across production and preview origins.Changed
schemaVersion: 1 persisted-report
contract independent of the SSRWire package version.id; exact URL matching remains the
fallback when an ID is absent.External download
Added
require.openGraph and require.twitterCard target contracts with
missing-field, invalid-URL, duplicate/conflict, and head/body delivery
findings.Changed
og:image values are retained in document order without being
treated as conflicting scalar metadata.External download
Added
repeat configuration and --repeat CLI sampling for 1–10 requests
per target-agent pair.Changed
External download
External download