
ALT Line chart titled "51.4M Monthly Bun downloads." Downloads grow from 7.2M in October 2025 to 51.4M in October 2026, climbing fastest in the last few months. Four events are marked: Bun 1.3 in October 2025, Joined Anthropic in December, Rust rewrite in May, and Bun 1.4 in August. A label reads "+57% since 1.4."

ALT The Bun logo and the heading "$ bun test: Improved Vitest compatibility", above a Vitest test file with three lines highlighted and numbered: // @vitest-environment jsdom import { expect, test, vi } from "vitest"; import { track } from "./analytics"; import { toast } from "./toast"; vi.mock("./analytics"); test("toast hides after 3s", async () => { vi.useFakeTimers(); toast("Saved!"); expect(track).toHaveBeenCalled(); await vi.advanceTimersByTimeAsync(3000); expect(document.body.innerHTML).toBe(""); }); The highlighted lines: 1. DOM environments: the "@vitest-environment jsdom" comment 2. Automocks: vi.mock("./analytics") with no factory 3. Async fake timers: await vi.advanceTimersByTimeAsync(3000)
![Graphic for bun fmt and bun lint --staged. Format and lint only what you're committing. One line in a git hook, nothing to install. Step 1, create this file: .git/hooks/pre-commit, a plain text file made executable with chmod +x, containing "#!/bin/sh" and "bun fmt --staged && bun lint --staged". Step 2, commit: a terminal runs git commit -m "add cart". bun fmt prints "src/cart.ts" and "Formatted 1 file, 0 unchanged [8.10ms]", with a sticker reading "re-staged". bun lint then prints a code frame pointing at a debugger statement in src/cart.ts line 2, "error: Unexpected 'debugger' statement. no-debugger", "1 problem (1 error, 0 warnings)" and "Linted 1 file [7.94ms]". A stamp reads "commit blocked".](https://pbs.twimg.com/media/HUrPzjragAAAruk.jpg?name=small&format=webp)
ALT Graphic for bun fmt and bun lint --staged. Format and lint only what you're committing. One line in a git hook, nothing to install. Step 1, create this file: .git/hooks/pre-commit, a plain text file made executable with chmod +x, containing "#!/bin/sh" and "bun fmt --staged && bun lint --staged". Step 2, commit: a terminal runs git commit -m "add cart". bun fmt prints "src/cart.ts" and "Formatted 1 file, 0 unchanged [8.10ms]", with a sticker reading "re-staged". bun lint then prints a code frame pointing at a debugger statement in src/cart.ts line 2, "error: Unexpected 'debugger' statement. no-debugger", "1 problem (1 error, 0 warnings)" and "Linted 1 file [7.94ms]". A stamp reads "commit blocked".

ALT Poster for bun lint, an ESLint-compatible linter built into Bun. Headline: 26x faster than ESLint. Table of lint times on real projects, each with its own config and plugins, bun lint vs ESLint: shadcn/ui 2.1 s vs 90.4 s (43x), chakra-ui 0.59 s vs 22.6 s (38x), vscode 15.8 s vs 404 s (26x), mastodon 6.6 s vs 100 s (15x), playwright 4.9 s vs 53.4 s (11x). On vscode, 9,823 of 9,826 messages are identical. 99.6% of ESLint's tests pass. 99.8% of oxlint's tests pass. 2x faster than oxlint with 3x less memory. 1,021 rules built in, including type-aware rules.







