mrkeyoor.com_
Sat 26 Sept 17:20 UTC
Webevaluationupdated 26 Aug 2026

bun review

Bun is a JavaScript and TypeScript runtime that also handles packages, tests, bundling, and script execution from one executable. It solves the toolchain sprawl around Node projects, although compatibility with Node still has to be proved against the application you intend to run.

+47stars / 7d
Verdict

Our install of Bun's 194.8 MB source checkout failed in 9 seconds before any build or test result, so contributors should expect a native runtime project rather than the one-command release experience. Bun is a sensible trial for a new TypeScript service or a workspace whose full suite can run under both Bun and Node. Keep Node in the deployment plan until application-specific compatibility checks pass.

We ran it

Lab card: what happened when we ran bunScreenshot of bun (bun.com)
Install✗ · 9s
Build—
Repo19365 files~2,969,178 lines of source · 194.8 MB · 31 CI workflows · tests dir

Answers from our run

Does bun build from source?

The dependency install failed, and the project has no separate build step. We cloned commit b746c07 into a clean Debian container with 3 CPUs and no project-specific setup.

Who should not use bun?

Teams requiring exact Node.js behavior without a compatibility test phase: issue 40535 shows Bun 1.4.0 returning a relative path where Node v24.15.0 returns an absolute path for one node:fs case.

What are the alternatives to bun?

Node.js, Deno, pnpm. Our install of Bun's 194.

Setup2/5Release install is short; our source install failed in 9 seconds
Docs5/5Product guides and native contributor requirements are specific
Community5/5Pushed August 2026 with same-day issue discussion
Maturity4/5Bun 1.4 is broad, but Node behavior still has documented gaps

Discussed on

  1. hnZig → Rust porting guide723 points
  2. hnRewrite Bun in Rust has been merged708 points
  3. hnBun Rust rewrite: "codebase fails basic miri checks, allows for UB in safe rust"488 points
  4. hnBun v0.2.0133 points
  5. hnBun adds pnpm-style isolated installation mode114 points

Who it’s for

JavaScript teams prepared to run their own application and dependency tests under a second runtime.
Developers starting TypeScript services, command-line tools, or workspaces who want one executable for daily tasks.
Teams that can pin Bun versions and keep Node available while they verify a migration.
Contributors comfortable with Rust, native libraries, LLVM 21.1.8, and a large monorepo.

Who it’s NOT for

Teams requiring exact Node.js behavior without a compatibility test phase: issue 40535 shows Bun 1.4.0 returning a relative path where Node v24.15.0 returns an absolute path for one node:fs case.
Workspace test setups that depend on package-local environment files without checking the current behavior: issue 40544 reports bun --filter test missing .env.test under Bun 1.4.0.
Contributors expecting the repository to bootstrap through ordinary npm: our commit b746c07 install failed in 9 seconds, and the contributor guide requires an existing Bun binary plus native build tools.
Linux deployments below kernel 5.1 or x64 machines outside Bun's documented CPU requirements.
Compliance teams seeking a single-license binary with no linked-library review: Bun is MIT-licensed, while its license file lists statically linked LGPL and other components.

Setup reality

Our 194.8 MB checkout at commit b746c07 contained 19,365 files and about 2,969,178 source lines. In a fresh 3-CPU, 8 GB Debian sandbox, install failed with exit code 1 after 9 seconds. npm said it could not determine executable to run; the log tail gave no more specific cause. The supplied run records no build or test result.

Installing a released Bun binary needs no project account or hosted service. The README offers a shell script, npm, Homebrew, Windows, and an official Docker image. Private registries and the application itself may still need their own credentials and configuration.

Source development is a different job. The contributor guide requires an existing Bun release, a pinned Rust nightly, LLVM 21.1.8, and native system packages. Linux kernel 5.1 is the minimum, with 5.6 or newer recommended, and x64 hosts have separate CPU requirements.

Bun 1.4 puts five development jobs in one executable

Bun 1.4 runs JavaScript and TypeScript, installs packages, executes scripts, runs tests, and bundles applications. That single command surface is the practical appeal. A new service can use TypeScript directly, start an HTTP server, manage a workspace, and run Jest-style tests without choosing a separate tool for each job. Bun also includes APIs for SQLite, PostgreSQL, Redis, S3, WebSockets, shell commands, and file handling. The savings are real when those built-ins match the application.

The same breadth raises the cost of choosing Bun as a platform. Code written against Bun.serve, Bun.sql, or Bun.s3 carries a runtime dependency that standard web APIs do not. A team can limit that exposure by keeping Bun-specific calls in small modules. If the only complaint is package installation, pnpm solves that narrower problem while leaving Node in place. Bun makes more sense when the runtime, package manager, test runner, and bundler all earn their place.

Bun 1.4.0 still differs from Node v24.15.0 at observable edges

An open Windows report compares Bun 1.4.0 with Node v24.15.0 for recursive node:fs directory creation. With a relative input, the reporter found that Bun returned a relative path while Node returned the absolute first path created. That is a small API edge, yet code can persist or join the returned value. It is exactly why a stated drop-in goal cannot replace an application test suite. Compatibility is a property of the code and dependencies you use.

Workspace behavior needs the same skepticism. Issue 40544 reports that bun --filter test did not load a package's .env.test file under Bun 1.4.0, while changing the working directory did. The report was opened and discussed on August 26, 2026, so it is current activity rather than an old compatibility anecdote. Teams using filtered monorepo commands should test environment loading, lifecycle scripts, lockfile changes, and native packages before swapping their CI runner.

What happened when we ran it

Our sandbox cloned commit b746c07 and measured 19,365 files, about 2,969,178 source lines, and 194.8 MB checked out. The unprivileged Debian container had 3 CPUs, 8 GB of RAM, Node 22, and no secrets. Install failed with exit code 1 after 9 seconds. The final npm message said it could not determine executable to run. That line does not identify a missing package, a broken script, or any other cause, so assigning one would be guesswork.

The failed install stopped the exercise before a build or test result was recorded. Our measurement setup found 31 CI workflow files, a tests directory, and monorepo workspaces, but no Dockerfile in the checkout. The README does document an official oven/bun image for users. Those facts describe different things: a published container is available, while the measured source tree did not include a Dockerfile. The 9-second failure describes commit b746c07 in our lab, not the released binary installer.

Source work requires LLVM 21.1.8 and an existing Bun binary

Bun's product README makes release installation look straightforward, with shell, npm, Homebrew, Windows, and Docker routes. The contributor guide is much more demanding. It requires a release build of Bun before compiling the checkout because Bun handles code generation and bundling during its own build. It also pins a Rust nightly and requires LLVM 21.1.8, along with CMake, Go, Ninja, Ruby, and other native packages on Debian-based systems. Nix is documented as another route.

Platform requirements matter even for the published executable. Linux kernel 5.1 is the stated minimum, and the README recommends 5.6 or later. Bun supports Linux and macOS on x64 and arm64, plus Windows on both architectures. x64 users have a separate CPU requirements page for illegal-instruction errors. A release install may be one command, but deployment approval should still check the kernel, processor, native dependencies, and every production startup path.

The August 2026 activity is healthy and noisy

GitHub recorded 95,703 stars, 8,523 open issues and pull requests combined, and a last push on August 26, 2026. Bun v1.4.0 was released six days earlier on August 20. Fresh issue updates on August 26 covered filesystem compatibility, filtered workspace tests, and an older S3 presigning request. The combined open count mixes issues with pull requests. It shows how much discussion and change an adopter may have to search when a package behaves differently.

Canary builds are published from every commit to the main branch. That gives developers a quick way to check whether a fix has landed, while production should stay on a pinned release. The release pace and same-day issue activity do not suggest neglect. They suggest that migration notes, lockfiles, runtime versions, and rollback paths deserve attention. A fast-moving runtime can fix incompatibilities quickly and can also change underneath loose version policies.

MIT licensing includes linked components worth reviewing

Bun itself is MIT-licensed, but the repository license is deliberately longer than one sentence. The binary statically links JavaScriptCore and WebKit code under LGPL-2, and the file explains the relinking requirement. It also lists components under Apache-2.0, BSD, zlib, LGPL v2.1, and other terms. This is ordinary systems-software territory, though a company shipping Bun inside a product should send the actual license file through its normal compliance process.

The measured checkout had 31 CI workflows and a tests directory, evidence of a serious engineering operation, yet our own install still ended before those tests could run. That contrast is the useful conclusion. Try Bun on a bounded service, run the complete application suite under Bun and Node, then compare production behavior on the real operating system. If the suite passes and the built-in tools replace code you maintain today, Bun earns adoption. If compatibility work dominates, Node remains the cheaper choice.

Alternatives

ProjectWhat it isPick it when
Node.js gh↗The established JavaScript runtime and the compatibility target Bun is trying to match.pick this instead when exact Node behavior, native-addon support, and conservative runtime change matter most.
Deno gh↗A JavaScript and TypeScript runtime with built-in tooling and explicit permission controls.pick this instead when runtime permissions and Deno's web-oriented design fit the application better.
pnpm gh↗A workspace-focused package manager that keeps Node as the runtime.pick this instead when dependency installation and monorepo management are the problems you need to solve.

What people are saying

  1. [hackernews] Bun 1.4
  2. [lobsters] Bun 1.4 Rust rewrite is not looking good
  3. [github-trending] oven-sh/bun

Sources

  1. Bun README
  2. Bun contributor guide at commit b746c07
  3. Bun license details
  4. Bun repository facts
  5. Bun v1.4.0 release
  6. Bun issue 40535: recursive mkdir return value
  7. Bun issue 40544: filtered test environment loading

More web reviews

react-native-web · vega-app · actix-web · FxEmbed · cloudflare-turnstile-examples · react-spring · the whole board →