Bun.js focuses on performance, developer experience, and compatibility with the JavaScript ecosystem. ## HTTP Requests ```ts // http.ts export default { port: 3000, fetch(request: Request) { return new Response("Hello World"); }, }; // bun ./http.ts ``` | Requests per second | OS | CPU | Bun version | | ---------------------------------------------------------------------- | ----- | ------------------------------ | ----------- | | [260,000](https://twitter.com/jarredsumner/status/1512040623200616449) | macOS | Apple Silicon M1 Max | 0.0.76 | | [160,000](https://twitter.com/jarredsumner/status/1511988933587976192) | Linux | AMD Ryzen 5 3600 6-Core 2.2ghz | 0.0.76 | {% details summary="See benchmark details" %} Measured with [`http_load_test`](https://github.com/uNetworking/uSockets/blob/master/examples/http_load_test.c) by running: ```bash $ ./http_load_test 20 127.0.0.1 3000 ``` {% /details %} ## File System `cat` clone that runs [2x faster than GNU cat](https://twitter.com/jarredsumner/status/1511707890708586496) for large files on Linux ```js // cat.js import { resolve } from "path"; import { write, stdout, file, argv } from "bun"; const path = resolve(argv.at(-1)); await write( // stdout is a Blob stdout, // file(path) returns a Blob - https://developer.mozilla.org/en-US/docs/Web/API/Blob file(path), ); ``` Run this with `bun cat.js /path/to/big/file`. ## Reading from standard input ```ts // As of Bun v0.3.0, console is an AsyncIterable for await (const line of console) { // line of text from stdin console.log(line); } ``` ## React SSR ```js import { renderToReadableStream } from "react-dom/server"; const dt = new Intl.DateTimeFormat(); export default { port: 3000, async fetch(request: Request) { return new Response( await renderToReadableStream(
The date is {dt.format(new Date())}
, ), ); }, }; ``` Write to stdout with `console.write`: ```js // no trailing newline // works with strings and typed arrays console.write("Hello World!"); ``` There are some more examples in the [examples](./examples) folder. PRs adding more examples are very welcome! ## Fast paths for Web APIs Bun.js has fast paths for common use cases that make Web APIs live up to the performance demands of servers and CLIs. `Bun.file(path)` returns a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) that represents a lazily-loaded file. When you pass a file blob to `Bun.write`, Bun automatically uses a faster system call: ```js const blob = Bun.file("input.txt"); await Bun.write("output.txt", blob); ``` On Linux, this uses the [`copy_file_range`](https://man7.org/linux/man-pages/man2/copy_file_range.2.html) syscall and on macOS, this becomes `clonefile` (or [`fcopyfile`](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/copyfile.3.html)). `Bun.write` also supports [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects. It automatically converts to a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob). ```js // Eventually, this will stream the response to disk but today it buffers await Bun.write("index.html", await fetch("https://example.com")); ```