<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>CoRelayer changelog</title>
        <link>https://docs.co-relayer.com/changelog</link>
        <description>Contract, API, SDK, pricing and documentation changes on docs.co-relayer.com.</description>
        <lastBuildDate>Wed, 23 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>© 2026 CoRelayer</copyright>
        <item>
            <title><![CDATA[An API reference that cannot go stale, and a layout for wide screens]]></title>
            <link>https://docs.co-relayer.com/changelog/api-reference-layout</link>
            <guid>https://docs.co-relayer.com/changelog/api-reference-layout</guid>
            <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The API reference is now rebuilt from scratch on every build and checked page by page against the]]></description>
            <content:encoded><![CDATA[<p>The API reference is now rebuilt from scratch on every build and checked page by page against the
API document. On a desktop screen or wider, an operation page puts the description and the request
samples side by side. On a 2560 px screen, guide pages get a rail beside the article: the page's
contents and the errors it links to.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="the-reference-is-always-regenerated">The reference is always regenerated<a href="https://docs.co-relayer.com/changelog/api-reference-layout#the-reference-is-always-regenerated" class="hash-link" aria-label="Direct link to The reference is always regenerated" title="Direct link to The reference is always regenerated" translate="no">​</a></h2>
<p>The reference is generated by <code>docusaurus-plugin-openapi-docs</code>. That plugin only writes a page if no
file of that name exists yet. So far the build ran it over the pages it had written before. An edit
to <code>openapi.yaml</code> would have kept the old pages, and nothing would have failed. The build now
empties the reference folder first.</p>
<p>A new test also decodes the operation embedded in every generated page and compares it with
<code>openapi.yaml</code>:</p>
<ul>
<li class="">there is one page per operation and webhook, and no page for an operation the document no longer
has;</li>
<li class="">each page has the operation's method, path, summary, description, tags, parameters and response
codes;</li>
<li class="">each schema has a page, and the reference names the version of the document it was built from.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="operation-pages-by-screen-width">Operation pages by screen width<a href="https://docs.co-relayer.com/changelog/api-reference-layout#operation-pages-by-screen-width" class="hash-link" aria-label="Direct link to Operation pages by screen width" title="Direct link to Operation pages by screen width" translate="no">​</a></h2>
<p>The description and the samples of an operation page used to share the 760 px column meant for
prose. That column is now the limit for each panel on its own:</p>
<table><thead><tr><th>Screen</th><th>Layout</th></tr></thead><tbody><tr><td>Below 1536 px</td><td>The description, then the request and response samples below it.</td></tr><tr><td>1536 px and up</td><td>Navigation, description and samples side by side. The samples stay in view while you scroll the description.</td></tr><tr><td>2560 px and up</td><td>The same three columns, with the extra width given to the samples.</td></tr></tbody></table>
<p>The request samples come in curl, JavaScript (fetch), Python (Requests) and Rust (reqwest): curl,
plus the three languages the <a class="" href="https://docs.co-relayer.com/sdk">SDK guides</a> cover.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="a-rail-on-very-wide-screens">A rail on very wide screens<a href="https://docs.co-relayer.com/changelog/api-reference-layout#a-rail-on-very-wide-screens" class="hash-link" aria-label="Direct link to A rail on very wide screens" title="Direct link to A rail on very wide screens" translate="no">​</a></h2>
<p>At 2560 px and wider, a guide page keeps its 760 px article. Beside it is a rail that stays in
place as you scroll, with two parts:</p>
<ul>
<li class=""><strong>On this page</strong>: the page's headings.</li>
<li class=""><strong>Related errors</strong>: each error code the page links to, with its HTTP status.</li>
</ul>
<p>The error list is built from the page's own links, so it always matches the text. Narrower screens
do not show the rail.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="status-page-brought-up-to-date">Status page brought up to date<a href="https://docs.co-relayer.com/changelog/api-reference-layout#status-page-brought-up-to-date" class="hash-link" aria-label="Direct link to Status page brought up to date" title="Direct link to Status page brought up to date" translate="no">​</a></h2>
<p><a class="" href="https://docs.co-relayer.com/operations/status-and-slos">Status and SLOs</a> lists what is built but not proven. Three of its
lines were out of date:</p>
<ul>
<li class="">The allocator that gives each API host its share of an account's cap is now written.</li>
<li class="">Inclusion tracking now has all three of its sources wired.</li>
<li class="">Pay-as-you-go settlement now runs end to end in a test.</li>
</ul>
<p>Each line now says what the backend's tests prove and what they do not. All three are tested only
against stand-ins for the database and the chain. Their tests against a real database have not yet
been seen passing.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="found-while-checking">Found while checking<a href="https://docs.co-relayer.com/changelog/api-reference-layout#found-while-checking" class="hash-link" aria-label="Direct link to Found while checking" title="Direct link to Found while checking" translate="no">​</a></h2>
<ul>
<li class="">Two layout rules for phones and ultrawide screens matched no element, so neither had any effect.
They are fixed. The ultrawide rules also started at 2200 px instead of the 2560 px where that
layout class begins.</li>
<li class="">Some operation descriptions in the API document mention internal specification sections, such
as "relay-intent.md section 10.6". The reference shows the document as it is. The wording has to
be changed in the API document itself, not in the reference.</li>
</ul>]]></content:encoded>
            <category>Documentation</category>
            <category>API</category>
        </item>
        <item>
            <title><![CDATA[Code samples that run, and pages that say what is missing]]></title>
            <link>https://docs.co-relayer.com/changelog/runnable-examples</link>
            <guid>https://docs.co-relayer.com/changelog/runnable-examples</guid>
            <pubDate>Tue, 22 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Every code sample in the SDK guides, the agent pages and the x402 page is now cut from a file that]]></description>
            <content:encoded><![CDATA[<p>Every code sample in the SDK guides, the agent pages and the x402 page is now cut from a file that
is type-checked and run by the test suite. A sample cannot drift from the code, because the build
copies it in and a test fails when the two differ.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="samples-cut-from-tested-files">Samples cut from tested files<a href="https://docs.co-relayer.com/changelog/runnable-examples#samples-cut-from-tested-files" class="hash-link" aria-label="Direct link to Samples cut from tested files" title="Direct link to Samples cut from tested files" translate="no">​</a></h2>
<p>There are thirteen files in <code>docosaurus/examples/</code>: a wallet wrapper, a gateway reader, relayer
verification, send-and-relay, the re-sign path, preflight, tier choice, buying a plan (through the
API and over x402), following an intent (by polling and over SSE), retries, the Relay Unit formula
and a complete agent quickstart. A code fence on a page names its source, and the build syncs the
fence from that file:</p>
<div class="language-md codeBlockContainer_zMT8 theme-code-block" style="--prism-color:#F5F5F5;--prism-background-color:#131313"><div class="codeBlockContent_aBDm"><pre tabindex="0" class="prism-code language-md codeBlock_AFml thin-scrollbar" style="color:#F5F5F5;background-color:#131313"><code class="codeBlockLines_z3MS"><div class="token-line" style="color:#F5F5F5"><span class="token code punctuation" style="color:#A6A6A6">```</span><span class="token code code-language">ts snippet="examples/send-token.ts#relay"</span><span class="token code"></span><br></div><div class="token-line" style="color:#F5F5F5"><span class="token code"></span><span class="token code punctuation" style="color:#A6A6A6">```</span><br></div></code></pre></div></div>
<p>The tests run each example against a local fixture of the API and the gateway. The fixture verifies
presence proofs and accepts each one only once. It hands out re-sign assignments, walks the x402
flow and streams intent events. It refuses any host other than its own <code>.invalid</code> addresses. So no
test contacts a network, and none depends on one being up.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="one-signature-checked">One signature, checked<a href="https://docs.co-relayer.com/changelog/runnable-examples#one-signature-checked" class="hash-link" aria-label="Direct link to One signature, checked" title="Direct link to One signature, checked" translate="no">​</a></h2>
<p>Every example that signs goes through the same guard, which throws on a second call:</p>
<div class="language-text codeBlockContainer_zMT8 theme-code-block" style="--prism-color:#F5F5F5;--prism-background-color:#131313"><div class="codeBlockContent_aBDm"><pre tabindex="0" class="prism-code language-text codeBlock_AFml thin-scrollbar" style="color:#F5F5F5;background-color:#131313"><code class="codeBlockLines_z3MS"><div class="token-line" style="color:#F5F5F5"><span class="token plain">Error: relayOnce: the signer was called twice.</span><br></div></code></pre></div></div>
<p>A test checks that the message the pages quote is the one the guard throws. When the API answers
<code>RESIGN_REQUIRED</code>, the example signs the transaction <strong>for the relayer the API pinned in that
answer</strong>. It does not sign a new variant for each candidate. See
<a class="" href="https://docs.co-relayer.com/sdk/recipes/handle-resign">Handle a re-sign</a>.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="new-pages">New pages<a href="https://docs.co-relayer.com/changelog/runnable-examples#new-pages" class="hash-link" aria-label="Direct link to New pages" title="Direct link to New pages" translate="no">​</a></h2>
<ul>
<li class=""><a class="" href="https://docs.co-relayer.com/concepts/verify-a-relayer">Verify a relayer</a>: check the relayer the API assigned against the
on-chain registry before you sign for it.</li>
<li class=""><a class="" href="https://docs.co-relayer.com/concepts/relay-units">Relay Units</a>: moved from the pricing section, because it defines the
unit and prices nothing. Twelve worked examples are recomputed by the test suite.</li>
<li class=""><a class="" href="https://docs.co-relayer.com/concepts/intent-lifecycle">Intent lifecycle</a>: every state an intent passes through, as a
diagram.</li>
<li class=""><a class="" href="https://docs.co-relayer.com/plans/sponsoring-senders">Sponsoring senders</a>, <a class="" href="https://docs.co-relayer.com/contract/usage-proofs">Usage proofs</a> and
<a class="" href="https://docs.co-relayer.com/operations/telemetry">Telemetry</a>.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-is-not-there-yet-said-plainly">What is not there yet, said plainly<a href="https://docs.co-relayer.com/changelog/runnable-examples#what-is-not-there-yet-said-plainly" class="hash-link" aria-label="Direct link to What is not there yet, said plainly" title="Direct link to What is not there yet, said plainly" translate="no">​</a></h2>
<ul>
<li class="">
<p><strong>The MCP server</strong>: 4 of its 20 tools run end to end, and its resources and prompts cannot be
read yet. <a class="" href="https://docs.co-relayer.com/mcp/tools">The tool list</a> marks which tools work.</p>
</li>
<li class="">
<p><strong>The JavaScript SDK</strong>:</p>
<ul>
<li class="">its one-call relay cannot yet take the relayer pinned by a re-sign answer;</li>
<li class="">it has no helper for relayer verification, x402, Relay Units or event streams.</li>
</ul>
<p>The guides show the plain code for each of these instead.</p>
</li>
<li class="">
<p><strong>Operations</strong>: the usage-proof path, the quota slice allocator, inclusion tracking and
settlement batches are listed as gaps on <a class="" href="https://docs.co-relayer.com/operations/status-and-slos">Status and SLOs</a>.</p>
</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="checked-in-a-browser">Checked in a browser<a href="https://docs.co-relayer.com/changelog/runnable-examples#checked-in-a-browser" class="hash-link" aria-label="Direct link to Checked in a browser" title="Direct link to Checked in a browser" translate="no">​</a></h2>
<p>The built site now runs in Chromium with its production headers, including the generated
Content-Security-Policy. Each kind of page is checked for accessibility (axe, WCAG 2.2 AA) in both
themes, for console errors and for requests to another origin. The layout is checked at nine widths,
from a folded phone's 344 px cover screen to a 2560 px ultrawide.</p>]]></content:encoded>
            <category>Documentation</category>
            <category>SDK</category>
            <category>API</category>
            <category>Contract</category>
        </item>
        <item>
            <title><![CDATA[This documentation site]]></title>
            <link>https://docs.co-relayer.com/changelog/documentation-site</link>
            <guid>https://docs.co-relayer.com/changelog/documentation-site</guid>
            <pubDate>Mon, 21 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[docs.co-relayer.com is live in the repository: the guides, the agent pages, the API reference,]]></description>
            <content:encoded><![CDATA[<p><code>docs.co-relayer.com</code> is live in the repository: the guides, the agent pages, the API reference,
the contract reference and the error catalogue, with local search, <code>llms.txt</code> output and a link
checker that fails the build.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-is-generated-rather-than-written">What is generated rather than written<a href="https://docs.co-relayer.com/changelog/documentation-site#what-is-generated-rather-than-written" class="hash-link" aria-label="Direct link to What is generated rather than written" title="Direct link to What is generated rather than written" translate="no">​</a></h2>
<p>Roughly two thirds of the pages on this site are not written by hand, and that is deliberate — a
reference page that a person maintains is a reference page that drifts.</p>
<table><thead><tr><th>Generated</th><th>From</th></tr></thead><tbody><tr><td>The API reference, one page per operation</td><td><code>build/specs/openapi.yaml</code></td></tr><tr><td>The plain-Markdown API summary at <a href="https://docs.co-relayer.com/api-reference.md" target="_blank" rel="noopener noreferrer" class=""><code>/api-reference.md</code></a></td><td>the same document</td></tr><tr><td>The contract's endpoints, views, events and types</td><td><code>corelayer.abi.json</code>, the contract's own build output</td></tr><tr><td>One page per error code, 91 of them</td><td>the error catalogue, <strong>checked against the <code>ErrorCode</code> enum of the API document</strong></td></tr><tr><td><a href="https://docs.co-relayer.com/errors.json" target="_blank" rel="noopener noreferrer" class=""><code>/errors.json</code></a></td><td>the same catalogue</td></tr><tr><td>The tier data behind the <a class="" href="https://docs.co-relayer.com/plans/tiers">pricing pages</a></td><td>the launch pricing snapshot the marketing site renders</td></tr><tr><td>Tokens, fonts, the logo, the OpenAPI document, the ABI</td><td><code>@corelayer/tokens</code>, <code>@corelayer/ui</code>, <code>assets/logo</code>, the specifications, the contract build</td></tr></tbody></table>
<p>A check mode regenerates everything into memory and fails on the first difference, so a stale
reference page breaks the build instead of shipping.</p>
<p>The strongest of these is the error catalogue: <strong>an error code that exists in the API without a
page here fails this build.</strong> Since every problem document's <code>type</code> member is the address of its
page, that turns a machine-readable promise into something that cannot quietly rot.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="for-machine-readers">For machine readers<a href="https://docs.co-relayer.com/changelog/documentation-site#for-machine-readers" class="hash-link" aria-label="Direct link to For machine readers" title="Direct link to For machine readers" translate="no">​</a></h2>
<ul>
<li class=""><a href="https://docs.co-relayer.com/llms.txt" target="_blank" rel="noopener noreferrer" class=""><code>/llms.txt</code></a> — the index</li>
<li class=""><a href="https://docs.co-relayer.com/llms-full.txt" target="_blank" rel="noopener noreferrer" class=""><code>/llms-full.txt</code></a> — every page in full, with the API reference appended</li>
<li class=""><a href="https://docs.co-relayer.com/llms-agents.txt" target="_blank" rel="noopener noreferrer" class=""><code>/llms-agents.txt</code></a> — only the agent, MCP, x402, API and error pages</li>
<li class=""><strong>any page, as Markdown</strong> — append <code>.md</code> to its URL</li>
<li class=""><a href="https://docs.co-relayer.com/openapi.yaml" target="_blank" rel="noopener noreferrer" class=""><code>/openapi.yaml</code></a>, <a href="https://docs.co-relayer.com/errors.json" target="_blank" rel="noopener noreferrer" class=""><code>/errors.json</code></a>,
<a href="https://docs.co-relayer.com/abi/corelayer.abi.json" target="_blank" rel="noopener noreferrer" class=""><code>/abi/corelayer.abi.json</code></a></li>
</ul>
<p><code>robots.txt</code> allows everything and blocks no crawler, including AI crawlers. Documentation is for
reading.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="the-build-refuses-to-ship-a-broken-link">The build refuses to ship a broken link<a href="https://docs.co-relayer.com/changelog/documentation-site#the-build-refuses-to-ship-a-broken-link" class="hash-link" aria-label="Direct link to The build refuses to ship a broken link" title="Direct link to The build refuses to ship a broken link" translate="no">​</a></h2>
<p>After the site is built, a script walks every page of the output and resolves every internal link
and every fragment against the files that were actually produced. External links are held to an
allow-list of hosts this project means to link to. It is <strong>offline on purpose</strong>: a build that
reaches out over the network is not reproducible.</p>
<p>It also checks the agent-facing output for leaked JSX, template placeholders and unresolved
snippet imports — the specific ways Markdown generated from MDX turns into noise.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-this-site-will-not-tell-you">What this site will not tell you<a href="https://docs.co-relayer.com/changelog/documentation-site#what-this-site-will-not-tell-you" class="hash-link" aria-label="Direct link to What this site will not tell you" title="Direct link to What this site will not tell you" translate="no">​</a></h2>
<p>No uptime percentage, no latency target, no benchmark. CoRelayer has never run in production, so
there is nothing measured to publish, and a number that is not measured is not a number. Where a
page has to describe an intention it says "designed for"; where it would be guessing, it says
nothing. (<a class="" href="https://docs.co-relayer.com/operations/status-and-slos">Status and SLOs</a>)</p>]]></content:encoded>
            <category>Documentation</category>
            <category>API</category>
            <category>Contract</category>
        </item>
        <item>
            <title><![CDATA[Design tokens, the component library and the typed SDK]]></title>
            <link>https://docs.co-relayer.com/changelog/design-system-and-sdk</link>
            <guid>https://docs.co-relayer.com/changelog/design-system-and-sdk</guid>
            <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Three workspace packages are built: the design tokens, the component library that consumes them,]]></description>
            <content:encoded><![CDATA[<p>Three workspace packages are built: the design tokens, the component library that consumes them,
and the typed API client that everything else talks to the API through.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="corelayertokens"><code>@corelayer/tokens</code><a href="https://docs.co-relayer.com/changelog/design-system-and-sdk#corelayertokens" class="hash-link" aria-label="Direct link to corelayertokens" title="Direct link to corelayertokens" translate="no">​</a></h2>
<p>Design tokens authored in the DTCG format and compiled two ways: a Tailwind v4 <code>@theme</code> block and a
typed TypeScript module. Dark and light are both first-class, and a <strong>contrast gate</strong> runs in the
build — a token pair that fails its contrast requirement fails the build rather than shipping.</p>
<p>This documentation site uses the same file. <code>src/css/tokens.css</code> here is a verbatim copy of
<code>@corelayer/tokens/themes.css</code>, written on every build, and every Infima variable points at one of
its tokens. One edit re-skins all three sites.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="corelayerui"><code>@corelayer/ui</code><a href="https://docs.co-relayer.com/changelog/design-system-and-sdk#corelayerui" class="hash-link" aria-label="Direct link to corelayerui" title="Direct link to corelayerui" translate="no">​</a></h2>
<p>The component library: a theme provider that applies the stored theme before first paint, so there
is no flash of the wrong one; self-hosted Geist and Geist Mono; and the component inventory the
front-end specification calls for. Charts, icons and illustrations are separate entry points so a
page pays only for what it imports.</p>
<p>The fonts on this site come from that package, rewritten to versioned paths under <code>/fonts</code> so that
the preload and the <code>@font-face</code> rule name the same URL and nobody downloads a font twice.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="corelayersdk"><code>@corelayer/sdk</code><a href="https://docs.co-relayer.com/changelog/design-system-and-sdk#corelayersdk" class="hash-link" aria-label="Direct link to corelayersdk" title="Direct link to corelayersdk" translate="no">​</a></h2>
<p>The typed client. Four parts:</p>
<ol>
<li class=""><strong>Generated types.</strong> Every request and response shape comes from <code>openapi.yaml</code>. A check mode
fails if the checked-in types have drifted from the document.</li>
<li class=""><strong>A transport</strong> with direct-host failover: when the edge does not answer in time, the
<strong>identical bytes</strong> are resubmitted to a regional host.</li>
<li class=""><strong>Typed errors</strong> matching the RFC 9457 catalogue, including the open-enum rule — an unknown code
keeps its status and <code>retryable</code> instead of being guessed at.</li>
<li class=""><strong><code>relayOnce</code></strong>, which assigns a relayer and submits exactly one signed transaction. It wraps
the caller's signer so that a second invocation throws.</li>
</ol>
<p>Nothing in the package contacts a chain. Every call goes to the CoRelayer API, which is why the
test suite needs no network: point <code>baseUrl</code> at a fixture server and the whole client is
exercised.</p>
<p><a class="" href="https://docs.co-relayer.com/sdk">SDK documentation</a> · <a class="" href="https://docs.co-relayer.com/sdk/javascript">TypeScript guide</a></p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="not-published">Not published<a href="https://docs.co-relayer.com/changelog/design-system-and-sdk#not-published" class="hash-link" aria-label="Direct link to Not published" title="Direct link to Not published" translate="no">​</a></h2>
<p>None of the three is on a public registry yet. They are workspace packages in this repository.</p>]]></content:encoded>
            <category>SDK</category>
            <category>Design system</category>
        </item>
        <item>
            <title><![CDATA[The marketing site and the dashboard]]></title>
            <link>https://docs.co-relayer.com/changelog/web-and-app</link>
            <guid>https://docs.co-relayer.com/changelog/web-and-app</guid>
            <pubDate>Sun, 20 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Both front ends are built: co-relayer.com, the marketing site, and app.co-relayer.com, the]]></description>
            <content:encoded><![CDATA[<p>Both front ends are built: <code>co-relayer.com</code>, the marketing site, and <code>app.co-relayer.com</code>, the
dashboard. Both are React 19 with TypeScript and Tailwind 4, built on <code>@corelayer/ui</code>.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="the-marketing-site">The marketing site<a href="https://docs.co-relayer.com/changelog/web-and-app#the-marketing-site" class="hash-link" aria-label="Direct link to The marketing site" title="Direct link to The marketing site" translate="no">​</a></h2>
<p>Twelve routes: the product, pricing, the network, the agent story, the developer entry point, the
Finance Computer argument, the brand page, security, and the legal pages. It prerenders, so every
page is static HTML with its own metadata, and it serves a Markdown twin of every page at
<code>&lt;path&gt;.md</code> plus <code>/llms.txt</code> and <code>/llms-full.txt</code> for machine readers.</p>
<p>Two things on it are calculators rather than claims:</p>
<ul>
<li class=""><strong>the plan calculator</strong>, which takes a volume and shows what each tier would cost, including
where pay-as-you-go becomes more expensive than the next tier up;</li>
<li class=""><strong>the Relay Unit estimator</strong>, which applies the published formula to a transaction's gas limit,
gas price, data size and guarded flag — the same arithmetic the API does, in the browser.</li>
</ul>
<p>Both are driven by the launch pricing snapshot, which is also the source this documentation's
<a class="" href="https://docs.co-relayer.com/plans/tiers">tier table</a> is checked against.</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="the-dashboard">The dashboard<a href="https://docs.co-relayer.com/changelog/web-and-app#the-dashboard" class="hash-link" aria-label="Direct link to The dashboard" title="Direct link to The dashboard" translate="no">​</a></h2>
<p>Wallet login, then the account: plan and checkout, billing and deposits, usage and transactions,
latency, relayers, senders, API keys, notifications and incidents.</p>
<p>The relay flow is the part worth naming. It is built around a single signature: the assignment names
the relayer, the transaction is signed once, and the only case that asks for a second signature is
an explicit dialog that says the first attempt sent nothing and never will.
(<a class="" href="https://docs.co-relayer.com/concepts/one-signature">One signature</a>)</p>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-they-talk-to">What they talk to<a href="https://docs.co-relayer.com/changelog/web-and-app#what-they-talk-to" class="hash-link" aria-label="Direct link to What they talk to" title="Direct link to What they talk to" translate="no">​</a></h2>
<p>Nothing, for now. Both run against the mocked API in development and against fixtures in their
tests; no build of either contacts a chain. That is a property, not a workaround — the front ends
never speak to a node directly even in production, only to the CoRelayer API.</p>]]></content:encoded>
            <category>Design system</category>
            <category>Pricing</category>
        </item>
        <item>
            <title><![CDATA[The specifications are written]]></title>
            <link>https://docs.co-relayer.com/changelog/specifications-frozen</link>
            <guid>https://docs.co-relayer.com/changelog/specifications-frozen</guid>
            <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[The six core specifications that define CoRelayer are complete and are now the source the code, the]]></description>
            <content:encoded><![CDATA[<p>The six core specifications that define CoRelayer are complete and are now the source the code, the
types and this documentation are generated from.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-was-fixed">What was fixed<a href="https://docs.co-relayer.com/changelog/specifications-frozen#what-was-fixed" class="hash-link" aria-label="Direct link to What was fixed" title="Direct link to What was fixed" translate="no">​</a></h2>
<table><thead><tr><th>Specification</th><th>What it settles</th></tr></thead><tbody><tr><td><strong>API</strong></td><td>Every route, every schema, the authentication rings, the rate limits, idempotency, pagination, and the full error catalogue. Version <code>1.0.0-draft.1</code>.</td></tr><tr><td><strong>Contract</strong></td><td>Storage, roles, the five pause scopes, the deposit flow, the event schema, the invariants.</td></tr><tr><td><strong>Pricing</strong></td><td>The Relay Unit formula, the tariff and its guard rails, the tier ladder, deposits, the plan lifecycle.</td></tr><tr><td><strong>Relay intent</strong></td><td>The lease, the validation pipeline, the commit point, the intent state machine, the re-sign ladder.</td></tr><tr><td><strong>Settlement</strong></td><td>How usage is reported back to the contract and bounded.</td></tr><tr><td><strong>Distribution</strong></td><td>The relayer registry, weights and the payment split.</td></tr></tbody></table>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="decisions-worth-naming">Decisions worth naming<a href="https://docs.co-relayer.com/changelog/specifications-frozen#decisions-worth-naming" class="hash-link" aria-label="Direct link to Decisions worth naming" title="Direct link to Decisions worth naming" translate="no">​</a></h2>
<ul>
<li class=""><strong>One price lever.</strong> A single integer on chain — micro-USDC per Relay Unit, initially 10,000 —
from which every price is derived. No second value carries a USDC price anywhere in the system.
(<a class="" href="https://docs.co-relayer.com/plans/tariff">The tariff</a>)</li>
<li class=""><strong>One signature per action.</strong> No multi-variant signing exists anywhere in the product. The SDK
enforces it structurally rather than by convention.
(<a class="" href="https://docs.co-relayer.com/concepts/one-signature">One signature</a>)</li>
<li class=""><strong>Errors are addresses.</strong> Every error is an RFC 9457 problem document whose <code>type</code> is a page on
this site. A code that exists in the API without a page fails the documentation build.
(<a class="" href="https://docs.co-relayer.com/errors">Error catalogue</a>)</li>
<li class=""><strong>Milliseconds, and no keeper.</strong> Every time value is milliseconds of block time, and every
schedule activates lazily when somebody next touches the state. Nothing depends on a job running
at the right moment. (<a class="" href="https://docs.co-relayer.com/contract/timestamps">Timestamps</a>)</li>
<li class=""><strong>Measured numbers only.</strong> No SLA percentages and no service credits at launch, because there is
nothing measured to base them on. (<a class="" href="https://docs.co-relayer.com/operations/status-and-slos">Status and SLOs</a>)</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_FAK8" id="what-this-means-for-an-integrator">What this means for an integrator<a href="https://docs.co-relayer.com/changelog/specifications-frozen#what-this-means-for-an-integrator" class="hash-link" aria-label="Direct link to What this means for an integrator" title="Direct link to What this means for an integrator" translate="no">​</a></h2>
<p>The API document is the contract: <a href="https://docs.co-relayer.com/openapi.yaml" target="_blank" rel="noopener noreferrer" class=""><code>/openapi.yaml</code></a>. Client types are
generated from it, this reference is generated from it, and the plain-Markdown summary agents read
is generated from it. Nothing hand-writes a response shape, in any of the three.</p>]]></content:encoded>
            <category>API</category>
            <category>Contract</category>
            <category>Pricing</category>
        </item>
    </channel>
</rss>