Agent Ready HTML

The Plain Fetch viewer

In short

The viewer requests a URL the way a plain-fetch agent does: no JavaScript, one request for HTML, one for markdown, one for llms.txt and one for a path that should not exist. It shows the initial HTML on the left, the readable text on the right, and seven flags underneath.

Pre-loaded with www.wikipedia.org, read 4 November 2026. Type any public URL to run your own.

GET https://bun.sh/ answered 200 with text/html, 257 KB, read 8 November 2026, 14:04 UTC.

Permalink: /viewer/?url=https://bun.sh/

The page answers a plain fetch: 4 of 6 checks found.

Initial HTML what a plain fetch receives

<!DOCTYPE html>
<html lang="en">
<head>
<meta charSet="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Bun — A fast all-in-one JavaScript runtime
</title>
<meta name="description" content="Bundle, install, and run JavaScript &amp; TypeScript — all in Bun. Bun is a fast JavaScript runtime &amp; toolkit with a bundler, test runner, and npm-compatible package manager built in." data-head=""/>
[... 22 more head elements folded ...]
<link rel="canonical" href="https://bun.com/" data-head=""/>
<link rel="alternate" type="application/rss+xml" title="Bun Blog" href="/rss.xml"/>
[... 8 more head elements folded ...]
</head>
<body>
<div id="__bun">
<div class="flex min-h-screen flex-col"><a href="#main" class="skip-link">Skip to content</a><a class="group/banner relative z-40 block bg-fg text-canvas transition-colors hover:bg-fg/90 dark:border-b dark:border-line dark:bg-black dark:text-fg dark:hover:bg-[rgb(18_18_20)]" href="/blog/bun-joins-anthropic" data-link="" data-prefetch="true">
<div class="mx-auto w-full max-w-container px-gutter flex min-h-[38px] items-center justify-center gap-2 py-2 text-center text-[13.5px] font-medium">Bun has joined Anthropic — and Anthropic is betting on Bun<span aria-hidden="true" class="transition-transform duration-200 group-hover/banner:translate-x-0.5">→</span>
</div></a>
<header class="site-header sticky top-0 z-40 w-full">
<div class="mx-auto w-full max-w-container px-gutter flex h-header items-center gap-6"><a aria-label="Bun — home" class="group/logo flex shrink-0 items-center gap-2.5" href="/" data-link="" data-prefetch="true"><img src="/logo.svg" alt="" width="40" height="35" class="h-[34px] w-auto transition-transform duration-300 ease-out group-hover/logo:-rotate-[10deg] group-active/logo:translate-y-px"/>
<svg viewBox="20 18 262 82" fill="currentColor" aria-hidden="true" class="h-[19px] w-auto text-fg">[... 1,279 characters folded ...]
</svg></a>
<nav aria-label="Primary" class="ml-2 hidden shrink-0 items-center gap-0.5 md:flex"><a class="nav-link rounded-full px-3 py-1.5 text-[14.5px] font-medium text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="/docs" data-link="" data-prefetch="true">Docs</a><a class="nav-link rounded-full px-3 py-1.5 text-[14.5px] font-medium text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="/guides" data-link="" data-prefetch="true">Guides</a><a class="nav-link rounded-full px-3 py-1.5 text-[14.5px] font-medium text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="/reference" data-link="" data-prefetch="true">Reference</a><a class="nav-link rounded-full px-3 py-1.5 text-[14.5px] font-medium text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="/blog" data-link="" data-prefetch="true">Blog</a>
</nav>
<div class="flex min-w-0 flex-1 items-center justify-end md:justify-start md:pl-2"><button type="button" class="group hidden h-9 w-full min-w-0 max-w-[26rem] items-center gap-2.5 border border-line bg-canvas px-3 text-left text-[13.5px] text-fg-faint hover:border-rule md:flex" aria-label="Search">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-4 w-4"><path d="M7 3h6l4 4v6l-4 4H7l-4-4V7z"></path><path d="M15.5 15.5L21 21"></path>
</svg><span class="flex-1 truncate">Search docs, APIs, guides…</span><kbd aria-label="Slash" class="readout inline-flex h-[18px] min-w-[18px] items-center justify-center gap-[3px] border border-line px-1 text-[10.5px] leading-none text-fg-faint"><span>/</span></kbd></button><button type="button" aria-label="Search" class="inline-flex h-10 w-10 items-center justify-center border border-rule text-fg md:hidden">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]"><path d="M7 3h6l4 4v6l-4 4H7l-4-4V7z"></path><path d="M15.5 15.5L21 21"></path>
</svg></button>
</div>
<div class="hidden shrink-0 items-center gap-1 md:flex"><a aria-label="GitHub" class="inline-flex h-9 w-9 items-center justify-center rounded-full text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="https://github.com/oven-sh/bun" data-link="" data-prefetch="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]">[... 354 characters folded ...]
</svg></a><a aria-label="Discord" class="inline-flex h-9 w-9 items-center justify-center rounded-full text-fg-muted transition-colors hover:bg-subtle hover:text-fg" href="/discord" data-link="" data-prefetch="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]">[... 331 characters folded ...]
</svg></a><a class="group/btn cut relative inline-flex select-none items-center justify-center gap-2.5 whitespace-nowrap font-semibold [font-stretch:100%] tracking-[-0.005em] transition-none active:translate-y-px h-9 px-3.5 text-[ [... 123 characters folded ...]>Install</a>
</div>
<div class="flex items-center gap-2 md:hidden"><button type="button" aria-label="Open menu" aria-expanded="false" aria-controls="mobile-menu" data-slider-open="mobile-menu" class="inline-flex h-10 w-10 items-center justify-center border border-rule text-fg">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5"><path d="M4 6h16"></path><path d="M4 12h16"></path><path d="M4 18h16"></path>
</svg></button>
</div>
</div>
</header>
<div id="mobile-menu" data-slider="mobile-menu" class="slider-menu fixed inset-0 z-50 flex flex-col bg-canvas md:hidden" aria-hidden="true" inert="">
<div class="flex h-header items-center justify-between px-gutter"><a aria-label="Bun — home" class="group/logo flex shrink-0 items-center gap-2.5" href="/" data-link="" data-prefetch="true"><img src="/logo.svg" alt="" width="40" height="35" class="h-[34px] w-auto transition-transform duration-300 ease-out group-hover/logo:-rotate-[10deg] group-active/logo:translate-y-px"/>
<svg viewBox="20 18 262 82" fill="currentColor" aria-hidden="true" class="h-[19px] w-auto text-fg">[... 1,279 characters folded ...]
</svg></a><button type="button" aria-label="Close menu" class="inline-flex h-10 w-10 items-center justify-center border border-rule text-fg">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5"><path d="M6 6l12 12"></path><path d="M18 6L6 18"></path>
</svg></button>
</div>
<nav class="flex flex-1 flex-col gap-1 overflow-y-auto px-gutter pb-10 pt-4" aria-label="Mobile"><a aria-current="page" class="display flex items-center justify-between border-b border-line py-4 text-[1.75rem] font-semibold text-fg aria-[current=page]:text-accent-strong" style="transition-delay:0ms" href="/" data-link="" data-prefetch="true">Home
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5 -rotate-0 text-fg-faint"><path d="M6 18L17 7"></path><path d="M9 6h9v9"></path>
</svg></a><a class="display flex items-center justify-between border-b border-line py-4 text-[1.75rem] font-semibold text-fg aria-[current=page]:text-accent-strong" style="transition-delay:30ms" href="/docs" data-link="" data-prefetch="true">Docs
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5 -rotate-0 text-fg-faint"><path d="M6 18L17 7"></path><path d="M9 6h9v9"></path>
</svg></a><a class="display flex items-center justify-between border-b border-line py-4 text-[1.75rem] font-semibold text-fg aria-[current=page]:text-accent-strong" style="transition-delay:60ms" href="/guides" data-link="" data-prefetch="true">Guides
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5 -rotate-0 text-fg-faint"><path d="M6 18L17 7"></path><path d="M9 6h9v9"></path>
</svg></a><a class="display flex items-center justify-between border-b border-line py-4 text-[1.75rem] font-semibold text-fg aria-[current=page]:text-accent-strong" style="transition-delay:90ms" href="/reference" data-link="" data-prefetch="true">Reference
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5 -rotate-0 text-fg-faint"><path d="M6 18L17 7"></path><path d="M9 6h9v9"></path>
</svg></a><a class="display flex items-center justify-between border-b border-line py-4 text-[1.75rem] font-semibold text-fg aria-[current=page]:text-accent-strong" style="transition-delay:120ms" href="/blog" data-link="" data-prefetch="true">Blog
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-5 w-5 -rotate-0 text-fg-faint"><path d="M6 18L17 7"></path><path d="M9 6h9v9"></path>
</svg></a>
<div class="mt-8 flex flex-col gap-3"><a class="group/btn cut relative inline-flex select-none items-center justify-center gap-2.5 whitespace-nowrap font-semibold [font-stretch:100%] tracking-[-0.005em] transition-none active:translate-y-px h-[52px] px-6 tex [... 127 characters folded ...]>Install Bun v<!-- -->1.4.4</a>
<div class="mt-4 flex items-center justify-between">
<div class="flex items-center gap-2"><a aria-label="GitHub" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-line text-fg-muted hover:text-fg" href="https://github.com/oven-sh/bun" data-link="" data-prefetch="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]">[... 354 characters folded ...]
</svg></a><a aria-label="Discord" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-line text-fg-muted hover:text-fg" href="/discord" data-link="" data-prefetch="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]">[... 331 characters folded ...]
</svg></a><a aria-label="X (Twitter)" class="inline-flex h-10 w-10 items-center justify-center rounded-full border border-line text-fg-muted hover:text-fg" href="https://x.com/bunjavascript" data-link="" data-prefetch="true">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[18px] w-[18px]">[... 211 characters folded ...]
</svg></a>
</div>
</div>
</div>
</nav>
</div>
<main id="main" data-pagefind-body="true" class="flex-1">
<section class="register relative overflow-hidden">
<div class="mx-auto w-full max-w-container px-gutter grid gap-12 pb-12 pt-10 md:pt-14 lg:grid-cols-[minmax(0,1fr)_minmax(0,1.08fr)] lg:items-start lg:gap-16 lg:pb-16 [&amp;&gt;*]:min-w-0">
<div><a class="group/pill label inline-flex items-center gap-2.5 text-fg hover:text-accent" href="/blog/bun-v1.4.4" data-link="" data-prefetch="true"><span class="bg-accent px-1.5 py-[3px] text-[10px] leading-none text-white">NEW</span><span>Bun v<!-- -->1.4.4<!-- --> released</span><span aria-hidden="true" class="transition-transform duration-150 group-hover/pill:translate-x-0.5">→</span></a>
<h1 class="display mt-6 text-[clamp(2.5rem,5vw,4.25rem)] text-fg">Bun is a <span class="zoomy text-accent">fast</span> JavaScript runtime<span class="text-fg-faint"> &amp; </span>toolkit. All in one.
</h1>
<p class="text-pretty mt-6 max-w-[42ch] text-[1.06rem] leading-[1.55] text-fg-muted md:text-[1.12rem]">Runtime, package manager, test runner and bundler in a single binary. Use<!-- --> <a class="text-fg underline underline-offset-4 hover:bg-fg hover:text-canvas hover:decoration-transparent" href="/package-manager" data-link="" data-prefetch="true">bun install</a> <!-- -->or <a class="text-fg underline underline-offset-4 hover:bg-fg hover:text-canvas hover:decoration-transparent" href="/docs/cli/test" data-link="" data-prefetch="true">bun test</a> in an existing Node.js project, or run the whole thing on Bun.
</p>
<p class="mt-10 text-[14px] font-semibold text-fg">Install Bun v<!-- -->1.4.4
</p>
<div class="relative w-full max-w-[36rem] mt-2.5">
<div data-install="posix" class="group/cmd cut relative flex items-stretch [--cut:12px] bg-slab text-slab-fg h-[60px]"><span class="readout flex select-none items-center pl-5 pr-3 text-accent" aria-hidden="true">$</span><code class="readout scroll-none flex min-w-0 flex-1 items-center overflow-x-auto whitespace-nowrap text-[15px]">curl -fsSL https://bun.sh/install | bash</code><button type="button" aria-label="Copy install command" class="CopyIcon group/copy inline-flex items-center justify-center rounded-md text-fg-faint transition-[color,background,opacity] hover:bg-fg/[0.06] hover:text-fg h [... 107 characters folded ...]><span class="relative block h-4 w-4">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="absolute inset-0 h-4 w-4 transition-[opacity,transform] duration-200 opacity-100"><path d="M5.5 16H3V3h13v2.5"></path><path d="M8 8h9l4 4v9H8z"></path>
</svg>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="absolute inset-0 h-4 w-4 text-success transition-[opacity,transform] duration-200 scale-75 opacity-0"><path d="M4 12l5 5L20 6"></path>
</svg></span></button>
</div>
<div data-install="windows" hidden="" class="group/cmd cut relative flex items-stretch [--cut:12px] bg-slab text-slab-fg h-[60px] hidden"><span class="readout flex select-none items-center pl-5 pr-3 text-accent" aria-hidden="true">&gt;</span><code class="readout scroll-none flex min-w-0 flex-1 items-center overflow-x-auto whitespace-nowrap text-[15px]">powershell -c &quot;irm bun.sh/install.ps1|iex&quot;</code><button type="button" aria-label="Copy install command" class="CopyIcon group/copy inline-flex items-center justify-center rounded-md text-fg-faint transition-[color,background,opacity] hover:bg-fg/[0.06] hover:text-fg h [... 107 characters folded ...]><span class="relative block h-4 w-4">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="absolute inset-0 h-4 w-4 transition-[opacity,transform] duration-200 opacity-100"><path d="M5.5 16H3V3h13v2.5"></path><path d="M8 8h9l4 4v9H8z"></path>
</svg>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="absolute inset-0 h-4 w-4 text-success transition-[opacity,transform] duration-200 scale-75 opacity-0"><path d="M4 12l5 5L20 6"></path>
</svg></span></button>
</div>
<div class="mt-2.5 flex items-center justify-between gap-3">
<div role="tablist" aria-label="Operating system" class="inline-flex border p-px text-[12px] border-rule/60"><button type="button" role="tab" aria-selected="true" data-install-link="posix" class="px-2.5 py-[3px] bg-slab text-slab-fg">macOS &amp; Linux</button><button type="button" role="tab" aria-selected="false" data-install-link="windows" class="px-2.5 py-[3px] text-fg-muted hover:text-fg">Windows</button>
</div><a href="https://bun.sh/install" class="text-[12.5px] text-fg-faint hover:text-fg" target="_blank" rel="noopener">View install script ↗</a>
</div>
</div>
<div class="mt-5"><a class="group/al inline-flex items-center gap-1.5 font-semibold text-fg underline decoration-fg decoration-[1.5px] underline-offset-[5px] hover:bg-fg hover:text-canvas hover:decoration-transparent text-[15px]" href="/docs/quickstart" data-link="" data-prefetch="true">Then follow the quickstart
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-[0.95em] w-[0.95em] transition-transform duration-200 group-hover/al:translate-x-0.5"><path d="M4 12h14"></path><path d="M13 6l6 6-6 6"></path>
</svg></a>
</div>
</div>
<div>
<div class="w-full overflow-hidden bg-canvas lg:mt-16">
<div class="relative border-l border-t border-rule [&amp;&gt;div]:grid [&amp;&gt;div]:overflow-visible [&amp;&gt;div]:grid-cols-[repeat(4,auto)]"><button type="button" tabindex="-1" aria-hidden="true" class="absolute top-0 z-10 flex h-full w-9 items-center bg-canvas/90 text-fg transition-opacity duration-150 left-0 justify-start border-r border-rule/30 pl-1.5 pointer-events-none opacity-0">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-4 w-4 rotate-180"><path d="M4 12h14"></path><path d="M13 6l6 6-6 6"></path>
</svg></button>
<div aria-label="Benchmarks" role="tablist" class="flex snap-x snap-mandatory overflow-x-auto scroll-none"><button id="tab-install" aria-controls="install-tab-content" role="tab" aria-selected="true" tabindex="0" class="group/tile relative flex min-w-0 items-center justify-center border-b border-r border-rule px-1.5 py-3 sm:px-2.5 bg-slab text-slab-fg"><span class="whitespace-nowrap text-[12.5px] font-semibold sm:text-[13px]">bun install</span></button><button id="tab-react" aria-controls="react-tab-content" role="tab" aria-selected="false" tabindex="-1" class="group/tile relative flex min-w-0 items-center justify-center border-b border-r border-rule px-1.5 py-3 sm:px-2.5 text-fg hover:bg-subtle"><span class="whitespace-nowrap text-[12.5px] font-semibold sm:text-[13px]">Express</span></button><button id="tab-sqlite" aria-controls="sqlite-tab-content" role="tab" aria-selected="false" tabindex="-1" class="group/tile relative flex min-w-0 items-center justify-center border-b border-r border-rule px-1.5 py-3 sm:px-2.5 text-fg hover:bg-subtle"><span class="whitespace-nowrap text-[12.5px] font-semibold sm:text-[13px]">Postgres</span></button><button id="tab-websocket" aria-controls="websocket-tab-content" role="tab" aria-selected="false" tabindex="-1" class="group/tile relative flex min-w-0 items-center justify-center border-b border-r border-rule px-1.5 py-3 sm:px-2.5 text-fg hover:bg-subtle"><span class="whitespace-nowrap text-[12.5px] font-semibold sm:text-[13px]">WebSockets</span></button>
</div><button type="button" tabindex="-1" aria-hidden="true" class="absolute top-0 z-10 flex h-full w-9 items-center bg-canvas/90 text-fg transition-opacity duration-150 right-0 justify-end border-l border-rule/30 pr-1.5 pointer-events-none opacity-0">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="square" stroke-linejoin="miter" aria-hidden="true" class="h-4 w-4"><path d="M4 12h14"></path><path d="M13 6l6 6-6 6"></path>
</svg></button>
</div>
<div class="overflow-hidden transition-[height] duration-[380ms] ease-[cubic-bezier(.2,.9,.25,1)] border-x border-b border-rule">
<div role="tabpanel" id="install-tab-content" aria-labelledby="tab-install" class="panel text-left">
<div class="flex items-start justify-between gap-3 px-5 pb-2 pt-5 sm:px-6">
<div class="min-w-0">
<h2 class="m-0 text-[1.05rem] font-bold tracking-[-0.01em] text-fg">Installing a Next.js app
</h2>
<p class="m-0 mt-0.5 text-[13px] leading-snug text-fg-muted">warm cache · seconds (lower is better)
</p>
</div><button type="button" class="group/race inline-flex shrink-0 items-center gap-1.5 text-[12.5px] text-fg-muted hover:text-fg" aria-label="Replay this benchmark in real time" title="Watch it at real speed">
<svg viewBox="0 0 12 12" class="h-2.5 w-2.5 text-accent transition-transform group-hover/race:scale-110" fill="currentColor" aria-hidden="true"><path d="M2.5 1.6v8.8c0 .5.5.8.9.5l7-4.4a.6.6 0 000-1L3.4 1.1c-.4-.3-.9 0-.9.5z"></path>
</svg><span class="hidden sm:inline">replay in real time</span><span class="sm:hidden">real time</span></button>
</div>
<div class="px-5 pt-3 sm:px-6">
<div class="flex flex-col gap-3">
<div class="flex items-center gap-3">
<div class="w-[4.75rem] shrink-0 leading-tight sm:w-[7rem]">
<div class="truncate text-[14px] font-bold text-fg">bun
</div>
<div class="readout truncate text-[10px] text-fg-faint">v1.4
</div>
</div>
<div class="relative h-7 min-w-0 flex-1 bg-subtle">
<div class="absolute inset-y-0 left-0 bg-accent" style="width:4.2%;--bar-delay:0ms">

Shown with 43 long blocks (scripts, styles, long tags) folded into a marker that says how many characters they hide; line breaks added before block tags because the source is minified; the pane stops after the first 200 words; the page is 257 KB.

Reading view the text a plain-fetch client can extract

title: Bun — A fast all-in-one JavaScript runtime

Bun is a fast JavaScript runtime & toolkit. All in one.

Skip to content Bun has joined Anthropic — and Anthropic is betting on Bun→ Docs Guides Reference Blog Search docs, APIs, guides…/ Install Home Docs Guides Reference Blog Install Bun v 1.4.4 NEWBun v 1.4.4 released→ Bun is a fast JavaScript runtime & toolkit. All in one. Runtime, package manager, test runner and bundler in a single binary. Use bun install or bun test in an existing Node.js project, or run the whole thing on Bun. Install Bun v 1.4.4 $curl -fsSL https://bun.sh/install | bash >powershell -c "irm bun.sh/install.ps1|iex" macOS & Linux Windows View install script ↗ Then follow the quickstart bun install Express Postgres WebSockets Installing a Next.js app warm cache · seconds (lower is better) replay in real timereal time bun v1.4 0.21s yarn v1.22.22 1.76s pnpm v11.21.0 1.92s npm v12.0.2 4.45s 0s1s2s3s4s5s T3-stack app, 25 direct dependencies, ~220 packages in the lockfile · warm cache · lockfile present · node_modules removed · Linux x64, EPYC 9R14 · every package manager at defaults · medians of 3 reproduce Installing a Next.js app — T3-stack app, 25 direct dependencies, ~220 packages in the lockfile · warm cache · lockfile present · node_modules removed · Linux x64, EPYC 9R14 ·

2826 more words follow in the initial HTML.

4 found, 1 missing, 2 notes, from 7 checks run

  • H1Found
  • 200 wordsFound
  • llms.txtNote
  • MarkdownMissing
  • Missing pathFound
  • JSON-LDFound
  • OpenAPINote
What a plain fetch found on bun.sh
CheckResultDetail
H1 in the initial HTMLFound one H1First H1: Bun is a fast JavaScript runtime & toolkit. All in one.
First 200 words in the initial HTMLFound 200 of 200 wordsThe initial HTML carries 3026 words of visible text; the first 200 are marked in the left pane.
llms.txt present and linkedNote present, not linked33834 bytes, 322 links. Structure grade C (4 of 6). Nothing on the home page points to it. Ora's lab found 86 percent of llms.txt fetches arrived through a link.
Markdown on requestMissing 200 text/htmlAccept: text/markdown returned 200 with text/html; charset=utf-8. The server ignores the header.
Status of a made-up pathFound 404/agent-ready-html-missing-path-check returned 404: a real status code for a missing page.
JSON-LD typesFound ImageObject, Organization, WebPage, WebSite4 schema.org types in JSON-LD blocks on the home page: ImageObject, Organization, WebPage, WebSite.
OpenAPI linkNote none on the home pageNo OpenAPI link on the home page. It matters only for a site that ships an API.

Run the full check

The viewer read one page with four requests. The full check we recommend next is Ora's scan. Its Access layer runs 42 checks worth 30 of its 100 points, among them content without JavaScript, bot detection, llms.txt, markdown on request, JSON-LD and the sitemap (Ora's check catalogue, contract 1.38.0, read 5 November 2026). Open Ora's report for bun.sh.

Limits: Ora reads public URLs only, says two runs of one scan land within a couple of points without publishing repeat-scan data, and keeps the product that fixes what it finds behind a waitlist. Cloudflare's scanner at isitagentready.com is a quick free alternative, and Mintlify's score covers documentation.

What the viewer does

It sends four plain GET requests with the user agent Mozilla/5.0 (compatible; agent-readiness-crawl/1.0): the URL itself, the same URL with Accept: text/markdown, /llms.txt on the same host, and a made-up path at the root. It runs no JavaScript. The left pane is the first bytes of the HTML as text, with long scripts and styles folded into a marker that says how many characters they hide. The H1 and the first 200 words of visible text are marked in both panes. The flags under the panes say what the four responses added up to.

Limits

  • Ten seconds for all four requests together, 1.5 MB read from the home page, at most five redirects, each one checked again.
  • http and https only, default ports only. Private, local and internal addresses and names are refused.
  • Ten runs per address per minute. The counter lives in memory on the edge function, so it is per instance rather than global. Past ten you get a 429 with a Retry-After header.
  • Results are cached for 24 hours by the response headers. Nothing is written to a database: the viewer keeps the first 200 words and the extracted fields for the length of the request and keeps no page body beyond that.

What it does not tell you

A plain fetch from this server is not a real agent. Bot protection weighs the source address more than the user agent, so a page that answers 200 here can still refuse an agent, and the reverse. Ora's lab found (2026-10-19) that returning 403 to agent user agents and hiding the answer in JavaScript were the only two of 19 configurations that stopped retrieval; the viewer can see the second, and can only hint at the first. The initial HTML reference covers both. The server logs and the published crawler address ranges settle the first.

The seven flags

H1 in the initial HTML
Whether the HTML the server sends already contains an H1. It is the cheapest sign that the page does not depend on scripts to say what it is.
First 200 words in the initial HTML
Whether at least 200 words of visible text arrive in the initial HTML. Under 40 words with an app root element is flagged as a JavaScript shell.
llms.txt present and linked
Whether /llms.txt answers with a plain-text file, whether the home page links it (an anchor, a link element or a Link header), and the structure grade the index uses.
Markdown on request
Whether a request with Accept: text/markdown comes back as text/markdown. Cloudflare Radar found 3.9 percent of scanned top sites passing this at its April 2026 launch.
Status of a made-up path
Whether a path that should not exist returns 404 or 410. A 200 is a soft 404 and reads as a live page.
JSON-LD types
The schema.org types found in JSON-LD blocks on the page. Ora's lab found JSON-LD made no difference when the answer was already in the HTML.
OpenAPI link
Whether the page links an OpenAPI file, by an anchor or a service-desc link relation. It matters only for a site that ships an API.

Sources

  1. Ora: AgentReady launch post (Ora's lab findings) https://ora.ai/blog/agentready-launch, read 4 November 2026
  2. Ora check catalogue, contract 1.38.0 (132 checks, 42 in the Access layer) https://ora.ai/api/checks, read 5 November 2026
  3. Ora home page (the fixing product is behind a waitlist) https://ora.ai/, read 5 November 2026
  4. Ora: Introducing Deep Scan (repeat scans) https://ora.ai/blog/introducing-deep-scan, read 5 November 2026
  5. Ora llms.txt (public URLs only) https://ora.ai/llms.txt, read 5 November 2026
  6. Vercel: Make your site readable by AI agents https://vercel.com/kb/guide/make-your-site-readable-by-ai-agents, read 4 November 2026
  7. llms.txt proposal (llmstxt.org) https://llmstxt.org/, read 4 November 2026

Last reviewed 5 November 2026