[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"categories-en":3,"post:\u002Fpost\u002Fbun-javascript-runtime-replaced-15-tools-one-binary":37},[4,11,17,24,30],{"id":5,"slug":6,"name":7,"colorHex":8,"iconName":9,"postCount":10},"0e2c1225-f78a-4c20-8c93-998ab9dc93b9","frontend","Frontend","#40484f",null,25,{"id":12,"slug":13,"name":14,"colorHex":15,"iconName":9,"postCount":16},"bc8df70e-b7fb-4d89-a80c-fd458d36d58c","code-development","Code & Development","#8b5cf6",23,{"id":18,"slug":19,"name":20,"colorHex":21,"iconName":22,"postCount":23},"550e8400-e29b-41d4-a716-446655440001","inteligencia-artificial","Artificial Intelligence","#6366f1","brain",14,{"id":25,"slug":26,"name":27,"colorHex":28,"iconName":9,"postCount":29},"ea63b69c-2eb4-4100-81f3-70ce52d33743","tech-news","Tech News","#e50606",4,{"id":31,"slug":32,"name":33,"colorHex":34,"iconName":35,"postCount":36},"550e8400-e29b-41d4-a716-446655440017","how-to-guides","How-To & Guides","#be123c","book-open",2,{"post":38,"related":523,"translations":593,"resolved":9},{"id":39,"slug":40,"title":41,"excerpt":42,"image":43,"featured":44,"groupId":45,"publishedAt":46,"readingTime":47,"views":48,"author":49,"category":51,"tags":52,"contentJson":62,"metaTitle":520,"metaDescription":521,"updatedAt":522},"17aaff27-17fd-40b2-a6ed-68ce9beda016","bun-javascript-runtime-replaced-15-tools-one-binary","Bun: The JavaScript Runtime That Replaced 15 Tools With One Binary","Bun is not just faster than Node.js. It is a runtime, package manager, bundler, test runner and TypeScript transpiler in a single binary. Here is why it is becoming the default for new projects in 2026.","https:\u002F\u002Fmfgiomkkbihnlpfdxwrt.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fblog-assets\u002Fmedia\u002Ffeatured\u002F1776269647224-featured-0gd0km.jpeg",false,"8f358141-6723-46ac-a986-872ee00d31c5","2026-04-16T01:23:57.576+00:00",7,0,{"name":50,"avatar":9},"Genildo Souza",{"slug":13,"name":14,"color":15},[53,56,59],{"slug":54,"name":55},"typescript","TypeScript",{"slug":57,"name":58},"nodejs","Node.js",{"slug":60,"name":61},"javascript","JavaScript",{"type":63,"content":64},"doc",[65,73,79,85,103,110,116,122,128,140,146,154,160,166,196,202,208,215,220,226,245,252,258,287,293,305,312,322,328,334,341,348,354,361,367,373,378,395,401,407,414,420,446,452,458,464,480,494,500,506,517],{"type":66,"attrs":67,"content":69},"paragraph",{"id":68},"p_u4i86pfd",[70],{"text":71,"type":72},"Jarred Sumner, Bun's creator, said it plainly: \"We didn't build Bun to replace Node.js. We built it to replace the 15 tools you need alongside Node.js.\"\"","text",{"type":66,"attrs":74,"content":76},{"id":75},"p_l3ct3noc",[77],{"text":78,"type":72},"npm. webpack. babel. jest. ts-node. nodemon. tsc. One binary replaces all of them — and runs TypeScript natively, no compilation step required.",{"type":66,"attrs":80,"content":82},{"id":81},"p_0v423gwq",[83],{"text":84,"type":72},"In December 2025, Anthropic acquired Bun. Claude Code, the Claude Agent SDK, and future AI coding products now run on it. With 7.2 million monthly downloads before the acquisition and 85% YoY growth, Bun stopped being an experiment and became infrastructure.",{"type":86,"attrs":87},"archVisual",{"id":88,"cards":89,"title":9,"caption":9},"arch_b9v34ilw",[90,94,99],{"tag":91,"title":92,"subtitle":93},"HTTP throughput","52k","req\u002Fs vs Node.js's 14k",{"tag":95,"title":96,"accent":97,"subtitle":98},"Package install","25-30×",1,"faster than npm",{"tag":100,"title":101,"accent":97,"subtitle":102},"Cold start","8ms","vs Node.js's 40-120ms",{"type":104,"attrs":105,"content":107},"heading",{"id":106,"level":36},"h_upbcsdrc",[108],{"text":109,"type":72},"Why Bun is faster",{"type":66,"attrs":111,"content":113},{"id":112},"p_wp6idg0l",[114],{"text":115,"type":72},"Node.js uses V8 (Chrome's engine), optimized for long-running processes. Bun uses JavaScriptCore (Safari's engine), optimized for fast startup. That single architectural decision explains most benchmark results.",{"type":66,"attrs":117,"content":119},{"id":118},"p_r9hkhha4",[120],{"text":121,"type":72},"On top of that, Bun is written in Zig — a low-level systems language — and uses io_uring on Linux for efficient async I\u002FO. No TypeScript transpilation. No unnecessary compatibility layers. Less work per operation.",{"type":123,"attrs":124},"svgDiagram",{"id":125,"svg":126,"label":127},"svg_teeoazhx","\u003Csvg viewBox=\"0 0 680 160\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" font-family=\"'Inter','Segoe UI',sans-serif\">\n  \u003Crect x=\"20\" y=\"20\" width=\"290\" height=\"120\" rx=\"6\" fill=\"rgba(100,116,139,0.07)\" stroke=\"#64748b\" stroke-width=\"1.5\"\u002F>\n  \u003Ctext x=\"165\" y=\"44\" text-anchor=\"middle\" font-size=\"12\" fill=\"#64748b\" font-weight=\"700\">Node.js\u003C\u002Ftext>\n  \u003Crect x=\"35\" y=\"55\" width=\"120\" height=\"28\" rx=\"4\" fill=\"rgba(100,116,139,0.12)\"\u002F>\n  \u003Ctext x=\"95\" y=\"73\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">V8 (Chrome)\u003C\u002Ftext>\n  \u003Crect x=\"165\" y=\"55\" width=\"120\" height=\"28\" rx=\"4\" fill=\"rgba(100,116,139,0.12)\"\u002F>\n  \u003Ctext x=\"225\" y=\"73\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">C++ + libuv\u003C\u002Ftext>\n  \u003Ctext x=\"165\" y=\"108\" text-anchor=\"middle\" font-size=\"10\" fill=\"#64748b\">npm · tsc · jest · nodemon · babel...\u003C\u002Ftext>\n  \u003Ctext x=\"165\" y=\"126\" text-anchor=\"middle\" font-size=\"9\" fill=\"#94a3b8\">multiple external tools\u003C\u002Ftext>\n  \u003Crect x=\"370\" y=\"20\" width=\"290\" height=\"120\" rx=\"6\" fill=\"rgba(249,115,22,0.07)\" stroke=\"#f97316\" stroke-width=\"1.5\"\u002F>\n  \u003Ctext x=\"515\" y=\"44\" text-anchor=\"middle\" font-size=\"12\" fill=\"#f97316\" font-weight=\"700\">Bun\u003C\u002Ftext>\n  \u003Crect x=\"385\" y=\"55\" width=\"120\" height=\"28\" rx=\"4\" fill=\"rgba(249,115,22,0.12)\"\u002F>\n  \u003Ctext x=\"445\" y=\"73\" text-anchor=\"middle\" font-size=\"10\" fill=\"#f97316\">JavaScriptCore (Safari)\u003C\u002Ftext>\n  \u003Crect x=\"515\" y=\"55\" width=\"120\" height=\"28\" rx=\"4\" fill=\"rgba(249,115,22,0.12)\"\u002F>\n  \u003Ctext x=\"575\" y=\"73\" text-anchor=\"middle\" font-size=\"10\" fill=\"#f97316\">Zig + io_uring\u003C\u002Ftext>\n  \u003Ctext x=\"515\" y=\"108\" text-anchor=\"middle\" font-size=\"10\" fill=\"#f97316\">runtime · pkg mgr · bundler · test · TS\u003C\u002Ftext>\n  \u003Ctext x=\"515\" y=\"126\" text-anchor=\"middle\" font-size=\"9\" fill=\"#94a3b8\">a single binary\u003C\u002Ftext>\n\u003C\u002Fsvg>","Diagram — Architecture: Node.js vs Bun",{"type":129,"attrs":130,"content":133},"callout",{"id":131,"type":132,"title":9},"call_qwodu10n","info",[134],{"type":66,"attrs":135,"content":137},{"id":136},"p_6wof1m2q",[138],{"text":139,"type":72},"Bun's performance advantage is most visible in startup and package install. In real-world apps with databases, all three runtimes converge around 12,000 req\u002Fs — because database latency dominates. Where Bun genuinely makes a difference: CLI tools, serverless functions, and local development loops.",{"type":104,"attrs":141,"content":143},{"id":142,"level":36},"h_m7cmtoh4",[144],{"text":145,"type":72},"Installation",{"type":147,"attrs":148,"content":151},"codeBlock",{"id":149,"language":60,"highlighted":150},"code_anzmv7bo","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># macOS \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Linux\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">curl \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">fsSL \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">https\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">:\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002Fbun.sh\u002Finstall | bash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Windows\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">powershell \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">c \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"irm bun.sh\u002Finstall.ps1 | iex\"\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Verify\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">version\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[152],{"text":153,"type":72},"# macOS \u002F Linux\ncurl -fsSL https:\u002F\u002Fbun.sh\u002Finstall | bash\n\n# Windows\npowershell -c \"irm bun.sh\u002Finstall.ps1 | iex\"\n\n# Verify\nbun --version",{"type":104,"attrs":155,"content":157},{"id":156,"level":36},"h_xho8gztv",[158],{"text":159,"type":72},"Native TypeScript — zero configuration",{"type":66,"attrs":161,"content":163},{"id":162},"p_9dyeswuz",[164],{"text":165,"type":72},"This is the first difference developers feel day-to-day. With Node.js, running TypeScript requires ts-node, or compiling with tsc, or using --experimental-strip-types (which only removes types, no type-checking).",{"type":167,"attrs":168,"content":170},"compare",{"id":169},"cmp_pns3rtz8",[171,184],{"type":172,"attrs":173,"content":177},"compareColumn",{"id":174,"side":175,"title":176},"col_4pvlxphj","left","Node.js — setup required",[178],{"type":66,"attrs":179,"content":181},{"id":180},"p_o2dkf42e",[182],{"text":183,"type":72},"# Option 1: ts-node\nnpm install -D ts-node typescript\nnpx ts-node index.ts\n\n# Option 2: compile first\nnpx tsc\nnode dist\u002Findex.js\n\n# Option 3: experimental (strip only)\nnode --experimental-strip-types index.ts",{"type":172,"attrs":185,"content":189},{"id":186,"side":187,"title":188},"col_y57gzpc2","right","Bun — zero setup",[190],{"type":66,"attrs":191,"content":193},{"id":192},"p_ffcqktpf",[194],{"text":195,"type":72},"# Just works\nbun index.ts\n\n# With watch mode\nbun --watch index.ts\n\n# Nothing to install\n# No compilation\n# No tsconfig required",{"type":104,"attrs":197,"content":199},{"id":198,"level":36},"h_1rq635ik",[200],{"text":201,"type":72},"Package manager — 25x faster than npm",{"type":66,"attrs":203,"content":205},{"id":204},"p_k50tuzu0",[206],{"text":207,"type":72},"Bun's package manager is npm-compatible but uses a different strategy: a global binary cache and hard-links directly into node_modules. No re-downloading. No re-validation on every install.",{"type":147,"attrs":209,"content":212},{"id":210,"language":60,"highlighted":211},"code_9ywa9eir","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Install \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">dependencies\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (replaces npm install)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun install\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Add \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">package\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun add zod\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun add \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">d typescript\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Remove\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun remove lodash\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Run package.json scripts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun run dev\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun run build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun run test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Execute without global install\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bunx create\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">hono my\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">-\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">app\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[213],{"text":214,"type":72},"# Install dependencies (replaces npm install)\nbun install\n\n# Add package\nbun add zod\nbun add -d typescript\n\n# Remove\nbun remove lodash\n\n# Run package.json scripts\nbun run dev\nbun run build\nbun run test\n\n# Execute without global install\nbunx create-hono my-app",{"type":123,"attrs":216},{"id":217,"svg":218,"label":219},"svg_60z0n6hs","\u003Csvg viewBox=\"0 0 680 160\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" font-family=\"'Inter','Segoe UI',sans-serif\">\n  \u003Ctext x=\"40\" y=\"25\" font-size=\"11\" fill=\"#64748b\" font-weight=\"700\">Install time — React app (lower = better)\u003C\u002Ftext>\n  \u003Crect x=\"40\" y=\"38\" width=\"16\" height=\"24\" rx=\"2\" fill=\"rgba(249,115,22,0.9)\"\u002F>\n  \u003Ctext x=\"62\" y=\"54\" font-size=\"10\" fill=\"#f97316\" font-weight=\"700\">Bun\u003C\u002Ftext>\n  \u003Ctext x=\"200\" y=\"54\" font-size=\"10\" fill=\"#f97316\" font-weight=\"700\">~2s\u003C\u002Ftext>\n  \u003Crect x=\"40\" y=\"74\" width=\"80\" height=\"24\" rx=\"2\" fill=\"rgba(100,116,139,0.5)\"\u002F>\n  \u003Ctext x=\"126\" y=\"90\" font-size=\"10\" fill=\"#94a3b8\">pnpm\u003C\u002Ftext>\n  \u003Ctext x=\"200\" y=\"90\" font-size=\"10\" fill=\"#94a3b8\">~8s\u003C\u002Ftext>\n  \u003Crect x=\"40\" y=\"110\" width=\"160\" height=\"24\" rx=\"2\" fill=\"rgba(100,116,139,0.3)\"\u002F>\n  \u003Ctext x=\"206\" y=\"126\" font-size=\"10\" fill=\"#64748b\">npm\u003C\u002Ftext>\n  \u003Ctext x=\"280\" y=\"126\" font-size=\"10\" fill=\"#64748b\">~18s\u003C\u002Ftext>\n  \u003Cline x1=\"40\" y1=\"140\" x2=\"580\" y2=\"140\" stroke=\"#1e2330\" stroke-width=\"1\"\u002F>\n  \u003Ctext x=\"40\" y=\"155\" font-size=\"9\" fill=\"#64748b\">0s\u003C\u002Ftext>\n  \u003Ctext x=\"180\" y=\"155\" font-size=\"9\" fill=\"#64748b\">5s\u003C\u002Ftext>\n  \u003Ctext x=\"340\" y=\"155\" font-size=\"9\" fill=\"#64748b\">10s\u003C\u002Ftext>\n  \u003Ctext x=\"500\" y=\"155\" font-size=\"9\" fill=\"#64748b\">15s\u003C\u002Ftext>\n\u003C\u002Fsvg>","Diagram — Install speed comparison (React app)",{"type":104,"attrs":221,"content":223},{"id":222,"level":36},"h_nju0g91h",[224],{"text":225,"type":72},"Native HTTP server",{"type":66,"attrs":227,"content":229},{"id":228},"p_wxpkte2d",[230,232,237,239,243],{"text":231,"type":72},"Bun ships a built-in HTTP server based on Web Standard APIs — the same ",{"text":233,"type":72,"marks":234},"Request",[235],{"type":236},"code",{"text":238,"type":72}," and ",{"text":240,"type":72,"marks":241},"Response",[242],{"type":236},{"text":244,"type":72}," interface you already know from the browser and Cloudflare Workers.",{"type":147,"attrs":246,"content":249},{"id":247,"language":60,"highlighted":248},"code_3yys2emu","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F server.ts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">serve\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  port: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">3000\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  fetch\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">req\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> url\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> URL\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(req.url);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (url.pathname \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> '\u002F'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">      return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Response\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'Hello from Bun!'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (url.pathname \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">===\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> '\u002Fjson'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">      return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Response.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({ runtime: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'bun'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, fast: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">true\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">    }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Response\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'Not Found'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, { status: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">404\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'Running at http:\u002F\u002Flocalhost:3000'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[250],{"text":251,"type":72},"\u002F\u002F server.ts\nBun.serve({\n  port: 3000,\n  fetch(req) {\n    const url = new URL(req.url);\n\n    if (url.pathname === '\u002F') {\n      return new Response('Hello from Bun!');\n    }\n\n    if (url.pathname === '\u002Fjson') {\n      return Response.json({ runtime: 'bun', fast: true });\n    }\n\n    return new Response('Not Found', { status: 404 });\n  },\n});\n\nconsole.log('Running at http:\u002F\u002Flocalhost:3000');",{"type":66,"attrs":253,"content":255},{"id":254},"p_35v8meia",[256],{"text":257,"type":72},"Bun's native server reaches around 68,000 req\u002Fs in hello world benchmarks — competing with Rust frameworks. At the application layer, frameworks like Hono extract the most from that throughput with optimized routing, Zod validation and a typed RPC client.",{"type":129,"attrs":259,"content":262},{"id":260,"type":261,"title":9},"call_1y9dcoky","tip",[263],{"type":66,"attrs":264,"content":266},{"id":265},"p_peit5n7q",[267,269,273,275,285],{"text":268,"type":72},"Bun + Hono is the most performant combination for JavaScript APIs in 2026. Hono was built on Web Standards — the same foundation as ",{"text":270,"type":72,"marks":271},"Bun.serve()",[272],{"type":236},{"text":274,"type":72}," — and runs natively without adapters. If you haven't explored Hono yet, we have a ",{"text":276,"type":72,"marks":277},"complete guide to the framework",[278],{"type":279,"attrs":280},"link",{"rel":281,"href":282,"class":283,"title":9,"target":284},"noopener","\u002Fen\u002Fpost\u002Fhono-js-web-framework-you-are-probably-not-using-yet","text-cyan-400 hover:underline cursor-pointer","_self",{"text":286,"type":72}," — from the basics to end-to-end typed RPC client.",{"type":104,"attrs":288,"content":290},{"id":289,"level":36},"h_3hsimec1",[291],{"text":292,"type":72},"Built-in test runner (Jest-compatible)",{"type":66,"attrs":294,"content":296},{"id":295},"p_9crf1m6u",[297,299,303],{"text":298,"type":72},"No ",{"text":300,"type":72,"marks":301},"@jest\u002Fcore",[302],{"type":236},{"text":304,"type":72},", no ts-jest, no environment setup. The API is intentionally compatible with Jest.",{"type":147,"attrs":306,"content":309},{"id":307,"language":60,"highlighted":308},"code_9n9d3wea","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F math.test.ts\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { describe, it, expect } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> 'bun:test'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { sum, average } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> '.\u002Fmath'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">describe\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'math functions'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  it\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'sums two numbers'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    expect\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">sum\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">3\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">)).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">toBe\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">5\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  it\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'calculates average correctly'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    expect\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">average\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">([\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">2\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">3\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">4\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">])).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">toBe\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">2.5\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  it\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'throws on empty array'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, () \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    expect\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(() \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">=>\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> average\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">([])).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">toThrow\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'Array cannot be empty'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F Run\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F bun test\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F bun test --watch\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F bun test --coverage\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[310],{"text":311,"type":72},"\u002F\u002F math.test.ts\nimport { describe, it, expect } from 'bun:test';\nimport { sum, average } from '.\u002Fmath';\n\ndescribe('math functions', () => {\n  it('sums two numbers', () => {\n    expect(sum(2, 3)).toBe(5);\n  });\n\n  it('calculates average correctly', () => {\n    expect(average([1, 2, 3, 4])).toBe(2.5);\n  });\n\n  it('throws on empty array', () => {\n    expect(() => average([])).toThrow('Array cannot be empty');\n  });\n});\n\n\u002F\u002F Run\n\u002F\u002F bun test\n\u002F\u002F bun test --watch\n\u002F\u002F bun test --coverage",{"type":129,"attrs":313,"content":315},{"id":314,"type":132,"title":9},"call_tvpqqoz1",[316],{"type":66,"attrs":317,"content":319},{"id":318},"p_a65jh5oy",[320],{"text":321,"type":72},"Bun's test runner is significantly faster than Jest because there's no transpilation step. TypeScript is executed directly. The same test code works in both — the API is intentionally compatible.",{"type":104,"attrs":323,"content":325},{"id":324,"level":36},"h_9pzz2pdt",[326],{"text":327,"type":72},"Native bundler",{"type":66,"attrs":329,"content":331},{"id":330},"p_7i33c0hb",[332],{"text":333,"type":72},"Bun ships a bundler that replaces esbuild, webpack, and rollup for the most common cases. TypeScript, JSX, tree-shaking, and minification — all native, no plugins.",{"type":147,"attrs":335,"content":338},{"id":336,"language":60,"highlighted":337},"code_shh8rbom","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">CLI\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> — simple build\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">minify\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">sourcemap\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"># Different targets\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">target node\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">target browser\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">bun build .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">src\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">index.ts \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">outdir .\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">\u002F\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">dist \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">--\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">target bun\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[339],{"text":340,"type":72},"# CLI — simple build\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist --minify\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist --sourcemap\n\n# Different targets\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist --target node\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist --target browser\nbun build .\u002Fsrc\u002Findex.ts --outdir .\u002Fdist --target bun",{"type":147,"attrs":342,"content":345},{"id":343,"language":60,"highlighted":344},"code_09wd11r9","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F Programmatic API\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">build\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  entrypoints: [\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Fsrc\u002Findex.ts'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">],\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  outdir: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Fdist'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  minify: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">true\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  splitting: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">true\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F automatic code splitting\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  target: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'browser'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  define: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">    'process.env.NODE_ENV'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'\"production\"'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[346],{"text":347,"type":72},"\u002F\u002F Programmatic API\nawait Bun.build({\n  entrypoints: ['.\u002Fsrc\u002Findex.ts'],\n  outdir: '.\u002Fdist',\n  minify: true,\n  splitting: true, \u002F\u002F automatic code splitting\n  target: 'browser',\n  define: {\n    'process.env.NODE_ENV': '\"production\"',\n  },\n});",{"type":104,"attrs":349,"content":351},{"id":350,"level":36},"h_cifaneow",[352],{"text":353,"type":72},"Native APIs that replace external packages",{"type":147,"attrs":355,"content":358},{"id":356,"language":60,"highlighted":357},"code_embw92al","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F File I\u002FO — no fs.readFile callback\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> text\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">file\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Fdata.txt'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">text\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">file\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Fconfig.json'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">json\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">write\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Foutput.txt'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'content here'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F Native hashing — no library needed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> hash\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">hash\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'my string'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> sha256\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">CryptoHasher\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'sha256'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">update\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'data'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">digest\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'hex'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F Spawn processes\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> proc\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">spawn\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">([\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'ls'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'-la'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">], { stdout: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'pipe'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> });\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> output\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> await\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Response\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(proc.stdout).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">text\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">();\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F SQLite — no driver needed\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">import\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> { Database } \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">from\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\"> 'bun:sqlite'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">;\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> db\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Database\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'.\u002Fapp.db'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">const\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\"> users\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> =\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> db.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">query\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'SELECT * FROM users WHERE active = ?'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">).\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">all\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">1\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F Native WebSocket in the server\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">Bun.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">serve\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">({\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  port: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#005CC5;--shiki-dark:#79B8FF\">3000\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">  fetch\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">req\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">server\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    if\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\"> (server.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">upgrade\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(req)) \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">; \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F upgrade to WebSocket\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\">    return\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#D73A49;--shiki-dark:#F97583\"> new\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\"> Response\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'Regular HTTP'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">);\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  websocket: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    message\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">ws\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">, \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">msg\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) { ws.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">send\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">`Echo: ${\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">msg\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">}`\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">); },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    open\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">ws\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) { console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'connected'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">); },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">    close\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#E36209;--shiki-dark:#FFAB70\">ws\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">) { console.\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6F42C1;--shiki-dark:#B392F0\">log\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">(\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">'disconnected'\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">); },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  },\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">});\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[359],{"text":360,"type":72},"\u002F\u002F File I\u002FO — no fs.readFile callback\nconst text = await Bun.file('.\u002Fdata.txt').text();\nconst json = await Bun.file('.\u002Fconfig.json').json();\nawait Bun.write('.\u002Foutput.txt', 'content here');\n\n\u002F\u002F Native hashing — no library needed\nconst hash = Bun.hash('my string');\nconst sha256 = new Bun.CryptoHasher('sha256').update('data').digest('hex');\n\n\u002F\u002F Spawn processes\nconst proc = Bun.spawn(['ls', '-la'], { stdout: 'pipe' });\nconst output = await new Response(proc.stdout).text();\n\n\u002F\u002F SQLite — no driver needed\nimport { Database } from 'bun:sqlite';\nconst db = new Database('.\u002Fapp.db');\nconst users = db.query('SELECT * FROM users WHERE active = ?').all(1);\n\n\u002F\u002F Native WebSocket in the server\nBun.serve({\n  port: 3000,\n  fetch(req, server) {\n    if (server.upgrade(req)) return; \u002F\u002F upgrade to WebSocket\n    return new Response('Regular HTTP');\n  },\n  websocket: {\n    message(ws, msg) { ws.send(`Echo: ${msg}`); },\n    open(ws) { console.log('connected'); },\n    close(ws) { console.log('disconnected'); },\n  },\n});",{"type":104,"attrs":362,"content":364},{"id":363,"level":36},"h_zunmqheb",[365],{"text":366,"type":72},"Node.js compatibility in 2026",{"type":66,"attrs":368,"content":370},{"id":369},"p_orq6ef35",[371],{"text":372,"type":72},"Bun claims drop-in Node.js compatibility. The real number in 2026 is 95% — production-ready for most stacks, but with important exceptions.",{"type":123,"attrs":374},{"id":375,"svg":376,"label":377},"svg_a51chxeh","\u003Csvg viewBox=\"0 0 680 180\" xmlns=\"http:\u002F\u002Fwww.w3.org\u002F2000\u002Fsvg\" font-family=\"'Inter','Segoe UI',sans-serif\">\n  \u003Ctext x=\"40\" y=\"25\" font-size=\"11\" fill=\"#64748b\" font-weight=\"700\">What works in Bun\u003C\u002Ftext>\n  \u003Crect x=\"20\" y=\"35\" width=\"300\" height=\"130\" rx=\"6\" fill=\"rgba(16,185,129,0.06)\" stroke=\"#10b981\" stroke-width=\"1\"\u002F>\n  \u003Ctext x=\"170\" y=\"56\" text-anchor=\"middle\" font-size=\"10\" fill=\"#10b981\" font-weight=\"700\">✓ Works (95%)\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"74\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Express, Fastify, Hono, Elysia\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"91\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Prisma, Drizzle, TypeORM\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"108\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">fs, path, crypto, http, net\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"125\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Jest-compatible tests\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"142\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">CommonJS + ESM\u003C\u002Ftext>\n  \u003Ctext x=\"170\" y=\"159\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">~95% of npm packages\u003C\u002Ftext>\n  \u003Crect x=\"360\" y=\"35\" width=\"300\" height=\"130\" rx=\"6\" fill=\"rgba(239,68,68,0.06)\" stroke=\"#ef4444\" stroke-width=\"1\"\u002F>\n  \u003Ctext x=\"510\" y=\"56\" text-anchor=\"middle\" font-size=\"10\" fill=\"#ef4444\" font-weight=\"700\">✗ Blockers (5%)\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"74\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Native addons (node-gyp)\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"91\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">C++ bindings compiled for V8\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"108\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Advanced Worker Threads\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"125\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">cluster module edge cases\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"142\" text-anchor=\"middle\" font-size=\"10\" fill=\"#94a3b8\">Some native database drivers\u003C\u002Ftext>\n  \u003Ctext x=\"510\" y=\"159\" text-anchor=\"middle\" font-size=\"10\" fill=\"#64748b\">Bun 1.2 improved this a lot\u003C\u002Ftext>\n\u003C\u002Fsvg>","Diagram — Bun vs Node.js compatibility (March 2026)",{"type":129,"attrs":379,"content":382},{"id":380,"type":381,"title":9},"call_g5oolbo3","warning",[383],{"type":66,"attrs":384,"content":386},{"id":385},"p_ebuaede6",[387,389,393],{"text":388,"type":72},"Before migrating an existing Node.js project, check for native addons: ",{"text":390,"type":72,"marks":391},"grep -r \"node-gyp\\|binding.gyp\\|nan\" node_modules\u002F.bin",[392],{"type":236},{"text":394,"type":72},". If you get results, the migration will need extra work.",{"type":104,"attrs":396,"content":398},{"id":397,"level":36},"h_fx3s9got",[399],{"text":400,"type":72},"Bun as dev tooling + Node.js in production",{"type":66,"attrs":402,"content":404},{"id":403},"p_7dt929y3",[405],{"text":406,"type":72},"If you have compatibility concerns, there's a gradual adoption strategy that works well: use Bun as development tooling and keep Node.js in production until you're confident.",{"type":147,"attrs":408,"content":411},{"id":409,"language":60,"highlighted":410},"code_a92rzzbw","\u003Cpre class=\"shiki shiki-themes github-light github-dark\" style=\"--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F package.json — Bun for tooling, Node.js for deployment\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">{\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">  \"scripts\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: {\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">    \"dev\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"bun --watch src\u002Findex.ts\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">    \"test\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"bun test\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">    \"build\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"bun build src\u002Findex.ts --outdir dist --target node\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">,\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">    \"start\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">: \u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#032F62;--shiki-dark:#9ECBFF\">\"node dist\u002Findex.js\"\u003C\u002Fspan>\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">  \u002F\u002F production still on Node.js\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">  }\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#24292E;--shiki-dark:#E1E4E8\">}\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F The team gains:\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F - Native TypeScript in dev (no ts-node)\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F - 25x faster installs\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F - Much faster tests\u003C\u002Fspan>\u003C\u002Fspan>\n\u003Cspan class=\"line\">\u003Cspan style=\"--shiki-light:#6A737D;--shiki-dark:#6A737D\">\u002F\u002F - Zero compatibility risk in production\u003C\u002Fspan>\u003C\u002Fspan>\u003C\u002Fcode>\u003C\u002Fpre>",[412],{"text":413,"type":72},"\u002F\u002F package.json — Bun for tooling, Node.js for deployment\n{\n  \"scripts\": {\n    \"dev\": \"bun --watch src\u002Findex.ts\",\n    \"test\": \"bun test\",\n    \"build\": \"bun build src\u002Findex.ts --outdir dist --target node\",\n    \"start\": \"node dist\u002Findex.js\"  \u002F\u002F production still on Node.js\n  }\n}\n\n\u002F\u002F The team gains:\n\u002F\u002F - Native TypeScript in dev (no ts-node)\n\u002F\u002F - 25x faster installs\n\u002F\u002F - Much faster tests\n\u002F\u002F - Zero compatibility risk in production",{"type":104,"attrs":415,"content":417},{"id":416,"level":36},"h_zmw9dcyd",[418],{"text":419,"type":72},"When to use Bun in production",{"type":167,"attrs":421,"content":423},{"id":422},"cmp_tzg3l35e",[424,435],{"type":172,"attrs":425,"content":428},{"id":426,"side":175,"title":427},"col_zpl33wwl","✅ Use Bun when",[429],{"type":66,"attrs":430,"content":432},{"id":431},"p_gqhrwh9i",[433],{"text":434,"type":72},"Greenfield project\nCLI tools — 8ms startup matters\nServerless \u002F edge — cold start is critical\nTypeScript is a priority\nSmall team, no legacy\nMicroservices without native addons\nDeveloper experience is a selection criterion",{"type":172,"attrs":436,"content":439},{"id":437,"side":187,"title":438},"col_8ta97dpr","⚠️ Be careful when",[440],{"type":66,"attrs":441,"content":443},{"id":442},"p_2zzb78bk",[444],{"text":445,"type":72},"Project with native addons (node-gyp)\nEcosystem with C++ bindings\nTeam unwilling to test compatibility\nEnterprise system requiring audit\nExotic database APIs\nObscure packages with V8-specific behavior",{"type":104,"attrs":447,"content":449},{"id":448,"level":36},"h_87mr7gff",[450],{"text":451,"type":72},"The bigger picture: Bun + Anthropic",{"type":66,"attrs":453,"content":455},{"id":454},"p_rl8r2iwo",[456],{"text":457,"type":72},"Anthropic's acquisition of Bun in December 2025 wasn't coincidental. Claude Code runs entirely on Bun — a runtime that needs fast startup, low memory footprint, and native TypeScript. Bun delivers all three.",{"type":66,"attrs":459,"content":461},{"id":460},"p_0k7dpdhv",[462],{"text":463,"type":72},"The project remains open-source under MIT license. What changed is access to resources — Anthropic has a direct incentive to keep Bun fast and stable because its own products depend on it.",{"type":129,"attrs":465,"content":467},{"id":466,"type":132,"title":9},"call_hycexcvr",[468],{"type":66,"attrs":469,"content":471},{"id":470},"p_vste3ez9",[472,474,478],{"text":473,"type":72},"Bun v1.2 shipped in January 2026 with the largest Node.js compatibility update to date — improvements to ",{"text":475,"type":72,"marks":476},"node:cluster",[477],{"type":236},{"text":479,"type":72},", Windows support and Worker Threads fixes. v1.3.11 in March 2026 focused on bundling and package manager performance.",{"type":481,"attrs":482},"summaryBox",{"id":483,"items":484,"title":493},"sum_dlhqz1mz",[485,486,487,488,489,490,491,492],"Bun uses JavaScriptCore (Safari) + Zig. The engine optimized for fast startup explains the benchmarks — it's not marketing magic.","One binary replaces: npm, ts-node, tsc, jest, nodemon, webpack\u002Fesbuild. That's the real differentiator, not raw speed.","Package install 25-30x faster than npm. For CI pipelines, the difference is transformative.","Native TypeScript with zero configuration. bun index.ts just works. Period.","95% Node.js compatibility in 2026. The remaining 5% is mainly native addons with C++ bindings.","For apps with databases, production throughput is similar to Node.js — the real gain is in startup, install speed and DX.","Safe strategy: Bun as dev tooling (install, test, watch) + Node.js in production until you're confident.","Acquired by Anthropic in December 2025. Claude Code runs on Bun.","What stays with you after reading this",{"type":66,"attrs":495,"content":497},{"id":496},"p_lgxfsou6",[498],{"text":499,"type":72},"Bun wasn't built to win benchmarks. It was built to eliminate the friction between having an idea and having a server running.",{"type":66,"attrs":501,"content":503},{"id":502},"p_tt5kdsqg",[504],{"text":505,"type":72},"In 2026, that friction was real — and Node.js had accumulated 15 years of external tools to compensate for it. Bun decided to solve it at the root.",{"type":507,"attrs":508},"promoBox",{"id":509,"title":510,"layout":511,"ctaHref":512,"eyebrow":513,"variant":514,"ctaLabel":515,"description":516},"promo_qhelh2x9","More on the modern JavaScript ecosystem","stacked","https:\u002F\u002Fblueprintblog.tech","Keep reading","default","Visit Blueprint Blog","Articles on Node.js, TypeScript, Hono.js and the modern JavaScript ecosystem — all with real code, no filler.",{"type":66,"attrs":518},{"id":519},"p_3zd4v3cq","Bun: The JavaScript Runtime That Replaced 15 Tools | Blueprint Blog","Complete Bun guide for 2026: JavaScriptCore, real benchmarks, package manager, bundler, test runner, Node.js compatibility and when to use it instead of Node.","2026-08-24T14:53:53.315534+00:00",[524,547,565,579],{"id":525,"slug":526,"title":527,"excerpt":528,"image":529,"featured":530,"groupId":531,"publishedAt":532,"readingTime":533,"views":48,"author":534,"category":535,"tags":536},"81f24e9a-fc6b-47d0-beb9-d00a6137ed99","framework-vs-sdk-who-calls-whom","Framework vs SDK: Who Calls Whom","Most developers memorize names, but few understand the mechanism. Here is the simple rule to tell a framework from an SDK and level up your debugging.","https:\u002F\u002Fmfgiomkkbihnlpfdxwrt.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fblog-assets\u002Fmedia\u002Ffeatured\u002F1787491947099-featured-ikba2e.jpg",true,"0ccb21eb-6459-40ed-8110-227836e9bb74","2026-08-23T13:15:25.439194+00:00",10,{"name":50,"avatar":9},{"slug":13,"name":14,"color":15},[537,538,541,544],{"slug":60,"name":61},{"slug":539,"name":540},"python","Python",{"slug":542,"name":543},"runtime","Runtime",{"slug":545,"name":546},"sdk","Sdk",{"id":548,"slug":549,"title":550,"excerpt":551,"image":552,"featured":44,"groupId":553,"publishedAt":554,"readingTime":555,"views":556,"author":557,"category":558,"tags":559},"c2d6b1ca-29bf-401f-8ab9-a1f828504d0b","microfrontends-with-angular-and-nx-what-nobody-tells-you","Microfrontends with Angular and Nx: what nobody tells you","Every tutorial teaches how to set up microfrontends in minutes, but few reveal the architectural chaos that emerges after months of production deploys.","https:\u002F\u002Fmfgiomkkbihnlpfdxwrt.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fblog-assets\u002Fmedia\u002Ffeatured\u002F1785206853570-featured-zoyhgn.webp","3368e1b2-b6de-4e94-a3d4-294fae8ade13","2026-08-03T01:42:48.969355+00:00",15,5,{"name":50,"avatar":9},{"slug":13,"name":14,"color":15},[560,563,564],{"slug":561,"name":562},"angular","Angular",{"slug":60,"name":61},{"slug":54,"name":55},{"id":566,"slug":567,"title":568,"excerpt":569,"image":570,"featured":44,"groupId":571,"publishedAt":572,"readingTime":573,"views":533,"author":574,"category":575,"tags":576},"36440333-311c-4081-92e6-030a04a38fed","astro-island-architecture-performance-and-where-the-framework-truly-fits","Astro: Island Architecture, Performance, and Where the Framework Truly Fits","Astro challenges the modern web status quo by prioritizing static HTML and isolating interactivity into independent, lightweight code islands.","https:\u002F\u002Fmfgiomkkbihnlpfdxwrt.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fblog-assets\u002Fmedia\u002Ffeatured\u002F1785721161920-featured-a5vzkb.webp","cb62459e-7ace-43d3-a545-661c5695e925","2026-08-03T01:00:45.280114+00:00",38,{"name":50,"avatar":9},{"slug":13,"name":14,"color":15},[577,578],{"slug":60,"name":61},{"slug":54,"name":55},{"id":580,"slug":581,"title":582,"excerpt":583,"image":584,"featured":44,"groupId":585,"publishedAt":586,"readingTime":587,"views":48,"author":588,"category":589,"tags":590},"633b6488-2a90-4632-86a5-9cff7ed52f08","javascript-event-loop-the-heart-of-non-blocking-concurrency-revisited-in-2025","JavaScript Event Loop: The Heart of Non-Blocking Concurrency — Revisited in 2025","The Event Loop is not just a simple loop, but a sophisticated coordination mechanism between Call Stack, queues, and runtime. Essential for JS concurrency, it enables thousands of asynchronous operations without blocking the UI. This guide explores its structure, differences between Node.js and browsers, common bugs, advanced techniques, and 2025 trends like Structured Concurrency and scheduler.yield().","https:\u002F\u002Fmfgiomkkbihnlpfdxwrt.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fblog-assets\u002Fmedia\u002Ffeatured\u002F1772847201637-featured-oreiro.jpeg","df6ca967-8130-4b2d-bcac-3532a150131e","2026-07-26T18:54:25.359533+00:00",6,{"name":50,"avatar":9},{"slug":13,"name":14,"color":15},[591,592],{"slug":60,"name":61},{"slug":57,"name":58},{"pt":594,"en":40},"bun-runtime-javascript-substitui-ferramentas"]