Skip to content
Registry

web

v1.2.10

Outbound HTTP client on the iii bus (web::fetch).

license: Apache-2.0apiclientfetchhttprest

Install

bash
iii trigger compose::add worker=web@1.2.10

Run in your project with the iii engine running. Exact versions are immutable and digest-pinned.

skill doc

web

index
SKILL.md

Callable id: web::fetch — pass to agent_trigger { function: "web::fetch" } (NOT the iii://... skill path; that's docs, not a function id). Use this instead of shell::exec with curl/wget for any HTTP request: you get a parsed { ok, status, headers, body } envelope, enforced size/timeout caps, and server-side SSRF protection a shell curl doesn't have.

Decide fast

You want to… Call
Read a web page (docs, articles) { "url": "https://…", "format": "markdown" }
GET a page/API { "url": "https://…" }
Parse a JSON API response { "url": "https://…", "response_format": "json" }
POST/PUT JSON { "url": "…", "method": "post", "json": { … } }
Send a raw body / form { "url": "…", "method": "post", "body": "…", "headers": { "content-type": "…" } }
Download binary { "url": "…", "response_format": "base64" }
Run a shell curl ❌ stop — use web::fetch

Minimal call

// agent_trigger { function: "web::fetch", payload: { "url": "https://api.github.com/zen" } }
// → { "ok": true, "status": 200, "body": "Design for failure.", ... }

That's the whole T0 path: a URL is the only required field. Everything else has a default.

Read the result correctly (the #1 trap)

ok tells you if the request COMPLETED, not whether the server was happy.

  • A 404 or 500 is a successful fetch → ok: true, status: 404. Branch on status for HTTP outcomes.
  • ok: false means the request never produced a response (bad URL, blocked host, timeout, transport failure). Branch on error for those.
if (!r.ok)            → fetch failed; look at r.error  (see table below)
else if (r.status>=400) → server returned an HTTP error; look at r.status / r.body
else                  → success; use r.body or r.json

Do not treat ok: true as "2xx". Always check status too.

One exception: in page-reading mode (format set), an image/* response returns the image itself plus a one-line text summary instead of this envelope — there is no top-level ok/status to branch on (see "Images in page-reading mode" below).

Request fields

Field Default Notes
url (required) — absolute http(s)://
method GET case-insensitive ("post" works); GET HEAD POST PUT PATCH DELETE OPTIONS
headers {} object; keys as you write them
json — structured payload; auto-stringified + sets content-type: application/json. Wins over body.
body — raw string body; use for non-JSON. Ignored on GET/HEAD.
response_format "text" "text" | "base64" (binary) | "json" (also parses into json)
format — page-reading mode: "markdown" (HTML→Markdown) | "text" (HTML→plain text) | "html" (raw). Sends a browser UA + matching Accept; retries once with the honest UA on a Cloudflare challenge; images come back viewable. Forces text transport (response_format ignored).
timeout_ms 30000 clamped DOWN to the worker ceiling (120000 by default); can't raise past it
max_bytes 5 MiB (256 KiB in format mode) raw fetches default to the 5 MiB ceiling; page-reading mode (format set) uses a context-safe 256 KiB. Pass an explicit value to override (up to the 5 MiB ceiling). Over-cap body is truncated, not errored
follow_redirects true each hop re-checked against the SSRF blocklist

Content pipeline

Four request controls for page-reading mode (format set):

Field Effect
content_filter { type: "pruning"|"bm25", query?, threshold?, threshold_type?, min_word_threshold? } — filters body to signal content. Pruning default threshold 0.48; BM25 default 1.0. query falls back to page </code>/<code class="readme-inline-code"><meta description></code> if omitted.</td> </tr> <tr> <td><code class="readme-inline-code">target_elements</code></td> <td>Restrict body to matching regions. Selector subset: tag, <code class="readme-inline-code">.class</code>, <code class="readme-inline-code">#id</code> — other forms are silently ignored.</td> </tr> <tr> <td><code class="readme-inline-code">excluded_tags</code></td> <td>Drop matching elements before rendering (e.g. <code class="readme-inline-code">["nav", "footer"]</code>).</td> </tr> <tr> <td><code class="readme-inline-code">include_links</code></td> <td><code class="readme-inline-code">true</code> → adds <code class="readme-inline-code">links: { internal, external }</code> arrays (absolute URLs, classified by host).</td> </tr> <tr> <td><code class="readme-inline-code">include_media</code></td> <td><code class="readme-inline-code">true</code> → adds <code class="readme-inline-code">media: { images, videos, audios }</code> arrays (absolute URLs).</td> </tr> </tbody></table> <p>When <code class="readme-inline-code">content_filter</code> is set, <code class="readme-inline-code">body</code> <strong>is</strong> the filtered output — no separate field. Feed it straight to a model.</p> <h1 id="response" class="scroll-mt-20">Response</h1> <p><strong>Success</strong> (<code class="readme-inline-code">ok: true</code>) — returned for <em>any</em> completed response, 2xx through 5xx:</p> <pre><code>{ "ok": true, "status": 200, "status_text": "OK", "headers": { "content-type": "application/json", ... }, // keys LOWER-CASED; set-cookie joined with ", " "body": "<utf8 text | base64 when response_format=base64>", "json": { ... }, // only when response_format="json" AND parse succeeded AND not truncated "parse_error": "…", // only when response_format="json" AND JSON.parse failed (body still set) "response_format": "json", "bytes_truncated": false, // true when body hit max_bytes (NOT an error) "redirect_chain": ["https://…/a"], // omitted when no redirects "content_type": "text/html", // only in page-reading mode (format set) "transformed": "markdown" // only when an HTML transform actually ran }</code></pre><p><strong>Failure</strong> (<code class="readme-inline-code">ok: false</code>) — the fetch never produced a response:</p> <pre><code>{ "ok": false, "error": "blocked_host", "message": "…" } // no status field</code></pre><h2 id="error-cause-fix" class="scroll-mt-20">error → cause → fix</h2> <table> <thead> <tr> <th><code class="readme-inline-code">error</code></th> <th>Cause</th> <th>Fix</th> </tr> </thead> <tbody><tr> <td><code class="readme-inline-code">invalid_payload</code></td> <td>Payload failed schema (bad <code class="readme-inline-code">method</code>, wrong types). <code class="readme-inline-code">message</code> lists the bad fields.</td> <td>Correct the named fields.</td> </tr> <tr> <td><code class="readme-inline-code">invalid_url</code></td> <td><code class="readme-inline-code">url</code> isn't a parseable absolute <code class="readme-inline-code">http(s)://</code> URL.</td> <td>Pass a full absolute URL incl. scheme.</td> </tr> <tr> <td><code class="readme-inline-code">blocked_host</code></td> <td>Target resolves to a private / link-local / cloud-metadata IP (SSRF guard).</td> <td>Don't target internal/metadata hosts. For loopback in dev, the operator sets <code class="readme-inline-code">web.allow_loopback</code>.</td> </tr> <tr> <td><code class="readme-inline-code">timeout</code></td> <td>Slower than <code class="readme-inline-code">timeout_ms</code> (30 s default; 120 s ceiling).</td> <td>Raise <code class="readme-inline-code">timeout_ms</code> (up to ceiling) or shrink work via <code class="readme-inline-code">max_bytes</code>.</td> </tr> <tr> <td><code class="readme-inline-code">too_many_redirects</code></td> <td>More than <code class="readme-inline-code">max_redirects</code> (5) hops.</td> <td>Use the final URL directly, or set <code class="readme-inline-code">follow_redirects: false</code> and read the <code class="readme-inline-code">location</code> header.</td> </tr> <tr> <td><code class="readme-inline-code">transport_error</code></td> <td>Connection refused/reset, TLS failure, DNS failure, or a redirect <code class="readme-inline-code">Location</code> that won't parse.</td> <td>Check host/port/cert; retry if transient.</td> </tr> </tbody></table> <p>There is <strong>no <code class="readme-inline-code">too_large</code> error</strong> — oversize responses come back <code class="readme-inline-code">ok: true</code> with <code class="readme-inline-code">bytes_truncated: true</code>. Branch on the flag, not on an error.</p> <h1 id="page-reading-vs-api-fetch" class="scroll-mt-20">Page reading vs API fetch</h1> <p>Two orthogonal knobs — pick ONE:</p> <ul> <li><strong><code class="readme-inline-code">response_format</code></strong> = transport encoding for APIs/binaries (<code class="readme-inline-code">text</code>/<code class="readme-inline-code">base64</code>/<code class="readme-inline-code">json</code>). The body is returned untouched.</li> <li><strong><code class="readme-inline-code">format</code></strong> = page-reading mode (<code class="readme-inline-code">markdown</code>/<code class="readme-inline-code">text</code>/<code class="readme-inline-code">html</code>). The request goes out with a browser User-Agent + format-matched <code class="readme-inline-code">Accept</code> header, and <code class="readme-inline-code">text/html</code> responses are transformed (<code class="readme-inline-code">markdown</code> is the right default for reading pages — far fewer tokens than raw HTML). Non-HTML bodies pass through unchanged. If Cloudflare answers <code class="readme-inline-code">403</code> with a challenge, the worker retries once with its honest UA (beats the UA-fingerprint rule only, not full JS challenges). For large pages, lower <code class="readme-inline-code">max_bytes</code> — conversion runs on the capped body.</li> </ul> <p>Don't combine them: when <code class="readme-inline-code">format</code> is set, <code class="readme-inline-code">response_format</code> is ignored (treated as <code class="readme-inline-code">"text"</code>).</p> <p><strong>Images in page-reading mode:</strong> a viewable <code class="readme-inline-code">image/*</code> response returns the actual image (plus a one-line text summary like <code class="readme-inline-code">Image fetched (image/png, 8123 bytes)</code>) instead of the JSON envelope — providers that support tool-result images (Anthropic) show it to the model; others see the text line. "Viewable" means jpeg/png/gif/webp, 2xx status, complete (not truncated), and non-empty — anything else (svg, error pages served as images, truncated bytes) comes back as the normal envelope with <code class="readme-inline-code">response_format: "base64"</code> so a hostile image can't fail the provider request. Without <code class="readme-inline-code">format</code>, use <code class="readme-inline-code">response_format: "base64"</code> as before.</p> <p><strong>Transform bounds:</strong> the HTML→markdown/text conversion runs only on bodies ≤ <code class="readme-inline-code">web.max_transform_bytes</code> (1 MiB default) — larger pages come back raw with <code class="readme-inline-code">transformed</code> unset (lower <code class="readme-inline-code">max_bytes</code> to read huge pages). If the body was truncated at <code class="readme-inline-code">max_bytes</code>, the transformed text ends with a visible <code class="readme-inline-code">[Content truncated at max_bytes — …]</code> line.</p> <h1 id="rules-that-save-a-turn" class="scroll-mt-20">Rules that save a turn</h1> <ul> <li><strong><code class="readme-inline-code">json</code> vs <code class="readme-inline-code">body</code>: set exactly one.</strong> <code class="readme-inline-code">json</code> wins if both are present and forces <code class="readme-inline-code">content-type: application/json</code>. Use <code class="readme-inline-code">body</code> + your own <code class="readme-inline-code">content-type</code> for form/text/XML.</li> <li><strong>GET/HEAD ignore the body.</strong> Putting <code class="readme-inline-code">json</code>/<code class="readme-inline-code">body</code> on a GET sends nothing — switch <code class="readme-inline-code">method</code>.</li> <li><strong><code class="readme-inline-code">response_format: "json"</code> can succeed with <code class="readme-inline-code">parse_error</code>.</strong> Non-JSON (or truncated) bodies return <code class="readme-inline-code">ok: true</code>, no <code class="readme-inline-code">json</code>, <code class="readme-inline-code">parse_error</code> set; the raw text is still in <code class="readme-inline-code">body</code>. Check for <code class="readme-inline-code">json</code> before reading it.</li> <li><strong>Caps only go down.</strong> <code class="readme-inline-code">timeout_ms</code>/<code class="readme-inline-code">max_bytes</code> above the worker ceiling are clamped; you can't request more than the operator allows.</li> <li><strong>Response header keys are lower-cased.</strong> Index <code class="readme-inline-code">headers["content-type"]</code>, never <code class="readme-inline-code">"Content-Type"</code>.</li> <li><strong>Auth headers don't survive a cross-origin redirect</strong> (see below) — for an authed endpoint, hit the final URL directly.</li> </ul> <h1 id="ssrf-guard-server-side-not-optional" class="scroll-mt-20">SSRF guard (server-side, not optional)</h1> <p>DNS is resolved <strong>once</strong>, every resolved address is checked, then the request is dialed at the <strong>validated IP</strong> (pinned <code class="readme-inline-code">lookup</code> + TLS <code class="readme-inline-code">servername</code>) — so the IP that passed the check is the IP connected to (no DNS-rebind window).</p> <p>Blocked <strong>unconditionally</strong> → <code class="readme-inline-code">error: "blocked_host"</code>:</p> <ul> <li>Private RFC1918 (<code class="readme-inline-code">10/8</code>, <code class="readme-inline-code">172.16/12</code>, <code class="readme-inline-code">192.168/16</code>)</li> <li>Link-local incl. <strong>cloud metadata</strong> <code class="readme-inline-code">169.254.169.254</code></li> <li>IPv6 ULA (<code class="readme-inline-code">fc00::/7</code>), link-local (<code class="readme-inline-code">fe80::/10</code>), multicast</li> <li><strong><code class="readme-inline-code">::ffff:</code>-mapped IPv4</strong> in both dotted (<code class="readme-inline-code">::ffff:169.254.169.254</code>) and hex (<code class="readme-inline-code">::ffff:a9fe:a9fe</code>) forms</li> </ul> <p>Loopback (<code class="readme-inline-code">127.0.0.0/8</code>, <code class="readme-inline-code">::1</code>, <code class="readme-inline-code">localhost</code>) is <strong>allowed by default</strong> (dev convenience); operators flip <code class="readme-inline-code">web.allow_loopback: false</code> for prod, after which loopback returns <code class="readme-inline-code">blocked_host</code>.</p> <p>On each 3xx the <code class="readme-inline-code">Location</code> is re-resolved and <strong>re-validated</strong> before following, and <code class="readme-inline-code">Authorization</code> / <code class="readme-inline-code">Cookie</code> / <code class="readme-inline-code">Proxy-Authorization</code> are <strong>stripped</strong> when the redirect changes host or downgrades <code class="readme-inline-code">https → http</code>.</p> <h1 id="examples" class="scroll-mt-20">Examples</h1> <pre><code>// Read a documentation page as Markdown { "url": "https://docs.example.com/guide", "format": "markdown" } // → { ok:true, status:200, body:"# Guide\n\n…", transformed:"markdown", content_type:"text/html" } // Parse a JSON API { "url": "https://api.example.com/status", "response_format": "json" } // → { ok:true, status:200, json:{ healthy:true } } // POST JSON (content-type set for you) { "url": "https://api.example.com/things", "method": "post", "json": { "name": "x" }, "response_format": "json" } // Authenticated GET (auth stays only because there's no cross-host redirect) { "url": "https://api.example.com/me", "headers": { "authorization": "Bearer TOKEN" }, "response_format": "json" } // Bounded download of a maybe-large file { "url": "https://example.com/big.log", "max_bytes": 65536 } // → { ok:true, body:"<first 64 KiB>", bytes_truncated:true }</code></pre><h1 id="authoritative-schema" class="scroll-mt-20">Authoritative schema</h1> <p>This page covers behavior the schema can't. For exact field types, call <code class="readme-inline-code">engine::functions::info { function_id: "web::fetch" }</code> — the live schema wins if it ever disagrees with this page.</p> <h1 id="related" class="scroll-mt-20">Related</h1> <ul> <li><a href="iii://shell"><code class="readme-inline-code">shell/index</code></a> — local filesystem + process ops; <code class="readme-inline-code">web::fetch</code> is the network counterpart (use it, not <code class="readme-inline-code">shell::exec curl</code>).</li> <li><a href="iii://sandbox"><code class="readme-inline-code">sandbox/index</code></a> — code <em>inside</em> a sandbox reaches the host engine via the boot-time <code class="readme-inline-code">III_ENGINE_URL</code> rewrite, not <code class="readme-inline-code">web::fetch</code>.</li> </ul> </div></div></section></div><aside class="flex min-w-0 flex-col gap-y-6 @4xl:col-start-2 @4xl:row-start-2 @4xl:self-start"><dl class="grid grid-cols-2 gap-x-6"><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Repository</dt><dd class="min-w-0 text-foreground"><a href="https://github.com/iii-hq/workers" target="_blank" rel="noreferrer" class="inline-flex max-w-full items-center gap-x-2 text-[14px] font-medium transition-colors duration-150 hover:text-brand"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"></path></svg><span class="truncate">iii-hq/workers</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right size-3.5 shrink-0 text-muted-foreground" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Weekly installs</dt><dd class="min-w-0 text-foreground"><span class="font-[550] tabular-nums text-[24px] tracking-[-0.03em]">1</span><div role="img" aria-label="Daily installs over the last 7 completed days: 0, 0, 0, 0, 0, 0, 1" class="relative min-w-0 mt-3"><svg viewBox="0 0 340 52" aria-hidden="true" class="block h-auto w-full overflow-visible text-foreground"><defs><linearGradient id="installs-_R_k9sav5ubspb_" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="currentColor" stop-opacity="0.16"></stop><stop offset="100%" stop-color="currentColor" stop-opacity="0"></stop></linearGradient><linearGradient id="installs-_R_k9sav5ubspb_-fade" x1="0" y1="0" x2="1" y2="0"><stop offset="0%" stop-color="white" stop-opacity="0"></stop><stop offset="25%" stop-color="white" stop-opacity="1"></stop></linearGradient><mask id="installs-_R_k9sav5ubspb_-mask"><rect width="340" height="52" fill="url(#installs-_R_k9sav5ubspb_-fade)"></rect></mask></defs><path d="M4.00,47.00 C22.44,47.00 40.89,47.00 59.33,47.00 C77.78,47.00 96.22,47.00 114.67,47.00 C133.11,47.00 151.56,47.00 170.00,47.00 C188.44,47.00 206.89,47.00 225.33,47.00 C243.78,47.00 262.22,47.00 280.67,47.00 C299.11,47.00 317.56,19.00 336.00,5.00 L336,52 L4,52 Z" fill="url(#installs-_R_k9sav5ubspb_)" mask="url(#installs-_R_k9sav5ubspb_-mask)" style="opacity:0;transition:opacity 500ms cubic-bezier(0.2, 0.8, 0.3, 1) 200ms"></path><line x1="0" x2="0" y1="0" y2="52" stroke="currentColor" stroke-width="1" stroke-dasharray="2 2" style="opacity:0;translate:336px 0;transition:opacity 150ms cubic-bezier(0.2, 0.8, 0.3, 1), translate 180ms cubic-bezier(0.2, 0.8, 0.3, 1)"></line><path d="M4.00,47.00 C22.44,47.00 40.89,47.00 59.33,47.00 C77.78,47.00 96.22,47.00 114.67,47.00 C133.11,47.00 151.56,47.00 170.00,47.00 C188.44,47.00 206.89,47.00 225.33,47.00 C243.78,47.00 262.22,47.00 280.67,47.00 C299.11,47.00 317.56,19.00 336.00,5.00" pathLength="1" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" stroke-dasharray="1 1.1" style="stroke-dashoffset:1.05;transition:stroke-dashoffset 650ms cubic-bezier(0.2, 0.8, 0.3, 1)"></path><g style="translate:336px 5px;transition:translate 180ms cubic-bezier(0.2, 0.8, 0.3, 1)"><circle r="3.25" fill="var(--background)" stroke="currentColor" stroke-width="1.5" class="origin-center [transform-box:fill-box]" style="scale:0;transition:scale 250ms cubic-bezier(0.34, 1.56, 0.64, 1) 550ms"></circle></g></svg></div></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Version</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">v<!-- -->1.2.10</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">License</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">Apache-2.0</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Total installs</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums">625</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Type</dt><dd class="min-w-0 text-foreground"><span class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">binary</span></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Functions</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/workers/web?version=1.2.10&tab=api">4</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Triggers</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/workers/web?version=1.2.10&tab=api">0</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Skills</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/workers/web?version=1.2.10&tab=skills">1</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Dependencies</dt><dd class="min-w-0 text-foreground"><a class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand" href="/workers/web?version=1.2.10&tab=deps">1</a></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3"><dt class="text-[13px] text-muted-foreground">Last publish</dt><dd class="min-w-0 text-foreground"><time dateTime="2026-08-24T18:16:52.097Z" title="2026-08-24T18:16:52.097Z" class="text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate">1mo ago</time></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Platforms</dt><dd class="min-w-0 text-foreground"><ul aria-label="Supported platforms" class="flex flex-wrap items-center gap-2 mt-1"><li title="macOS: arm64, x64" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="209" height="256" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/apple_dark.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">macOS<!-- -->: </span><span class="tabular-nums">arm64 · x64</span></li><li title="Linux: arm64, armv7, x64" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="256" height="295" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/linux.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">Linux<!-- -->: </span><span class="tabular-nums">arm64 · armv7 · x64</span></li><li title="Windows: arm64, x64, x86" class="inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]"><img alt="" aria-hidden="true" loading="lazy" width="88" height="88" decoding="async" data-nimg="1" class="shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto" style="color:transparent" src="/registry/icons/windows.svg?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC"/><span class="sr-only">Windows<!-- -->: </span><span class="tabular-nums">arm64 · x64 · x86</span></li></ul></dd></div><div class="flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2"><dt class="text-[13px] text-muted-foreground">Author</dt><dd class="min-w-0 text-foreground"><span class="inline-flex min-w-0 items-center gap-x-2"><img src="https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png" alt="" class="size-5 shrink-0 rounded-full border border-line object-cover"/><span class="truncate text-[13px] font-medium text-foreground">iii</span><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="1em" height="1em" fill="currentColor" focusable="false" class="size-3.5 shrink-0 text-verified" aria-label="Verified author"><path fill-rule="evenodd" clip-rule="evenodd" d="M15.5837 10.5577L11.5107 14.6327C11.3697 14.7737 11.1787 14.8527 10.9797 14.8527C10.7807 14.8527 10.5897 14.7737 10.4497 14.6327L8.47274 12.6527C8.18075 12.3587 8.18075 11.8837 8.47375 11.5907C8.76775 11.2987 9.24174 11.2997 9.53475 11.5917L10.9807 13.0407L14.5227 9.49667C14.8157 9.20367 15.2907 9.20367 15.5837 9.49667C15.8767 9.78967 15.8767 10.2647 15.5837 10.5577ZM20.7037 10.0857L20.0047 9.38667C19.6857 9.06667 19.5107 8.64067 19.5107 8.18967V7.18967C19.5107 5.70067 18.2987 4.48967 16.8107 4.48967H15.8087C15.3557 4.48967 14.9307 4.31467 14.6127 3.99667L13.9017 3.28667C12.8447 2.23867 11.1327 2.24367 10.0837 3.29767L9.38674 3.99667C9.06574 4.31567 8.64075 4.49067 8.18875 4.49067H7.18775C5.71675 4.49167 4.51675 5.67567 4.48975 7.14167C4.48874 7.15767 4.48775 7.17367 4.48775 7.19067V8.18767C4.48775 8.63967 4.31275 9.06467 3.99375 9.38367L3.28575 10.0927C3.28475 10.0957 3.28175 10.0967 3.27975 10.0987C2.23475 11.1567 2.24375 12.8687 3.29675 13.9117L3.99575 14.6127C4.31375 14.9317 4.48975 15.3557 4.48975 15.8077V16.8127C4.48975 18.3007 5.69975 19.5117 7.18775 19.5117H8.18675C8.63975 19.5127 9.06475 19.6877 9.38275 20.0047L10.0957 20.7157C10.6037 21.2207 11.2777 21.4987 11.9947 21.4987H12.0067C12.7277 21.4957 13.4037 21.2117 13.9097 20.7027L14.6107 20.0027C14.9257 19.6887 15.3617 19.5087 15.8067 19.5087H16.8127C18.2977 19.5087 19.5087 18.2997 19.5117 16.8127V15.8097C19.5117 15.3587 19.6867 14.9337 20.0037 14.6147L20.7147 13.9037C21.7647 12.8477 21.7587 11.1347 20.7037 10.0857Z"></path></svg></span></dd></div></dl><section class="shrink-0 overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20"><div class="flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4"><span class="font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground">skills</span></div><div class="flex flex-col p-0 gap-y-0 max-h-[min(60dvh,28rem)] overflow-y-auto"><div><section aria-labelledby="skills-tree-web"><div id="skills-tree-web" class="flex items-baseline justify-between px-4 pt-3 font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground"><span>files</span><span class="tabular-nums">1</span></div><nav aria-label="skill files" class="px-2 py-2"><ul class="flex flex-col gap-y-px"><li style="padding-left:0"><a aria-current="page" class="block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand bg-code text-foreground" href="/workers/web?tab=skills&skill=SKILL.md&version=1.2.10">SKILL.md</a></li></ul></nav></section></div></div></section></aside></div></div></div><!--$--><!--/$--></main></div></div><footer class="border-t border-line bg-background text-foreground"><div class="mx-auto max-w-[1280px] px-9 pt-16 max-sm:px-[22px] max-sm:pt-11"><div class="grid grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)] gap-20 max-[900px]:grid-cols-1 max-[900px]:gap-10"><div><a href="https://iii.dev" aria-label="iii home" class="inline-flex size-7 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><svg viewBox="0 0 1075.74 1075.74" aria-hidden="true" focusable="false" class="block shrink-0 size-full" fill="currentColor"><rect x="0" y="0.05" width="268.94" height="268.94"></rect><rect x="403.4" y="0.05" width="268.94" height="268.94"></rect><rect x="806.81" y="0.05" width="268.94" height="268.94"></rect><rect x="0" y="403.45" width="268.94" height="672.24"></rect><rect x="403.4" y="403.45" width="268.94" height="672.24"></rect><rect x="806.81" y="403.45" width="268.94" height="672.24"></rect></svg></a><p class="mt-[18px] max-w-[340px] text-[15px] leading-[1.65] text-muted-foreground">A next-generation software system.<br/>Workers. Triggers. Functions.</p><p class="mt-2 max-w-[340px] text-[13px] leading-[1.65] text-muted-foreground">Pronounced<!-- --> <span class="text-foreground">"three eye"</span></p></div><nav aria-label="Footer" class="grid grid-cols-3 gap-8 max-sm:grid-cols-2 max-sm:gap-x-4 max-sm:gap-y-6"><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Product</h3><ul class="list-none p-0"><li><a href="https://iii.dev/docs" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Docs</span></a></li><li><a href="https://iii.dev/docs/quickstart" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Quickstart</span></a></li><li><a href="/" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Worker registry</span></a></li><li><a href="https://iii.dev/roadmap" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Roadmap</span></a></li><li><a href="https://iii.dev/manifesto" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Manifesto</span></a></li><li><a href="https://iii.dev/blog" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground"><span>Blog</span></a></li></ul></div><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Community</h3><ul class="list-none p-0"><li><a href="https://github.com/iii-hq/iii" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"></path></svg><span>GitHub</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://discord.gg/iiidev" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.4919 12.798C10.4928 12.7793 10.4916 12.7606 10.489 12.7421C10.4613 12.5469 10.4514 12.347 10.3951 12.1599C10.1841 11.4539 9.74808 10.9469 9.00608 10.7969C8.29208 10.6539 7.71308 10.9269 7.28508 11.5059C6.70508 12.2879 6.76108 13.4529 7.40208 14.1859C8.09108 14.9729 9.21108 14.9939 9.92408 14.2269C10.2967 13.8258 10.4673 13.3434 10.4919 12.798ZM17.1383 12.7812C17.1389 12.7644 17.1379 12.7475 17.1357 12.7308C17.1132 12.5616 17.1039 12.3878 17.0601 12.2239C16.8721 11.5239 16.4651 11.0089 15.7441 10.8189C15.1071 10.6509 14.5481 10.8339 14.0951 11.3089C13.3501 12.0899 13.3461 13.4249 14.0781 14.2169C14.7981 14.9939 15.9331 14.9789 16.6201 14.1779C16.9636 13.7773 17.1191 13.306 17.1383 12.7812ZM17.0985 17.278C17.2735 17.1939 17.3406 16.9478 17.1827 16.8346C17.0669 16.7515 16.9741 16.7834 16.7571 16.8759C13.5891 18.2239 10.4191 18.2099 7.24908 16.8849C7.02096 16.7895 6.93273 16.7517 6.82128 16.8227C6.65302 16.93 6.71802 17.1898 6.89748 17.277C7.23862 17.4429 7.58015 17.609 7.93832 17.7829C8.09958 17.8613 8.15678 18.0626 8.06083 18.214C7.77618 18.6633 7.49507 19.108 7.20508 19.5459C7.17408 19.5919 7.04108 19.6069 6.97208 19.5859C5.25708 19.0449 3.67108 18.2459 2.22008 17.1829C2.14608 17.1289 2.08208 17.0159 2.07408 16.9239C1.74508 13.2929 2.51308 9.90588 4.35508 6.75988C5.05808 5.55888 5.05608 5.53788 6.55408 5.06188C7.34208 4.81188 8.15408 4.63988 8.95308 4.42288C9.12908 4.37588 9.21708 4.42788 9.28708 4.58688C9.37508 4.78388 9.50608 4.96388 9.57408 5.16688C9.65508 5.40888 9.77908 5.46588 10.0301 5.42988C11.4051 5.23188 12.7811 5.26188 14.1551 5.44288C14.2295 5.45351 14.3008 5.4087 14.3344 5.34142C14.4633 5.08312 14.5955 4.82606 14.7171 4.56288C14.7801 4.42488 14.8581 4.38688 15.0111 4.41588C16.3001 4.65988 17.5471 5.03488 18.7421 5.57688C18.8641 5.63288 18.9861 5.73388 19.0601 5.84488C20.4731 7.95488 21.4261 10.2489 21.8121 12.7659C22.0241 14.1449 22.0491 15.5309 21.9241 16.9189C21.9151 17.0179 21.8391 17.1399 21.7561 17.1989C20.3161 18.2439 18.7501 19.0439 17.0491 19.5739C16.9661 19.5999 16.8091 19.5849 16.7731 19.5309C16.4849 19.0998 16.2096 18.6599 15.9282 18.2116C15.8329 18.0598 15.8907 17.8587 16.0522 17.781C16.4087 17.6095 16.7514 17.4448 17.0985 17.278Z"></path></svg><span>Discord</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://x.com/iiidevs" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path transform="translate(1.5 1.5) scale(0.875)" d="M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z"></path></svg><span>Twitter / X</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://www.linkedin.com/company/iii-dev" class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path fill-rule="evenodd" clip-rule="evenodd" d="M5.4 2.5h13.2a2.9 2.9 0 0 1 2.9 2.9v13.2a2.9 2.9 0 0 1-2.9 2.9H5.4a2.9 2.9 0 0 1-2.9-2.9V5.4a2.9 2.9 0 0 1 2.9-2.9Zm2.33 7.1H5.6v7.9h2.13V9.6ZM6.67 6.1a1.24 1.24 0 1 0 0 2.48 1.24 1.24 0 0 0 0-2.48Zm11.73 7.1c0-2.26-1.21-3.31-2.82-3.31-1.3 0-1.88.72-2.21 1.22V9.6H11.2c.03.6 0 7.9 0 7.9h2.17v-4.41c0-.24.02-.47.09-.64.19-.47.62-.96 1.35-.96.95 0 1.33.73 1.33 1.79v4.22h2.26V13.2Z"></path></svg><span>LinkedIn</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li></ul></div><div><h3 class="mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase">Ask about iii</h3><ul class="list-none p-0"><li><a href="https://chatgpt.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"></path></svg><span>ChatGPT</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://claude.ai/new?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"></path></svg><span>Claude</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm7.0212-7.0212v-7.0111l5.7764 5.7764v2.6488h.0001v3.8852l-5.7765-5.2993zm8.9765 2.0444h-1.9727l-6.1149-6.1147h8.0876v6.1147z"></path></svg><span>Perplexity</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li><li><a href="https://grok.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service." class="group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground" target="_blank" rel="noopener noreferrer"><svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false" class="size-4 shrink-0"><path d="M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815"></path></svg><span>Grok</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100" aria-hidden="true"><path d="M7 7h10v10"></path><path d="M7 17 17 7"></path></svg></a></li></ul></div></nav></div><div class="mt-13 border-t border-line py-[22px] text-[13px] text-muted-foreground max-sm:mt-9"><p class="flex items-center gap-2">© <!-- -->2026<!-- --> Motia LLC<!-- --> <span aria-hidden="true">·</span> <a href="https://iii.dev/privacy-policy" class="hover:text-foreground focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground">Privacy</a></p></div></div></footer><div data-slot="dialog-header" class="flex flex-col gap-2 sr-only"><h2 id="base-ui-_R_2v9b_" data-slot="dialog-title" class="font-heading text-base leading-none font-medium">Search the registry</h2><p id="base-ui-_R_4v9b_" data-slot="dialog-description" class="text-sm text-muted-foreground *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground">Find workers, kits and executables, or jump to a page.</p></div><script src="/registry/_next/static/chunks/06o3ty5hs.tzu.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n3:I[90280,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n4:I[69616,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n6:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"OutletBoundary\"]\n7:\"$Sreact.suspense\"\na:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"ViewportBoundary\"]\nc:I[51557,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"MetadataBoundary\"]\ne:I[50609,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0w_agc1b2gf-n.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n:HL[\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"style\"]\n:HL[\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"style\"]\n:HL[\"/registry/_next/static/media/797e433ab948586e-s.p.08e28id.o-okb.woff2?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/registry/_next/static/media/83afe278b6a6bb3c-s.p.0q-301v4kxxnr.woff2?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"workers\",\"web?tab=skills\u0026version=1.2.10\"],\"q\":\"?tab=skills\u0026version=1.2.10\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"workers\",{\"children\":[[\"slug\",\"web\",\"d\",null],{\"children\":[\"__PAGE__?{\\\"tab\\\":\\\"skills\\\",\\\"version\\\":\\\"1.2.10\\\"}\",{}]}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-2\",{\"src\":\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-3\",{\"src\":\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}]],\"$L2\"]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[\"$L5\",[[\"$\",\"script\",\"script-0\",{\"src\":\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"$L6\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@8\"}]}]]}],{},null,false,null]},null,false,\"$@9\"]},null,false,\"$@9\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$La\",null,{\"children\":\"$Lb\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Lc\",null,{\"children\":[\"$\",\"$7\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Ld\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0qh42370pyoqz.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"link\",\"1\",{\"rel\":\"stylesheet\",\"href\":\"/registry/_next/static/chunks/0.-bsgr3_7ked.css?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":false,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"f:[]\n9:\"$Wf\"\nb:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"10:I[18418,[\"/registry/_next/static/chunks/04ylibgf-0e6d.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0f8jgu0hu0~vn.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"IconMark\"]\n12:I[77792,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Providers\"]\n13:I[84148,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"SiteHeader\"]\n14:I[92439,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Link\"]\n8:null\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"title\",\"0\",{\"children\":\"web worker · iii Registry\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Outbound HTTP client on the iii bus (web::fetch).\"}],[\"$\",\"meta\",\"2\",{\"name\":\"application-name\",\"content\":\"iii Registry\"}],[\"$\",\"meta\",\"3\",{\"name\":\"publisher\",\"content\":\"iii\"}],[\"$\",\"meta\",\"4\",{\"name\":\"robots\",\"content\":\"index, follow\"}],[\"$\",\"meta\",\"5\",{\"name\":\"googlebot\",\"content\":\"index, follow, max-image-preview:large, max-snippet:-1\"}],[\"$\",\"link\",\"6\",{\"rel\":\"canonical\",\"href\":\"https://iii.dev/registry/workers/web\"}],[\"$\",\"link\",\"7\",{\"rel\":\"alternate\",\"type\":\"text/markdown\",\"href\":\"https://iii.dev/registry/workers/web.md\"}],[\"$\",\"meta\",\"8\",{\"property\":\"og:title\",\"content\":\"web worker · iii Registry\"}],[\"$\",\"meta\",\"9\",{\"property\":\"og:description\",\"content\":\"Outbound HTTP client on the iii bus (web::fetch).\"}],[\"$\",\"meta\",\"10\",{\"property\":\"og:url\",\"content\":\"https://iii.dev/registry/workers/web\"}],[\"$\",\"meta\",\"11\",{\"property\":\"og:site_name\",\"content\":\"iii Registry\"}],[\"$\",\"meta\",\"12\",{\"property\":\"og:locale\",\"content\":\"en_US\"}],[\"$\",\"meta\",\"13\",{\"property\":\"og:image\",\"content\":\"https://iii.dev/registry/workers/web/opengraph-image?b747c5eeb0667fcb\"}],[\"$\",\"meta\",\"14\",{\"property\":\"og:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"15\",{\"property\":\"og:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"16\",{\"property\":\"og:image:height\",\"content\":\"630\"}],[\"$\",\"meta\",\"17\",{\"property\":\"og:image:alt\",\"content\":\"An iii worker on the iii Registry\"}],[\"$\",\"meta\",\"18\",{\"property\":\"og:type\",\"content\":\"website\"}],[\"$\",\"meta\",\"19\",{\"name\":\"twitter:card\",\"content\":\"summary_large_image\"}],[\"$\",\"meta\",\"20\",{\"name\":\"twitter:site\",\"content\":\"@iiidevs\"}],[\"$\",\"meta\",\"21\",{\"name\":\"twitter:creator\",\"content\":\"@iiidevs\"}],[\"$\",\"meta\",\"22\",{\"name\":\"twitter:title\",\"content\":\"web worker · iii Registry\"}],[\"$\",\"meta\",\"23\",{\"name\":\"twitter:description\",\"content\":\"Outbound HTTP client on the iii bus (web::fetch).\"}],[\"$\",\"meta\",\"24\",{\"name\":\"twitter:image\",\"content\":\"https://iii.dev/registry/workers/web/opengraph-image?b747c5eeb0667fcb\"}],[\"$\",\"meta\",\"25\",{\"name\":\"twitter:image:alt\",\"content\":\"An iii worker on the iii Registry\"}],[\"$\",\"meta\",\"26\",{\"name\":\"twitter:image:type\",\"content\":\"image/png\"}],[\"$\",\"meta\",\"27\",{\"name\":\"twitter:image:width\",\"content\":\"1200\"}],[\"$\",\"meta\",\"28\",{\"name\":\"twitter:image:height\",\"content\":\"630\"}],[\"$\",\"link\",\"29\",{\"rel\":\"icon\",\"href\":\"/registry/favicon.ico\",\"sizes\":\"48x48\"}],[\"$\",\"link\",\"30\",{\"rel\":\"icon\",\"href\":\"/registry/favicon.svg\",\"type\":\"image/svg+xml\"}],[\"$\",\"link\",\"31\",{\"rel\":\"apple-touch-icon\",\"href\":\"/registry/apple-touch-icon.png\",\"sizes\":\"180x180\"}],[\"$\",\"$L10\",\"32\",{}]]\n"])</script><script>self.__next_f.push([1,"11:[\"$\",\"iframe\",null,{\"src\":\"https://www.googletagmanager.com/ns.html?id=GTM-N8DCTFB8\",\"height\":\"0\",\"width\":\"0\",\"style\":{\"display\":\"none\",\"visibility\":\"hidden\"},\"title\":\"Google Tag Manager\"}]\n"])</script><script>self.__next_f.push([1,"2:[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"antialiased inter_fe8b9d92-module__LINzvG__variable geist_mono_8d43a2aa-module__8Li5zG__variable\",\"data-theme\":\"light\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"bg-background text-foreground font-sans min-h-full flex flex-col\",\"children\":[[[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n try {\\n var stored = localStorage.getItem('iii-theme');\\n if (stored === 'dark' || stored === 'light') {\\n document.documentElement.dataset.theme = stored;\\n } else {\\n document.documentElement.dataset.theme = 'light';\\n }\\n } catch (_) {\\n document.documentElement.dataset.theme = 'light';\\n }\\n\"}}],[\"$\",\"script\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"\\n (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':\\n new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],\\n j=d.createElement(s),dl=l!='dataLayer'?'\u0026l='+l:'';j.async=true;j.src=\\n 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);\\n })(window,document,'script','dataLayer','GTM-N8DCTFB8');\\n\"}}]],[\"$\",\"noscript\",null,{\"children\":\"$11\"}],[\"$\",\"a\",null,{\"href\":\"#main-content\",\"className\":\"sr-only focus:not-sr-only focus:fixed focus:top-3 focus:left-3 focus:z-[60] focus:rounded-lg focus:bg-foreground focus:px-3 focus:py-2 focus:text-sm focus:font-medium focus:text-background\",\"children\":\"Skip to content\"}],[\"$\",\"$L12\",null,{\"basePath\":\"\",\"children\":[[\"$\",\"$L13\",null,{\"stats\":{\"stars\":\"18,848\",\"members\":\"2.4k\",\"starsCount\":18848,\"membersCount\":2405}}],[\"$\",\"div\",null,{\"className\":\"mx-auto w-full max-w-7xl has-[.registry-home]:max-w-none @container flex-1 bg-bg flex flex-col\",\"children\":[\"$\",\"div\",null,{\"className\":\"flex-1 overflow-x-clip flex flex-col\",\"children\":[\"$\",\"main\",null,{\"id\":\"main-content\",\"className\":\"flex-1\",\"tabIndex\":-1,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[\"$\",\"div\",null,{\"className\":\"page-transition flex flex-1 flex-col\",\"children\":[[\"$\",\"header\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-8 gap-y-5 px-[22px] pt-12 sm:px-9 sm:pt-16 pb-0 sm:pb-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 font-mono text-[10px] leading-[normal] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":\"error / not found\"}],[\"$\",\"div\",null,{\"className\":\"flex items-center flex-wrap gap-x-3 gap-y-2\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-[32px] sm:text-[40px] font-[550] leading-[1.1] tracking-[-0.04em] text-foreground text-balance\",\"children\":[\"$\",\"span\",null,{\"className\":\"block text-[64px] leading-none tracking-[-0.05em] tabular-nums sm:text-[88px]\",\"children\":\"404\"}]}],\"$undefined\",null]}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-[60ch] text-[15px] leading-[1.7] text-muted-foreground text-pretty\",\"children\":\"This page isn’t in the registry. It may have been renamed, or never published.\"}]]}],null]}],[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-3 px-[22px] pt-8 pb-24 sm:px-9 sm:pb-32\",\"children\":[[\"$\",\"$L14\",null,{\"href\":\"/\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap rounded-xl font-medium transition-[background-color,color,border-color,opacity,transform] duration-150 ease-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand disabled:pointer-events-none disabled:opacity-50 select-none active:scale-[0.96] motion-reduce:active:scale-100 [\u0026_svg]:size-3.5 [\u0026_svg]:shrink-0 bg-foreground text-background hover:opacity-[0.88] h-10 px-4 text-[14px]\",\"children\":\"Back to the registry\"}],[\"$\",\"$L14\",null,{\"href\":\"/search\",\"className\":\"inline-flex items-center justify-center gap-x-2 whitespace-nowrap rounded-xl font-medium transition-[background-color,color,border-color,opacity,transform] duration-150 ease-out focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand disabled:pointer-events-none disabled:opacity-50 select-none active:scale-[0.96] motion-reduce:active:scale-100 [\u0026_svg]:size-3.5 [\u0026_svg]:shrink-0 border border-line bg-background text-foreground hover:border-[color-mix(in_srgb,var(--foreground)_22%,var(--line))] hover:bg-paper h-10 px-4 text-[14px]\",\"children\":[\"$L15\",\"Search\"]}]]}]]}],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}],\"$L16\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"17:I[41074,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"default\"]\n15:[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"m21 21-4.34-4.34\",\"key\":\"14j7rj\"}],[\"circle\",{\"cx\":\"11\",\"cy\":\"11\",\"r\":\"8\",\"key\":\"4ej97u\"}]],\"className\":\"lucide-search\",\"aria-hidden\":\"true\"}]\n"])</script><script>self.__next_f.push([1,"16:[\"$\",\"footer\",null,{\"className\":\"border-t border-line bg-background text-foreground\",\"children\":[\"$\",\"div\",null,{\"className\":\"mx-auto max-w-[1280px] px-9 pt-16 max-sm:px-[22px] max-sm:pt-11\",\"children\":[[\"$\",\"div\",null,{\"className\":\"grid grid-cols-[minmax(0,1fr)_minmax(0,1.4fr)] gap-20 max-[900px]:grid-cols-1 max-[900px]:gap-10\",\"children\":[[\"$\",\"div\",null,{\"children\":[[\"$\",\"a\",null,{\"href\":\"https://iii.dev\",\"aria-label\":\"iii home\",\"className\":\"inline-flex size-7 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[\"$\",\"svg\",null,{\"viewBox\":\"0 0 1075.74 1075.74\",\"aria-hidden\":\"true\",\"focusable\":\"false\",\"className\":\"block shrink-0 size-full\",\"fill\":\"currentColor\",\"children\":[[\"$\",\"rect\",\"0\",{\"x\":0,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"403.4\",{\"x\":403.4,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"806.81\",{\"x\":806.81,\"y\":0.05,\"width\":268.94,\"height\":268.94}],[\"$\",\"rect\",\"stem-0\",{\"x\":0,\"y\":403.45,\"width\":268.94,\"height\":672.24}],[\"$\",\"rect\",\"stem-403.4\",{\"x\":403.4,\"y\":403.45,\"width\":268.94,\"height\":672.24}],[\"$\",\"rect\",\"stem-806.81\",{\"x\":806.81,\"y\":403.45,\"width\":268.94,\"height\":672.24}]]}]}],[\"$\",\"p\",null,{\"className\":\"mt-[18px] max-w-[340px] text-[15px] leading-[1.65] text-muted-foreground\",\"children\":[\"A next-generation software system.\",[\"$\",\"br\",null,{}],\"Workers. Triggers. Functions.\"]}],[\"$\",\"p\",null,{\"className\":\"mt-2 max-w-[340px] text-[13px] leading-[1.65] text-muted-foreground\",\"children\":[\"Pronounced\",\" \",[\"$\",\"span\",null,{\"className\":\"text-foreground\",\"children\":\"\\\"three eye\\\"\"}]]}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"Footer\",\"className\":\"grid grid-cols-3 gap-8 max-sm:grid-cols-2 max-sm:gap-x-4 max-sm:gap-y-6\",\"children\":[[\"$\",\"div\",\"Product\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Product\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"Docs\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/docs\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Docs\"}],null]}]}],[\"$\",\"li\",\"Quickstart\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/docs/quickstart\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Quickstart\"}],null]}]}],[\"$\",\"li\",\"Worker registry\",{\"children\":[\"$\",\"a\",null,{\"href\":\"/\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Worker registry\"}],null]}]}],[\"$\",\"li\",\"Roadmap\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/roadmap\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Roadmap\"}],null]}]}],[\"$\",\"li\",\"Manifesto\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/manifesto\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Manifesto\"}],null]}]}],\"$L18\"]}]]}],\"$L19\",\"$L1a\"]}]]}],\"$L1b\"]}]}]\n"])</script><script>self.__next_f.push([1,"18:[\"$\",\"li\",\"Blog\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://iii.dev/blog\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":[null,[\"$\",\"span\",null,{\"children\":\"Blog\"}],null]}]}]\n1c:T4c4,M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z1d:T894,"])</script><script>self.__next_f.push([1,"M10.4919 12.798C10.4928 12.7793 10.4916 12.7606 10.489 12.7421C10.4613 12.5469 10.4514 12.347 10.3951 12.1599C10.1841 11.4539 9.74808 10.9469 9.00608 10.7969C8.29208 10.6539 7.71308 10.9269 7.28508 11.5059C6.70508 12.2879 6.76108 13.4529 7.40208 14.1859C8.09108 14.9729 9.21108 14.9939 9.92408 14.2269C10.2967 13.8258 10.4673 13.3434 10.4919 12.798ZM17.1383 12.7812C17.1389 12.7644 17.1379 12.7475 17.1357 12.7308C17.1132 12.5616 17.1039 12.3878 17.0601 12.2239C16.8721 11.5239 16.4651 11.0089 15.7441 10.8189C15.1071 10.6509 14.5481 10.8339 14.0951 11.3089C13.3501 12.0899 13.3461 13.4249 14.0781 14.2169C14.7981 14.9939 15.9331 14.9789 16.6201 14.1779C16.9636 13.7773 17.1191 13.306 17.1383 12.7812ZM17.0985 17.278C17.2735 17.1939 17.3406 16.9478 17.1827 16.8346C17.0669 16.7515 16.9741 16.7834 16.7571 16.8759C13.5891 18.2239 10.4191 18.2099 7.24908 16.8849C7.02096 16.7895 6.93273 16.7517 6.82128 16.8227C6.65302 16.93 6.71802 17.1898 6.89748 17.277C7.23862 17.4429 7.58015 17.609 7.93832 17.7829C8.09958 17.8613 8.15678 18.0626 8.06083 18.214C7.77618 18.6633 7.49507 19.108 7.20508 19.5459C7.17408 19.5919 7.04108 19.6069 6.97208 19.5859C5.25708 19.0449 3.67108 18.2459 2.22008 17.1829C2.14608 17.1289 2.08208 17.0159 2.07408 16.9239C1.74508 13.2929 2.51308 9.90588 4.35508 6.75988C5.05808 5.55888 5.05608 5.53788 6.55408 5.06188C7.34208 4.81188 8.15408 4.63988 8.95308 4.42288C9.12908 4.37588 9.21708 4.42788 9.28708 4.58688C9.37508 4.78388 9.50608 4.96388 9.57408 5.16688C9.65508 5.40888 9.77908 5.46588 10.0301 5.42988C11.4051 5.23188 12.7811 5.26188 14.1551 5.44288C14.2295 5.45351 14.3008 5.4087 14.3344 5.34142C14.4633 5.08312 14.5955 4.82606 14.7171 4.56288C14.7801 4.42488 14.8581 4.38688 15.0111 4.41588C16.3001 4.65988 17.5471 5.03488 18.7421 5.57688C18.8641 5.63288 18.9861 5.73388 19.0601 5.84488C20.4731 7.95488 21.4261 10.2489 21.8121 12.7659C22.0241 14.1449 22.0491 15.5309 21.9241 16.9189C21.9151 17.0179 21.8391 17.1399 21.7561 17.1989C20.3161 18.2439 18.7501 19.0439 17.0491 19.5739C16.9661 19.5999 16.8091 19.5849 16.7731 19.5309C16.4849 19.0998 16.2096 18.6599 15.9282 18.2116C15.8329 18.0598 15.8907 17.8587 16.0522 17.781C16.4087 17.6095 16.7514 17.4448 17.0985 17.278Z"])</script><script>self.__next_f.push([1,"19:[\"$\",\"div\",\"Community\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Community\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"GitHub\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/iii\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$1c\"}]}],[\"$\",\"span\",null,{\"children\":\"GitHub\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":[[\"path\",{\"d\":\"M7 7h10v10\",\"key\":\"1tivn9\"}],[\"path\",{\"d\":\"M7 17 17 7\",\"key\":\"1vkiza\"}]],\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}],[\"$\",\"li\",\"Discord\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://discord.gg/iiidev\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$1d\"}]}],\"$L1e\",\"$L1f\"]}]}],\"$L20\",\"$L21\"]}]]}]\n"])</script><script>self.__next_f.push([1,"22:T5b4,"])</script><script>self.__next_f.push([1,"M22.2819 9.8211a5.9847 5.9847 0 0 0-.5157-4.9108 6.0462 6.0462 0 0 0-6.5098-2.9A6.0651 6.0651 0 0 0 4.9807 4.1818a5.9847 5.9847 0 0 0-3.9977 2.9 6.0462 6.0462 0 0 0 .7427 7.0966 5.98 5.98 0 0 0 .511 4.9107 6.051 6.051 0 0 0 6.5146 2.9001A5.9847 5.9847 0 0 0 13.2599 24a6.0557 6.0557 0 0 0 5.7718-4.2058 5.9894 5.9894 0 0 0 3.9977-2.9001 6.0557 6.0557 0 0 0-.7475-7.0729zm-9.022 12.6081a4.4755 4.4755 0 0 1-2.8764-1.0408l.1419-.0804 4.7783-2.7582a.7948.7948 0 0 0 .3927-.6813v-6.7369l2.02 1.1686a.071.071 0 0 1 .038.052v5.5826a4.504 4.504 0 0 1-4.4945 4.4944zm-9.6607-4.1254a4.4708 4.4708 0 0 1-.5346-3.0137l.142.0852 4.783 2.7582a.7712.7712 0 0 0 .7806 0l5.8428-3.3685v2.3324a.0804.0804 0 0 1-.0332.0615L9.74 19.9502a4.4992 4.4992 0 0 1-6.1408-1.6464zM2.3408 7.8956a4.485 4.485 0 0 1 2.3655-1.9728V11.6a.7664.7664 0 0 0 .3879.6765l5.8144 3.3543-2.0201 1.1685a.0757.0757 0 0 1-.071 0l-4.8303-2.7865A4.504 4.504 0 0 1 2.3408 7.872zm16.5963 3.8558L13.1038 8.364 15.1192 7.2a.0757.0757 0 0 1 .071 0l4.8303 2.7913a4.4944 4.4944 0 0 1-.6765 8.1042v-5.6772a.79.79 0 0 0-.407-.667zm2.0107-3.0231l-.142-.0852-4.7735-2.7818a.7759.7759 0 0 0-.7854 0L9.409 9.2297V6.8974a.0662.0662 0 0 1 .0284-.0615l4.8303-2.7866a4.4992 4.4992 0 0 1 6.6802 4.66zM8.3065 12.863l-2.02-1.1638a.0804.0804 0 0 1-.038-.0567V6.0742a4.4992 4.4992 0 0 1 7.3757-3.4537l-.142.0805L8.704 5.459a.7948.7948 0 0 0-.3927.6813zm1.0976-2.3654l2.602-1.4998 2.6069 1.4998v2.9994l-2.5974 1.4997-2.6067-1.4997Z"])</script><script>self.__next_f.push([1,"1a:[\"$\",\"div\",\"Ask about iii\",{\"children\":[[\"$\",\"h3\",null,{\"className\":\"mb-3 text-[13px] font-medium tracking-[0.06em] text-muted-foreground uppercase\",\"children\":\"Ask about iii\"}],[\"$\",\"ul\",null,{\"className\":\"list-none p-0\",\"children\":[[\"$\",\"li\",\"ChatGPT\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://chatgpt.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"$22\"}]}],[\"$\",\"span\",null,{\"children\":\"ChatGPT\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}],[\"$\",\"li\",\"Claude\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://claude.ai/new?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":\"$L23\"}],\"$L24\",\"$L25\"]}]}],\"$L26\",\"$L27\"]}]]}]\n"])</script><script>self.__next_f.push([1,"1b:[\"$\",\"div\",null,{\"className\":\"mt-13 border-t border-line py-[22px] text-[13px] text-muted-foreground max-sm:mt-9\",\"children\":[\"$\",\"p\",null,{\"className\":\"flex items-center gap-2\",\"children\":[\"© \",2026,\" Motia LLC\",\" \",[\"$\",\"span\",null,{\"aria-hidden\":\"true\",\"children\":\"·\"}],\" \",[\"$\",\"a\",null,{\"href\":\"https://iii.dev/privacy-policy\",\"className\":\"hover:text-foreground focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"children\":\"Privacy\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"1e:[\"$\",\"span\",null,{\"children\":\"Discord\"}]\n1f:[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]\n20:[\"$\",\"li\",\"Twitter / X\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://x.com/iiidevs\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"transform\":\"translate(1.5 1.5) scale(0.875)\",\"d\":\"M18.901 1.153h3.68l-8.04 9.19L24 22.846h-7.406l-5.8-7.584-6.638 7.584H.474l8.6-9.83L0 1.154h7.594l5.243 6.932ZM17.61 20.644h2.039L6.486 3.24H4.298Z\"}]}],[\"$\",\"span\",null,{\"children\":\"Twitter / X\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n21:[\"$\",\"li\",\"LinkedIn\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://www.linkedin.com/company/iii-dev\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"M5.4 2.5h13.2a2.9 2.9 0 0 1 2.9 2.9v13.2a2.9 2.9 0 0 1-2.9 2.9H5.4a2.9 2.9 0 0 1-2.9-2.9V5.4a2.9 2.9 0 0 1 2.9-2.9Zm2.33 7.1H5.6v7.9h2.13V9.6ZM6.67 6.1a1.24 1.24 0 1 0 0 2.48 1.24 1.24 0 0 0 0-2.48Zm11.73 7.1c0-2.26-1.21-3.31-2.82-3.31-1.3 0-1.88.72-2.21 1.22V9.6H11.2c.03.6 0 7.9 0 7.9h2.17v-4.41c0-.24.02-.47.09-.64.19-.47.62-.96 1.35-.96.95 0 1.33.73 1.33 1.79v4.22h2.26V13.2Z\"}]}],[\"$\",\"span\",null,{\"children\":\"LinkedIn\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n28:T713,"])</script><script>self.__next_f.push([1,"m4.7144 15.9555 4.7174-2.6471.079-.2307-.079-.1275h-.2307l-.7893-.0486-2.6956-.0729-2.3375-.0971-2.2646-.1214-.5707-.1215-.5343-.7042.0546-.3522.4797-.3218.686.0608 1.5179.1032 2.2767.1578 1.6514.0972 2.4468.255h.3886l.0546-.1579-.1336-.0971-.1032-.0972L6.973 9.8356l-2.55-1.6879-1.3356-.9714-.7225-.4918-.3643-.4614-.1578-1.0078.6557-.7225.8803.0607.2246.0607.8925.686 1.9064 1.4754 2.4893 1.8336.3643.3035.1457-.1032.0182-.0728-.164-.2733-1.3539-2.4467-1.445-2.4893-.6435-1.032-.17-.6194c-.0607-.255-.1032-.4674-.1032-.7285L6.287.1335 6.6997 0l.9957.1336.419.3642.6192 1.4147 1.0018 2.2282 1.5543 3.0296.4553.8985.2429.8318.091.255h.1579v-.1457l.1275-1.706.2368-2.0947.2307-2.6957.0789-.7589.3764-.9107.7468-.4918.5828.2793.4797.686-.0668.4433-.2853 1.8517-.5586 2.9021-.3643 1.9429h.2125l.2429-.2429.9835-1.3053 1.6514-2.0643.7286-.8196.85-.9046.5464-.4311h1.0321l.759 1.1293-.34 1.1657-1.0625 1.3478-.8804 1.1414-1.2628 1.7-.7893 1.36.0729.1093.1882-.0183 2.8535-.607 1.5421-.2794 1.8396-.3157.8318.3886.091.3946-.3278.8075-1.967.4857-2.3072.4614-3.4364.8136-.0425.0304.0486.0607 1.5482.1457.6618.0364h1.621l3.0175.2247.7892.522.4736.6376-.079.4857-1.2142.6193-1.6393-.3886-3.825-.9107-1.3113-.3279h-.1822v.1093l1.0929 1.0686 2.0035 1.8092 2.5075 2.3314.1275.5768-.3218.4554-.34-.0486-2.2039-1.6575-.85-.7468-1.9246-1.621h-.1275v.17l.4432.6496 2.3436 3.5214.1214 1.0807-.17.3521-.6071.2125-.6679-.1214-1.3721-1.9246L14.38 17.959l-1.1414-1.9428-.1397.079-.674 7.2552-.3156.3703-.7286.2793-.6071-.4614-.3218-.7468.3218-1.4753.3886-1.9246.3157-1.53.2853-1.9004.17-.6314-.0121-.0425-.1397.0182-1.4328 1.9672-2.1796 2.9446-1.7243 1.8456-.4128.164-.7164-.3704.0667-.6618.4008-.5889 2.386-3.0357 1.4389-1.882.929-1.0868-.0062-.1579h-.0546l-6.3385 4.1164-1.1293.1457-.4857-.4554.0608-.7467.2307-.2429 1.9064-1.3114Z"])</script><script>self.__next_f.push([1,"23:[\"$\",\"path\",null,{\"d\":\"$28\"}]\n24:[\"$\",\"span\",null,{\"children\":\"Claude\"}]\n25:[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]\n"])</script><script>self.__next_f.push([1,"26:[\"$\",\"li\",\"Perplexity\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://www.perplexity.ai/search?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"M22.3977 7.0896h-2.3106V.0676l-7.5094 6.3542V.1577h-1.1554v6.1966L4.4904 0v7.0896H1.6023v10.3976h2.8882V24l6.932-6.3591v6.2005h1.1554v-6.0469l6.9318 6.1807v-6.4879h2.8882V7.0896zm-3.4657-4.531v4.531h-5.355l5.355-4.531zm-13.2862.0676 4.8691 4.4634H5.6458V2.6262zM2.7576 16.332V8.245h7.8476l-6.1149 6.1147v1.9723H2.7576zm2.8882 5.0404v-3.8852h.0001v-2.6488l5.7763-5.7764v7.0111l-5.7764 5.2993zm7.0212-7.0212v-7.0111l5.7764 5.7764v2.6488h.0001v3.8852l-5.7765-5.2993zm8.9765 2.0444h-1.9727l-6.1149-6.1147h8.0876v6.1147z\"}]}],[\"$\",\"span\",null,{\"children\":\"Perplexity\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"27:[\"$\",\"li\",\"Grok\",{\"children\":[\"$\",\"a\",null,{\"href\":\"https://grok.com/?q=Read%20https%3A%2F%2Fiii.dev%2Fllms.txt%20and%20explain%20iii%20to%20me%3A%20its%20three%20primitives%20(Worker%2C%20Trigger%2C%20Function)%2C%20what%20it%20replaces%20in%20a%20typical%20backend%2C%20and%20how%20I%20would%20install%20it%20and%20build%20a%20first%20service.\",\"className\":\"group flex min-h-9 items-center gap-2.5 text-[14px] text-muted-foreground transition-[color] duration-150 ease-[ease] hover:text-foreground max-sm:min-h-11 focus-visible:rounded-xs focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-foreground\",\"target\":\"_blank\",\"rel\":\"noopener noreferrer\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"d\":\"M9.27 15.29l7.978-5.897c.391-.29.95-.177 1.137.272.98 2.369.542 5.215-1.41 7.169-1.951 1.954-4.667 2.382-7.149 1.406l-2.711 1.257c3.889 2.661 8.611 2.003 11.562-.953 2.341-2.344 3.066-5.539 2.388-8.42l.006.007c-.983-4.232.242-5.924 2.75-9.383.06-.082.12-.164.179-.248l-3.301 3.305v-.01L9.267 15.292M7.623 16.723c-2.792-2.67-2.31-6.801.071-9.184 1.761-1.763 4.647-2.483 7.166-1.425l2.705-1.25a7.808 7.808 0 00-1.829-1A8.975 8.975 0 005.984 5.83c-2.533 2.536-3.33 6.436-1.962 9.764 1.022 2.487-.653 4.246-2.34 6.022-.599.63-1.199 1.259-1.682 1.925l7.62-6.815\"}]}],[\"$\",\"span\",null,{\"children\":\"Grok\"}],[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right ml-auto size-3 opacity-0 group-hover:opacity-100\",\"aria-hidden\":\"true\"}]]}]}]\n"])</script><script>self.__next_f.push([1,"29:T639,"])</script><script>self.__next_f.push([1,"{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"ItemPage\",\"@id\":\"https://iii.dev/registry/workers/web#page\",\"url\":\"https://iii.dev/registry/workers/web\",\"name\":\"web · iii Registry\",\"isPartOf\":{\"@id\":\"https://iii.dev/registry#website\"},\"breadcrumb\":{\"@id\":\"https://iii.dev/registry/workers/web#breadcrumb\"},\"mainEntity\":{\"@id\":\"https://iii.dev/registry/workers/web#subject\"}},{\"@type\":\"SoftwareApplication\",\"@id\":\"https://iii.dev/registry/workers/web#subject\",\"name\":\"web\",\"description\":\"Outbound HTTP client on the iii bus (web::fetch).\",\"url\":\"https://iii.dev/registry/workers/web\",\"applicationCategory\":\"DeveloperApplication\",\"applicationSubCategory\":\"iii worker\",\"softwareVersion\":\"1.2.10\",\"operatingSystem\":\"macOS, Linux, Windows\",\"softwareRequirements\":\"iii engine\",\"keywords\":\"api, client, fetch, http, rest\",\"license\":\"Apache-2.0\",\"isAccessibleForFree\":true,\"offers\":{\"@type\":\"Offer\",\"price\":\"0\",\"priceCurrency\":\"USD\"},\"interactionStatistic\":{\"@type\":\"InteractionCounter\",\"interactionType\":\"https://schema.org/DownloadAction\",\"userInteractionCount\":625},\"author\":{\"@id\":\"https://iii.dev/#organization\"},\"subjectOf\":{\"@type\":\"SoftwareSourceCode\",\"codeRepository\":\"https://github.com/iii-hq/workers\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://iii.dev/registry/workers/web#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"iii Registry\",\"item\":\"https://iii.dev/registry\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Workers\",\"item\":\"https://iii.dev/registry/workers\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"web\",\"item\":\"https://iii.dev/registry/workers/web\"}]}]}"])</script><script>self.__next_f.push([1,"5:[\"$\",\"div\",null,{\"className\":\"page-transition\",\"children\":[[\"$\",\"script\",null,{\"type\":\"application/ld+json\",\"dangerouslySetInnerHTML\":{\"__html\":\"$29\"}}],[\"$\",\"header\",null,{\"className\":\"flex items-end justify-between flex-wrap gap-x-8 gap-y-5 px-[22px] pt-12 sm:px-9 sm:pt-16 pb-6 sm:pb-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"min-w-0\",\"children\":[[\"$\",\"div\",null,{\"className\":\"mb-3 font-mono text-[10px] leading-[normal] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":[\"$\",\"nav\",null,{\"aria-label\":\"Breadcrumb\",\"className\":\"flex items-center gap-x-1.5\",\"children\":[[\"$\",\"$L14\",null,{\"href\":\"/\",\"className\":\"transition-colors duration-150 hover:text-foreground\",\"children\":\"Registry\"}],[\"$\",\"span\",null,{\"aria-hidden\":true,\"children\":\"/\"}],[\"$\",\"$L14\",null,{\"href\":\"/workers\",\"className\":\"transition-colors duration-150 hover:text-foreground\",\"children\":\"Workers\"}]]}]}],[\"$\",\"div\",null,{\"className\":\"flex items-center flex-wrap gap-x-3 gap-y-2\",\"children\":[[\"$\",\"h1\",null,{\"className\":\"text-[32px] sm:text-[40px] font-[550] leading-[1.1] tracking-[-0.04em] text-foreground text-balance\",\"children\":\"web\"}],\"$undefined\",[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center gap-1.5 rounded-md bg-code px-2 font-mono text-[13px] tabular-nums text-muted-foreground\",\"children\":\"v1.2.10\"}]]}],[\"$\",\"p\",null,{\"className\":\"mt-4 max-w-[60ch] text-[15px] leading-[1.7] text-muted-foreground text-pretty\",\"children\":\"Outbound HTTP client on the iii bus (web::fetch).\"}]]}],null]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col gap-y-5 px-[22px] pb-10 sm:px-9 sm:pb-12\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex flex-wrap items-center gap-x-2.5 gap-y-2 text-[13px] text-muted-foreground\",\"children\":[[\"$\",\"span\",\"0\",{\"className\":\"contents\",\"children\":[null,[\"$\",\"span\",\"license\",{\"className\":\"inline-block first-letter:uppercase\",\"children\":[\"license: \",\"Apache-2.0\"]}]]}],[\"$\",\"span\",\"1\",{\"className\":\"contents\",\"children\":[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-[color-mix(in_srgb,var(--muted-foreground)_55%,transparent)] max-sm:hidden\",\"children\":\"·\"}],\"$L2a\"]}],\"$L2b\"]}],null,null,false,false]}],\"$L2c\"]}]\n"])</script><script>self.__next_f.push([1,"2d:I[21158,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"InstallPanel\"]\n2e:I[84938,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"PageTabs\"]\n2a:[\"$\",\"time\",\"published\",{\"dateTime\":\"2026-08-24T18:16:52.097Z\",\"title\":\"2026-08-24T18:16:52.097Z\",\"className\":\"tabular-nums\",\"children\":[\"Published \",\"1mo ago\"]}]\n"])</script><script>self.__next_f.push([1,"2b:[\"$\",\"span\",\"2\",{\"className\":\"contents\",\"children\":[[\"$\",\"span\",null,{\"aria-hidden\":true,\"className\":\"text-[color-mix(in_srgb,var(--muted-foreground)_55%,transparent)] max-sm:hidden\",\"children\":\"·\"}],[\"$\",\"span\",\"tags\",{\"className\":\"flex flex-wrap items-center gap-1.5\",\"children\":[[\"$\",\"$L14\",\"api\",{\"href\":\"/search?tag=api\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"api\"}]}],[\"$\",\"$L14\",\"client\",{\"href\":\"/search?tag=client\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"client\"}]}],[\"$\",\"$L14\",\"fetch\",{\"href\":\"/search?tag=fetch\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"fetch\"}]}],[\"$\",\"$L14\",\"http\",{\"href\":\"/search?tag=http\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"http\"}]}],[\"$\",\"$L14\",\"rest\",{\"href\":\"/search?tag=rest\",\"className\":\"rounded-md transition-opacity duration-150 hover:opacity-80 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-brand\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"rest\"}]}]]}]]}]\n"])</script><script>self.__next_f.push([1,"30:T4c4,M12 2.69922C6.762 2.69922 2.5 6.96122 2.5 12.1992C2.5 16.3252 5.24 20.0532 9.164 21.2662C9.324 21.3182 9.498 21.2822 9.627 21.1762C9.757 21.0702 9.825 20.9062 9.809 20.7392C9.669 19.3462 10.47 17.8702 10.812 17.5162C10.944 17.3812 10.988 17.1822 10.925 17.0042C10.862 16.8252 10.704 16.6962 10.516 16.6732C8.725 16.4452 7.067 15.8372 7.067 12.9472C7.063 12.2282 7.337 11.5412 7.836 11.0122C7.968 10.8732 8.009 10.6712 7.941 10.4922C7.75 9.98722 7.729 9.42222 7.877 8.90022C8.168 8.94822 8.731 9.11922 9.608 9.70522C9.728 9.78622 9.877 9.80722 10.015 9.77222C11.312 9.42422 12.682 9.42422 13.979 9.77222C14.116 9.80722 14.266 9.78622 14.386 9.70522C15.27 9.11422 15.835 8.94522 16.115 8.89622C16.264 9.42022 16.245 9.98622 16.054 10.4932C15.986 10.6732 16.027 10.8752 16.16 11.0132C16.654 11.5332 16.927 12.2172 16.927 12.9382C16.927 15.8772 15.273 16.4642 13.486 16.6612C13.296 16.6812 13.135 16.8092 13.071 16.9882C13.006 17.1682 13.049 17.3692 13.182 17.5062C13.512 17.8472 14.321 19.3622 14.185 20.7502C14.168 20.9172 14.236 21.0812 14.367 21.1862C14.457 21.2612 14.569 21.2992 14.682 21.2992C14.732 21.2992 14.783 21.2912 14.832 21.2752C18.82 20.0202 21.5 16.3732 21.5 12.1992C21.5 6.96122 17.238 2.69922 12 2.69922Z"])</script><script>self.__next_f.push([1,"2c:[\"$\",\"div\",null,{\"className\":\"px-[22px] pb-16 sm:px-9\",\"children\":[\"$\",\"div\",null,{\"className\":\"grid grid-cols-1 gap-x-12 gap-y-8 @4xl:grid-cols-[minmax(0,1fr)_360px] @4xl:grid-rows-[auto_1fr]\",\"children\":[[\"$\",\"section\",null,{\"aria-label\":\"Install\",\"className\":\"flex min-w-0 flex-col gap-y-3 @4xl:col-start-2 @4xl:row-start-1\",\"children\":[[\"$\",\"h2\",null,{\"className\":\"text-[15px] font-[550] tracking-[-0.01em] text-foreground\",\"children\":\"Install\"}],[\"$\",\"$L2d\",null,{\"command\":\"iii trigger compose::add worker=web@1.2.10\",\"html\":\"\u003cpre class=\\\"shiki shiki-themes min-light vesper\\\" style=\\\"--shiki-light:#24292eff;--shiki-dark:#FFF;--shiki-light-bg:#ffffff;--shiki-dark-bg:#101010\\\" tabindex=\\\"0\\\"\u003e\u003ccode\u003e\u003cspan class=\\\"line\\\"\u003e\u003cspan style=\\\"--shiki-light:#6F42C1;--shiki-dark:#FFC799\\\"\u003eiii\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e trigger\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e compose::add\u003c/span\u003e\u003cspan style=\\\"--shiki-light:#2B5581;--shiki-dark:#99FFE4\\\"\u003e worker=web@1.2.10\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\",\"workerName\":\"web\",\"version\":\"1.2.10\",\"kind\":\"worker\"}],[\"$\",\"p\",null,{\"className\":\"text-[13px] leading-[1.6] text-pretty text-muted-foreground\",\"children\":\"Run in your project with the iii engine running. Exact versions are immutable and digest-pinned.\"}]]}],[\"$\",\"div\",null,{\"className\":\"min-w-0 flex flex-col gap-y-8 @4xl:col-start-1 @4xl:row-span-2 @4xl:row-start-1\",\"children\":[[\"$\",\"$L2e\",null,{\"slug\":\"web\",\"activeTab\":\"skills\",\"version\":\"1.2.10\",\"basePath\":\"/workers\",\"tabs\":\"$undefined\"}],false,false,\"$L2f\",false,false,false,false]}],[\"$\",\"aside\",null,{\"className\":\"flex min-w-0 flex-col gap-y-6 @4xl:col-start-2 @4xl:row-start-2 @4xl:self-start\",\"children\":[[\"$\",\"dl\",null,{\"className\":\"grid grid-cols-2 gap-x-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Repository\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"a\",null,{\"href\":\"https://github.com/iii-hq/workers\",\"target\":\"_blank\",\"rel\":\"noreferrer\",\"className\":\"inline-flex max-w-full items-center gap-x-2 text-[14px] font-medium transition-colors duration-150 hover:text-brand\",\"children\":[[\"$\",\"svg\",null,{\"viewBox\":\"0 0 24 24\",\"fill\":\"currentColor\",\"aria-hidden\":true,\"focusable\":\"false\",\"className\":\"size-4 shrink-0\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$30\"}]}],\"$L31\",\"$L32\"]}]}]]}],\"$L33\",\"$L34\",\"$L35\",\"$L36\",\"$L37\",\"$L38\",\"$L39\",\"$L3a\",\"$L3b\",null,\"$L3c\",null,\"$L3d\"]}],null,\"$L3e\"]}]]}]}]\n"])</script><script>self.__next_f.push([1,"3f:I[56877,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"InstallsChart\"]\n40:I[33516,[\"/registry/_next/static/chunks/0ov4a9hzi1oek.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/02q_l477hmi84.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0xkym.2ps9qyc.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0tclp6.7qxzgs.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\",\"/registry/_next/static/chunks/0jm9zdrfsajnq.js?dpl=dpl_7ms9wUW4fXckQVSyXNpxPeemM6aC\"],\"Image\"]\n:HL[\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"image\"]\n31:[\"$\",\"span\",null,{\"className\":\"truncate\",\"children\":\"iii-hq/workers\"}]\n32:[\"$\",\"$L17\",null,{\"ref\":\"$undefined\",\"iconNode\":\"$19:props:children:1:props:children:0:props:children:props:children:2:props:iconNode\",\"className\":\"lucide-arrow-up-right size-3.5 shrink-0 text-muted-foreground\",\"aria-hidden\":true}]\n33:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Weekly installs\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-[550] tabular-nums text-[24px] tracking-[-0.03em]\",\"children\":\"1\"}],[\"$\",\"$L3f\",null,{\"series\":[0,0,0,0,0,0,1],\"width\":340,\"height\":52,\"className\":\"mt-3\"}]]}]]}]\n34:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Version\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":[\"v\",\"1.2.10\"]}]}]]}]\n35:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"License\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":\"Apache-2.0\"}]}]]}]\n36:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Total installs\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums\",\"children\":\"625\"}]}]]}]\n37:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Type\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":\"binary\"}]}]]}]\n38:[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Functions\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L14\",null,{\"href\":\"/workers/web?version=1.2.10\u0026tab=api\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"4\"}]}]]}],[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Triggers\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 t"])</script><script>self.__next_f.push([1,"ext-foreground\",\"children\":[\"$\",\"$L14\",null,{\"href\":\"/workers/web?version=1.2.10\u0026tab=api\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"0\"}]}]]}]]\n39:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Skills\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L14\",null,{\"href\":\"/workers/web?version=1.2.10\u0026tab=skills\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"1\"}]}]]}]\n3a:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Dependencies\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"$L14\",null,{\"href\":\"/workers/web?version=1.2.10\u0026tab=deps\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums transition-colors duration-150 hover:text-brand\",\"children\":\"1\"}]}]]}]\n3b:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Last publish\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"time\",null,{\"dateTime\":\"2026-08-24T18:16:52.097Z\",\"title\":\"2026-08-24T18:16:52.097Z\",\"className\":\"text-[16px] font-[550] leading-tight tracking-[-0.02em] tabular-nums block truncate\",\"children\":\"1mo ago\"}]}]]}]\n"])</script><script>self.__next_f.push([1,"3c:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Platforms\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"ul\",null,{\"aria-label\":\"Supported platforms\",\"className\":\"flex flex-wrap items-center gap-2 mt-1\",\"children\":[[\"$\",\"li\",\"apple\",{\"title\":\"macOS: arm64, x64\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L40\",null,{\"src\":\"/registry/icons/apple_dark.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":209,\"height\":256,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"macOS\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · x64\"}]]}],[\"$\",\"li\",\"linux\",{\"title\":\"Linux: arm64, armv7, x64\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L40\",null,{\"src\":\"/registry/icons/linux.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":256,\"height\":295,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Linux\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · armv7 · x64\"}]]}],[\"$\",\"li\",\"windows\",{\"title\":\"Windows: arm64, x64, x86\",\"className\":\"inline-flex items-center rounded-md border border-line bg-background font-mono text-muted-foreground h-8 gap-x-2 px-2.5 text-[13px]\",\"children\":[[\"$\",\"$L40\",null,{\"src\":\"/registry/icons/windows.svg\",\"alt\":\"\",\"aria-hidden\":true,\"width\":88,\"height\":88,\"className\":\"shrink-0 opacity-80 [filter:brightness(0)] dark:[filter:brightness(0)_invert(1)] h-3.5 w-auto\"}],[\"$\",\"span\",null,{\"className\":\"sr-only\",\"children\":[\"Windows\",\": \"]}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":\"arm64 · x64 · x86\"}]]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"41:T5da,"])</script><script>self.__next_f.push([1,"M15.5837 10.5577L11.5107 14.6327C11.3697 14.7737 11.1787 14.8527 10.9797 14.8527C10.7807 14.8527 10.5897 14.7737 10.4497 14.6327L8.47274 12.6527C8.18075 12.3587 8.18075 11.8837 8.47375 11.5907C8.76775 11.2987 9.24174 11.2997 9.53475 11.5917L10.9807 13.0407L14.5227 9.49667C14.8157 9.20367 15.2907 9.20367 15.5837 9.49667C15.8767 9.78967 15.8767 10.2647 15.5837 10.5577ZM20.7037 10.0857L20.0047 9.38667C19.6857 9.06667 19.5107 8.64067 19.5107 8.18967V7.18967C19.5107 5.70067 18.2987 4.48967 16.8107 4.48967H15.8087C15.3557 4.48967 14.9307 4.31467 14.6127 3.99667L13.9017 3.28667C12.8447 2.23867 11.1327 2.24367 10.0837 3.29767L9.38674 3.99667C9.06574 4.31567 8.64075 4.49067 8.18875 4.49067H7.18775C5.71675 4.49167 4.51675 5.67567 4.48975 7.14167C4.48874 7.15767 4.48775 7.17367 4.48775 7.19067V8.18767C4.48775 8.63967 4.31275 9.06467 3.99375 9.38367L3.28575 10.0927C3.28475 10.0957 3.28175 10.0967 3.27975 10.0987C2.23475 11.1567 2.24375 12.8687 3.29675 13.9117L3.99575 14.6127C4.31375 14.9317 4.48975 15.3557 4.48975 15.8077V16.8127C4.48975 18.3007 5.69975 19.5117 7.18775 19.5117H8.18675C8.63975 19.5127 9.06475 19.6877 9.38275 20.0047L10.0957 20.7157C10.6037 21.2207 11.2777 21.4987 11.9947 21.4987H12.0067C12.7277 21.4957 13.4037 21.2117 13.9097 20.7027L14.6107 20.0027C14.9257 19.6887 15.3617 19.5087 15.8067 19.5087H16.8127C18.2977 19.5087 19.5087 18.2997 19.5117 16.8127V15.8097C19.5117 15.3587 19.6867 14.9337 20.0037 14.6147L20.7147 13.9037C21.7647 12.8477 21.7587 11.1347 20.7037 10.0857Z"])</script><script>self.__next_f.push([1,"3d:[\"$\",\"div\",null,{\"className\":\"flex min-w-0 flex-col gap-y-1 border-t border-line py-3 col-span-2\",\"children\":[[\"$\",\"dt\",null,{\"className\":\"text-[13px] text-muted-foreground\",\"children\":\"Author\"}],[\"$\",\"dd\",null,{\"className\":\"min-w-0 text-foreground\",\"children\":[\"$\",\"span\",null,{\"className\":\"inline-flex min-w-0 items-center gap-x-2\",\"children\":[[\"$\",\"img\",null,{\"src\":\"https://iii.dev/docs/_mintlify/favicons/motiadev/AFkVbz_UcSL_5jsm/_generated/favicon/apple-touch-icon.png\",\"alt\":\"\",\"className\":\"size-5 shrink-0 rounded-full border border-line object-cover\"}],[\"$\",\"span\",null,{\"className\":\"truncate text-[13px] font-medium text-foreground\",\"children\":\"iii\"}],[\"$\",\"svg\",null,{\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 24 24\",\"width\":\"1em\",\"height\":\"1em\",\"fill\":\"currentColor\",\"focusable\":\"false\",\"aria-hidden\":\"$undefined\",\"className\":\"size-3.5 shrink-0 text-verified\",\"aria-label\":\"Verified author\",\"children\":[\"$\",\"path\",null,{\"fillRule\":\"evenodd\",\"clipRule\":\"evenodd\",\"d\":\"$41\"}]}]]}]}]]}]\n"])</script><script>self.__next_f.push([1,"3e:[\"$\",\"section\",null,{\"id\":\"$undefined\",\"className\":\"shrink-0 overflow-hidden rounded-xl border border-line bg-paper scroll-mt-20\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-h-11 items-center justify-between gap-x-3 border-b border-line px-4\",\"children\":[[\"$\",\"span\",null,{\"className\":\"font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":\"skills\"}],\"$undefined\"]}],[\"$\",\"div\",null,{\"className\":\"flex flex-col p-0 gap-y-0 max-h-[min(60dvh,28rem)] overflow-y-auto\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"section\",null,{\"aria-labelledby\":\"skills-tree-web\",\"children\":[[\"$\",\"div\",null,{\"id\":\"skills-tree-web\",\"className\":\"flex items-baseline justify-between px-4 pt-3 font-mono text-[10px] uppercase tracking-[0.08em] text-muted-foreground\",\"children\":[[\"$\",\"span\",null,{\"children\":\"files\"}],[\"$\",\"span\",null,{\"className\":\"tabular-nums\",\"children\":1}]]}],[\"$\",\"nav\",null,{\"aria-label\":\"skill files\",\"className\":\"px-2 py-2\",\"children\":[\"$\",\"ul\",null,{\"className\":\"flex flex-col gap-y-px\",\"children\":[[\"$\",\"li\",\"SKILL.md\",{\"style\":{\"paddingLeft\":0},\"children\":[\"$\",\"$L14\",null,{\"href\":\"/workers/web?tab=skills\u0026skill=SKILL.md\u0026version=1.2.10\",\"scroll\":false,\"aria-current\":\"page\",\"className\":\"block truncate rounded-md px-2 py-1 font-mono text-[12px] transition-colors duration-150 focus-visible:outline-2 focus-visible:outline-offset-0 focus-visible:outline-brand bg-code text-foreground\",\"children\":\"SKILL.md\"}]}]]}]}]]}],null]}]}]]}]\n"])</script><script>self.__next_f.push([1,"2f:[\"$\",\"section\",null,{\"children\":[[\"$\",\"h2\",null,{\"className\":\"sr-only\",\"children\":\"skill doc\"}],\"$L42\"]}]\n"])</script><script>self.__next_f.push([1,"43:T5453,"])</script><script>self.__next_f.push([1,"\u003cblockquote\u003e\n\u003cp\u003e\u003cstrong\u003eCallable id:\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003eweb::fetch\u003c/code\u003e — pass to \u003ccode class=\"readme-inline-code\"\u003eagent_trigger { function: \"web::fetch\" }\u003c/code\u003e (NOT the \u003ccode class=\"readme-inline-code\"\u003eiii://...\u003c/code\u003e skill path; that\u0026#39;s docs, not a function id). Use this \u003cstrong\u003einstead of\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003eshell::exec\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003ecurl\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ewget\u003c/code\u003e for any HTTP request: you get a parsed \u003ccode class=\"readme-inline-code\"\u003e{ ok, status, headers, body }\u003c/code\u003e envelope, enforced size/timeout caps, and server-side SSRF protection a shell \u003ccode class=\"readme-inline-code\"\u003ecurl\u003c/code\u003e doesn\u0026#39;t have.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003ch1 id=\"decide-fast\" class=\"scroll-mt-20\"\u003eDecide fast\u003c/h1\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eYou want to…\u003c/th\u003e\n\u003cth\u003eCall\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eRead a web page\u003c/strong\u003e (docs, articles)\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"https://…\", \"format\": \"markdown\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eGET a page/API\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"https://…\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eParse a JSON API response\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"https://…\", \"response_format\": \"json\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ePOST/PUT JSON\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"…\", \"method\": \"post\", \"json\": { … } }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eSend a raw body / form\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"…\", \"method\": \"post\", \"body\": \"…\", \"headers\": { \"content-type\": \"…\" } }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eDownload binary\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ \"url\": \"…\", \"response_format\": \"base64\" }\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eRun a shell \u003ccode class=\"readme-inline-code\"\u003ecurl\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e❌ stop — use \u003ccode class=\"readme-inline-code\"\u003eweb::fetch\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch1 id=\"minimal-call\" class=\"scroll-mt-20\"\u003eMinimal call\u003c/h1\u003e\n\u003cpre\u003e\u003ccode\u003e// agent_trigger { function: \u0026quot;web::fetch\u0026quot;, payload: { \u0026quot;url\u0026quot;: \u0026quot;https://api.github.com/zen\u0026quot; } }\n// → { \u0026quot;ok\u0026quot;: true, \u0026quot;status\u0026quot;: 200, \u0026quot;body\u0026quot;: \u0026quot;Design for failure.\u0026quot;, ... }\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eThat\u0026#39;s the whole T0 path: a URL is the only required field. Everything else has a default.\u003c/p\u003e\n\u003ch1 id=\"read-the-result-correctly-the-1-trap\" class=\"scroll-mt-20\"\u003eRead the result correctly (the #1 trap)\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eok\u003c/code\u003e tells you if the request COMPLETED, not whether the server was happy.\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eA 404 or 500 is a \u003cstrong\u003esuccessful fetch\u003c/strong\u003e → \u003ccode class=\"readme-inline-code\"\u003eok: true\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003estatus: 404\u003c/code\u003e. Branch on \u003ccode class=\"readme-inline-code\"\u003estatus\u003c/code\u003e for HTTP outcomes.\u003c/li\u003e\n\u003cli\u003e\u003ccode class=\"readme-inline-code\"\u003eok: false\u003c/code\u003e means the request never produced a response (bad URL, blocked host, timeout, transport failure). Branch on \u003ccode class=\"readme-inline-code\"\u003eerror\u003c/code\u003e for those.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre\u003e\u003ccode\u003eif (!r.ok) → fetch failed; look at r.error (see table below)\nelse if (r.status\u0026gt;=400) → server returned an HTTP error; look at r.status / r.body\nelse → success; use r.body or r.json\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eDo \u003cstrong\u003enot\u003c/strong\u003e treat \u003ccode class=\"readme-inline-code\"\u003eok: true\u003c/code\u003e as \u0026quot;2xx\u0026quot;. Always check \u003ccode class=\"readme-inline-code\"\u003estatus\u003c/code\u003e too.\u003c/p\u003e\n\u003cp\u003eOne exception: in page-reading mode (\u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e set), an \u003ccode class=\"readme-inline-code\"\u003eimage/*\u003c/code\u003e response returns the image itself plus a one-line text summary instead of this envelope — there is no top-level \u003ccode class=\"readme-inline-code\"\u003eok\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003estatus\u003c/code\u003e to branch on (see \u0026quot;Images in page-reading mode\u0026quot; below).\u003c/p\u003e\n\u003ch1 id=\"request-fields\" class=\"scroll-mt-20\"\u003eRequest fields\u003c/h1\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c/th\u003e\n\u003cth\u003eDefault\u003c/th\u003e\n\u003cth\u003eNotes\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eurl\u003c/code\u003e \u003cem\u003e(required)\u003c/em\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eabsolute \u003ccode class=\"readme-inline-code\"\u003ehttp(s)://\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003emethod\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eGET\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ecase-insensitive (\u003ccode class=\"readme-inline-code\"\u003e\"post\"\u003c/code\u003e works); GET HEAD POST PUT PATCH DELETE OPTIONS\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eheaders\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{}\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eobject; keys as you write them\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003estructured payload; auto-stringified + sets \u003ccode class=\"readme-inline-code\"\u003econtent-type: application/json\u003c/code\u003e. \u003cstrong\u003eWins over \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e.\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003eraw string body; use for non-JSON. Ignored on GET/HEAD.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eresponse_format\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\"text\"\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e\"text\"\u003c/code\u003e | \u003ccode class=\"readme-inline-code\"\u003e\"base64\"\u003c/code\u003e (binary) | \u003ccode class=\"readme-inline-code\"\u003e\"json\"\u003c/code\u003e (also parses into \u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e—\u003c/td\u003e\n\u003ctd\u003epage-reading mode: \u003ccode class=\"readme-inline-code\"\u003e\"markdown\"\u003c/code\u003e (HTML→Markdown) | \u003ccode class=\"readme-inline-code\"\u003e\"text\"\u003c/code\u003e (HTML→plain text) | \u003ccode class=\"readme-inline-code\"\u003e\"html\"\u003c/code\u003e (raw). Sends a browser UA + matching \u003ccode class=\"readme-inline-code\"\u003eAccept\u003c/code\u003e; retries once with the honest UA on a Cloudflare challenge; images come back viewable. Forces text transport (\u003ccode class=\"readme-inline-code\"\u003eresponse_format\u003c/code\u003e ignored).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etimeout_ms\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e30000\u003c/td\u003e\n\u003ctd\u003eclamped DOWN to the worker ceiling (120000 by default); can\u0026#39;t raise past it\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e5 MiB (256 KiB in \u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e mode)\u003c/td\u003e\n\u003ctd\u003eraw fetches default to the 5 MiB ceiling; page-reading mode (\u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e set) uses a context-safe 256 KiB. Pass an explicit value to override (up to the 5 MiB ceiling). Over-cap body is truncated, not errored\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003efollow_redirects\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etrue\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eeach hop re-checked against the SSRF blocklist\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003ch1 id=\"content-pipeline\" class=\"scroll-mt-20\"\u003eContent pipeline\u003c/h1\u003e\n\u003cp\u003eFour request controls for page-reading mode (\u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e set):\u003c/p\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eField\u003c/th\u003e\n\u003cth\u003eEffect\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003econtent_filter\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003e{ type: \"pruning\"|\"bm25\", query?, threshold?, threshold_type?, min_word_threshold? }\u003c/code\u003e — filters \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e to signal content. Pruning default threshold 0.48; BM25 default 1.0. \u003ccode class=\"readme-inline-code\"\u003equery\u003c/code\u003e falls back to page \u003ccode class=\"readme-inline-code\"\u003e\u003ctitle\u003e\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003e\u003cmeta description\u003e\u003c/code\u003e if omitted.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etarget_elements\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eRestrict body to matching regions. Selector subset: tag, \u003ccode class=\"readme-inline-code\"\u003e.class\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e#id\u003c/code\u003e — other forms are silently ignored.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eexcluded_tags\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDrop matching elements before rendering (e.g. \u003ccode class=\"readme-inline-code\"\u003e[\"nav\", \"footer\"]\u003c/code\u003e).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003einclude_links\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etrue\u003c/code\u003e → adds \u003ccode class=\"readme-inline-code\"\u003elinks: { internal, external }\u003c/code\u003e arrays (absolute URLs, classified by host).\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003einclude_media\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etrue\u003c/code\u003e → adds \u003ccode class=\"readme-inline-code\"\u003emedia: { images, videos, audios }\u003c/code\u003e arrays (absolute URLs).\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eWhen \u003ccode class=\"readme-inline-code\"\u003econtent_filter\u003c/code\u003e is set, \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e \u003cstrong\u003eis\u003c/strong\u003e the filtered output — no separate field. Feed it straight to a model.\u003c/p\u003e\n\u003ch1 id=\"response\" class=\"scroll-mt-20\"\u003eResponse\u003c/h1\u003e\n\u003cp\u003e\u003cstrong\u003eSuccess\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003eok: true\u003c/code\u003e) — returned for \u003cem\u003eany\u003c/em\u003e completed response, 2xx through 5xx:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{\n \u0026quot;ok\u0026quot;: true,\n \u0026quot;status\u0026quot;: 200,\n \u0026quot;status_text\u0026quot;: \u0026quot;OK\u0026quot;,\n \u0026quot;headers\u0026quot;: { \u0026quot;content-type\u0026quot;: \u0026quot;application/json\u0026quot;, ... }, // keys LOWER-CASED; set-cookie joined with \u0026quot;, \u0026quot;\n \u0026quot;body\u0026quot;: \u0026quot;\u0026lt;utf8 text | base64 when response_format=base64\u0026gt;\u0026quot;,\n \u0026quot;json\u0026quot;: { ... }, // only when response_format=\u0026quot;json\u0026quot; AND parse succeeded AND not truncated\n \u0026quot;parse_error\u0026quot;: \u0026quot;…\u0026quot;, // only when response_format=\u0026quot;json\u0026quot; AND JSON.parse failed (body still set)\n \u0026quot;response_format\u0026quot;: \u0026quot;json\u0026quot;,\n \u0026quot;bytes_truncated\u0026quot;: false, // true when body hit max_bytes (NOT an error)\n \u0026quot;redirect_chain\u0026quot;: [\u0026quot;https://…/a\u0026quot;], // omitted when no redirects\n \u0026quot;content_type\u0026quot;: \u0026quot;text/html\u0026quot;, // only in page-reading mode (format set)\n \u0026quot;transformed\u0026quot;: \u0026quot;markdown\u0026quot; // only when an HTML transform actually ran\n}\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cstrong\u003eFailure\u003c/strong\u003e (\u003ccode class=\"readme-inline-code\"\u003eok: false\u003c/code\u003e) — the fetch never produced a response:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e{ \u0026quot;ok\u0026quot;: false, \u0026quot;error\u0026quot;: \u0026quot;blocked_host\u0026quot;, \u0026quot;message\u0026quot;: \u0026quot;…\u0026quot; } // no status field\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"error-cause-fix\" class=\"scroll-mt-20\"\u003eerror → cause → fix\u003c/h2\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003ccode class=\"readme-inline-code\"\u003eerror\u003c/code\u003e\u003c/th\u003e\n\u003cth\u003eCause\u003c/th\u003e\n\u003cth\u003eFix\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003einvalid_payload\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003ePayload failed schema (bad \u003ccode class=\"readme-inline-code\"\u003emethod\u003c/code\u003e, wrong types). \u003ccode class=\"readme-inline-code\"\u003emessage\u003c/code\u003e lists the bad fields.\u003c/td\u003e\n\u003ctd\u003eCorrect the named fields.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003einvalid_url\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eurl\u003c/code\u003e isn\u0026#39;t a parseable absolute \u003ccode class=\"readme-inline-code\"\u003ehttp(s)://\u003c/code\u003e URL.\u003c/td\u003e\n\u003ctd\u003ePass a full absolute URL incl. scheme.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003eblocked_host\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eTarget resolves to a private / link-local / cloud-metadata IP (SSRF guard).\u003c/td\u003e\n\u003ctd\u003eDon\u0026#39;t target internal/metadata hosts. For loopback in dev, the operator sets \u003ccode class=\"readme-inline-code\"\u003eweb.allow_loopback\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etimeout\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eSlower than \u003ccode class=\"readme-inline-code\"\u003etimeout_ms\u003c/code\u003e (30 s default; 120 s ceiling).\u003c/td\u003e\n\u003ctd\u003eRaise \u003ccode class=\"readme-inline-code\"\u003etimeout_ms\u003c/code\u003e (up to ceiling) or shrink work via \u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etoo_many_redirects\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMore than \u003ccode class=\"readme-inline-code\"\u003emax_redirects\u003c/code\u003e (5) hops.\u003c/td\u003e\n\u003ctd\u003eUse the final URL directly, or set \u003ccode class=\"readme-inline-code\"\u003efollow_redirects: false\u003c/code\u003e and read the \u003ccode class=\"readme-inline-code\"\u003elocation\u003c/code\u003e header.\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003ccode class=\"readme-inline-code\"\u003etransport_error\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConnection refused/reset, TLS failure, DNS failure, or a redirect \u003ccode class=\"readme-inline-code\"\u003eLocation\u003c/code\u003e that won\u0026#39;t parse.\u003c/td\u003e\n\u003ctd\u003eCheck host/port/cert; retry if transient.\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\n\u003cp\u003eThere is \u003cstrong\u003eno \u003ccode class=\"readme-inline-code\"\u003etoo_large\u003c/code\u003e error\u003c/strong\u003e — oversize responses come back \u003ccode class=\"readme-inline-code\"\u003eok: true\u003c/code\u003e with \u003ccode class=\"readme-inline-code\"\u003ebytes_truncated: true\u003c/code\u003e. Branch on the flag, not on an error.\u003c/p\u003e\n\u003ch1 id=\"page-reading-vs-api-fetch\" class=\"scroll-mt-20\"\u003ePage reading vs API fetch\u003c/h1\u003e\n\u003cp\u003eTwo orthogonal knobs — pick ONE:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eresponse_format\u003c/code\u003e\u003c/strong\u003e = transport encoding for APIs/binaries (\u003ccode class=\"readme-inline-code\"\u003etext\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ebase64\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e). The body is returned untouched.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e\u003c/strong\u003e = page-reading mode (\u003ccode class=\"readme-inline-code\"\u003emarkdown\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003etext\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ehtml\u003c/code\u003e). The request goes out with a browser User-Agent + format-matched \u003ccode class=\"readme-inline-code\"\u003eAccept\u003c/code\u003e header, and \u003ccode class=\"readme-inline-code\"\u003etext/html\u003c/code\u003e responses are transformed (\u003ccode class=\"readme-inline-code\"\u003emarkdown\u003c/code\u003e is the right default for reading pages — far fewer tokens than raw HTML). Non-HTML bodies pass through unchanged. If Cloudflare answers \u003ccode class=\"readme-inline-code\"\u003e403\u003c/code\u003e with a challenge, the worker retries once with its honest UA (beats the UA-fingerprint rule only, not full JS challenges). For large pages, lower \u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e — conversion runs on the capped body.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eDon\u0026#39;t combine them: when \u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e is set, \u003ccode class=\"readme-inline-code\"\u003eresponse_format\u003c/code\u003e is ignored (treated as \u003ccode class=\"readme-inline-code\"\u003e\"text\"\u003c/code\u003e).\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eImages in page-reading mode:\u003c/strong\u003e a viewable \u003ccode class=\"readme-inline-code\"\u003eimage/*\u003c/code\u003e response returns the actual image (plus a one-line text summary like \u003ccode class=\"readme-inline-code\"\u003eImage fetched (image/png, 8123 bytes)\u003c/code\u003e) instead of the JSON envelope — providers that support tool-result images (Anthropic) show it to the model; others see the text line. \u0026quot;Viewable\u0026quot; means jpeg/png/gif/webp, 2xx status, complete (not truncated), and non-empty — anything else (svg, error pages served as images, truncated bytes) comes back as the normal envelope with \u003ccode class=\"readme-inline-code\"\u003eresponse_format: \"base64\"\u003c/code\u003e so a hostile image can\u0026#39;t fail the provider request. Without \u003ccode class=\"readme-inline-code\"\u003eformat\u003c/code\u003e, use \u003ccode class=\"readme-inline-code\"\u003eresponse_format: \"base64\"\u003c/code\u003e as before.\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eTransform bounds:\u003c/strong\u003e the HTML→markdown/text conversion runs only on bodies ≤ \u003ccode class=\"readme-inline-code\"\u003eweb.max_transform_bytes\u003c/code\u003e (1 MiB default) — larger pages come back raw with \u003ccode class=\"readme-inline-code\"\u003etransformed\u003c/code\u003e unset (lower \u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e to read huge pages). If the body was truncated at \u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e, the transformed text ends with a visible \u003ccode class=\"readme-inline-code\"\u003e[Content truncated at max_bytes — …]\u003c/code\u003e line.\u003c/p\u003e\n\u003ch1 id=\"rules-that-save-a-turn\" class=\"scroll-mt-20\"\u003eRules that save a turn\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e vs \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e: set exactly one.\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e wins if both are present and forces \u003ccode class=\"readme-inline-code\"\u003econtent-type: application/json\u003c/code\u003e. Use \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e + your own \u003ccode class=\"readme-inline-code\"\u003econtent-type\u003c/code\u003e for form/text/XML.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eGET/HEAD ignore the body.\u003c/strong\u003e Putting \u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e on a GET sends nothing — switch \u003ccode class=\"readme-inline-code\"\u003emethod\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003eresponse_format: \"json\"\u003c/code\u003e can succeed with \u003ccode class=\"readme-inline-code\"\u003eparse_error\u003c/code\u003e.\u003c/strong\u003e Non-JSON (or truncated) bodies return \u003ccode class=\"readme-inline-code\"\u003eok: true\u003c/code\u003e, no \u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003eparse_error\u003c/code\u003e set; the raw text is still in \u003ccode class=\"readme-inline-code\"\u003ebody\u003c/code\u003e. Check for \u003ccode class=\"readme-inline-code\"\u003ejson\u003c/code\u003e before reading it.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eCaps only go down.\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003etimeout_ms\u003c/code\u003e/\u003ccode class=\"readme-inline-code\"\u003emax_bytes\u003c/code\u003e above the worker ceiling are clamped; you can\u0026#39;t request more than the operator allows.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eResponse header keys are lower-cased.\u003c/strong\u003e Index \u003ccode class=\"readme-inline-code\"\u003eheaders[\"content-type\"]\u003c/code\u003e, never \u003ccode class=\"readme-inline-code\"\u003e\"Content-Type\"\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eAuth headers don\u0026#39;t survive a cross-origin redirect\u003c/strong\u003e (see below) — for an authed endpoint, hit the final URL directly.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"ssrf-guard-server-side-not-optional\" class=\"scroll-mt-20\"\u003eSSRF guard (server-side, not optional)\u003c/h1\u003e\n\u003cp\u003eDNS is resolved \u003cstrong\u003eonce\u003c/strong\u003e, every resolved address is checked, then the request is dialed at the \u003cstrong\u003evalidated IP\u003c/strong\u003e (pinned \u003ccode class=\"readme-inline-code\"\u003elookup\u003c/code\u003e + TLS \u003ccode class=\"readme-inline-code\"\u003eservername\u003c/code\u003e) — so the IP that passed the check is the IP connected to (no DNS-rebind window).\u003c/p\u003e\n\u003cp\u003eBlocked \u003cstrong\u003eunconditionally\u003c/strong\u003e → \u003ccode class=\"readme-inline-code\"\u003eerror: \"blocked_host\"\u003c/code\u003e:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003ePrivate RFC1918 (\u003ccode class=\"readme-inline-code\"\u003e10/8\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e172.16/12\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e192.168/16\u003c/code\u003e)\u003c/li\u003e\n\u003cli\u003eLink-local incl. \u003cstrong\u003ecloud metadata\u003c/strong\u003e \u003ccode class=\"readme-inline-code\"\u003e169.254.169.254\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eIPv6 ULA (\u003ccode class=\"readme-inline-code\"\u003efc00::/7\u003c/code\u003e), link-local (\u003ccode class=\"readme-inline-code\"\u003efe80::/10\u003c/code\u003e), multicast\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode class=\"readme-inline-code\"\u003e::ffff:\u003c/code\u003e-mapped IPv4\u003c/strong\u003e in both dotted (\u003ccode class=\"readme-inline-code\"\u003e::ffff:169.254.169.254\u003c/code\u003e) and hex (\u003ccode class=\"readme-inline-code\"\u003e::ffff:a9fe:a9fe\u003c/code\u003e) forms\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eLoopback (\u003ccode class=\"readme-inline-code\"\u003e127.0.0.0/8\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003e::1\u003c/code\u003e, \u003ccode class=\"readme-inline-code\"\u003elocalhost\u003c/code\u003e) is \u003cstrong\u003eallowed by default\u003c/strong\u003e (dev convenience); operators flip \u003ccode class=\"readme-inline-code\"\u003eweb.allow_loopback: false\u003c/code\u003e for prod, after which loopback returns \u003ccode class=\"readme-inline-code\"\u003eblocked_host\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eOn each 3xx the \u003ccode class=\"readme-inline-code\"\u003eLocation\u003c/code\u003e is re-resolved and \u003cstrong\u003ere-validated\u003c/strong\u003e before following, and \u003ccode class=\"readme-inline-code\"\u003eAuthorization\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eCookie\u003c/code\u003e / \u003ccode class=\"readme-inline-code\"\u003eProxy-Authorization\u003c/code\u003e are \u003cstrong\u003estripped\u003c/strong\u003e when the redirect changes host or downgrades \u003ccode class=\"readme-inline-code\"\u003ehttps → http\u003c/code\u003e.\u003c/p\u003e\n\u003ch1 id=\"examples\" class=\"scroll-mt-20\"\u003eExamples\u003c/h1\u003e\n\u003cpre\u003e\u003ccode\u003e// Read a documentation page as Markdown\n{ \u0026quot;url\u0026quot;: \u0026quot;https://docs.example.com/guide\u0026quot;, \u0026quot;format\u0026quot;: \u0026quot;markdown\u0026quot; }\n// → { ok:true, status:200, body:\u0026quot;# Guide\\n\\n…\u0026quot;, transformed:\u0026quot;markdown\u0026quot;, content_type:\u0026quot;text/html\u0026quot; }\n\n// Parse a JSON API\n{ \u0026quot;url\u0026quot;: \u0026quot;https://api.example.com/status\u0026quot;, \u0026quot;response_format\u0026quot;: \u0026quot;json\u0026quot; }\n// → { ok:true, status:200, json:{ healthy:true } }\n\n// POST JSON (content-type set for you)\n{ \u0026quot;url\u0026quot;: \u0026quot;https://api.example.com/things\u0026quot;, \u0026quot;method\u0026quot;: \u0026quot;post\u0026quot;,\n \u0026quot;json\u0026quot;: { \u0026quot;name\u0026quot;: \u0026quot;x\u0026quot; }, \u0026quot;response_format\u0026quot;: \u0026quot;json\u0026quot; }\n\n// Authenticated GET (auth stays only because there's no cross-host redirect)\n{ \u0026quot;url\u0026quot;: \u0026quot;https://api.example.com/me\u0026quot;,\n \u0026quot;headers\u0026quot;: { \u0026quot;authorization\u0026quot;: \u0026quot;Bearer TOKEN\u0026quot; }, \u0026quot;response_format\u0026quot;: \u0026quot;json\u0026quot; }\n\n// Bounded download of a maybe-large file\n{ \u0026quot;url\u0026quot;: \u0026quot;https://example.com/big.log\u0026quot;, \u0026quot;max_bytes\u0026quot;: 65536 }\n// → { ok:true, body:\u0026quot;\u0026lt;first 64 KiB\u0026gt;\u0026quot;, bytes_truncated:true }\u003c/code\u003e\u003c/pre\u003e\u003ch1 id=\"authoritative-schema\" class=\"scroll-mt-20\"\u003eAuthoritative schema\u003c/h1\u003e\n\u003cp\u003eThis page covers behavior the schema can\u0026#39;t. For exact field types, call\n\u003ccode class=\"readme-inline-code\"\u003eengine::functions::info { function_id: \"web::fetch\" }\u003c/code\u003e — the live schema wins if it ever disagrees with this page.\u003c/p\u003e\n\u003ch1 id=\"related\" class=\"scroll-mt-20\"\u003eRelated\u003c/h1\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"iii://shell\"\u003e\u003ccode class=\"readme-inline-code\"\u003eshell/index\u003c/code\u003e\u003c/a\u003e — local filesystem + process ops; \u003ccode class=\"readme-inline-code\"\u003eweb::fetch\u003c/code\u003e is the network counterpart (use it, not \u003ccode class=\"readme-inline-code\"\u003eshell::exec curl\u003c/code\u003e).\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"iii://sandbox\"\u003e\u003ccode class=\"readme-inline-code\"\u003esandbox/index\u003c/code\u003e\u003c/a\u003e — code \u003cem\u003einside\u003c/em\u003e a sandbox reaches the host engine via the boot-time \u003ccode class=\"readme-inline-code\"\u003eIII_ENGINE_URL\u003c/code\u003e rewrite, not \u003ccode class=\"readme-inline-code\"\u003eweb::fetch\u003c/code\u003e.\u003c/li\u003e\n\u003c/ul\u003e\n"])</script><script>self.__next_f.push([1,"42:[\"$\",\"div\",null,{\"className\":\"overflow-hidden rounded-xl border border-line bg-background\",\"children\":[[\"$\",\"div\",null,{\"className\":\"bg-panel flex flex-col gap-y-1 border-b border-line px-5 py-3.5 sm:px-6\",\"children\":[[\"$\",\"div\",null,{\"className\":\"flex min-w-0 items-center gap-x-2.5\",\"children\":[[\"$\",\"h3\",null,{\"className\":\"min-w-0 truncate text-[15px] font-[550] leading-[1.4] tracking-[-0.02em] text-foreground\",\"children\":\"web\"}],[\"$\",\"span\",null,{\"className\":\"inline-flex h-6 items-center rounded-md bg-[color-mix(in_srgb,var(--foreground)_6%,transparent)] px-2 font-mono text-[13px] lowercase text-muted-foreground\",\"children\":\"index\"}],null]}],[\"$\",\"div\",null,{\"className\":\"truncate font-mono text-[13px] text-muted-foreground\",\"children\":\"SKILL.md\"}]]}],[\"$\",\"div\",null,{\"className\":\"readme-prose px-5 py-6 sm:px-8 sm:py-7\",\"dangerouslySetInnerHTML\":{\"__html\":\"$43\"}}]]}]\n"])</script></body></html>