Training Example: Bun – Review the Data, Give Your Score & Compare to the Real AI Evaluation

Industry Context — Common BS Fingerprints in Software, SaaS & Tech Products
Generic Claims: the all-in-one platform, trusted by thousands of companies, increase productivity by X percent, save hours every week…
Red Flags: AI claims without explaining what the AI does, customer logos without case study or testimonial evidence, no live product access or demo, SOC 2 claims without audit period or report availability…
Semantic Drift Patterns: homepage claims AI-powered but product is rules-based, claims enterprise-grade but pricing page shows startup tiers only, homepage shows Fortune 500 logos but case studies are small businesses, claims all-in-one but integration page shows critical missing pieces…
Proof Expectations: live product demo or free trial access, specific feature documentation with screenshots, verified customer logos with published case studies, third-party review scores on G2, Capterra, or TrustRadius…

Bun

(https://bun.sh) 📸 Data Snapshot: June 20, 2026

Analyze the raw signals below. How would a machine score this business’s credibility?

Here are the exact signals captured from up to six pages of the site — the same raw inputs the evaluation engine analyzed. They are grouped by signal type so you can weigh each the way the machine does.

🏗️ Semantic Structure — heading hierarchy & page identity (Info Density · Commodity Fingerprint)
HOMEPAGE Bun — A fast all-in-one JavaScript runtime (https://bun.sh)
Title

Bun — A fast all-in-one JavaScript runtime

Meta

Bundle, install, and run JavaScript & TypeScript — all in Bun. Bun is a new JavaScript runtime with a native bundler, transpiler, task runner, and npm client built-in.

H1 Bun is a fast JavaScriptall-in-one toolkit|
H2 Bundling 10,000 React components
H2 Four tools, one toolkit
H2 Who uses Bun?
H2 What's different about Bun?
H2 Everything you need to build & ship
H2 Bun is a JavaScript runtime.
H2 Bun works with Next.js
H2 Full speed full-stack
H2 Bun is an npm-compatible package manager.
H2 Bun is a test runner that makes the rest look like test walkers.
H2 The APIs you need. Baked in.
H2 Learn more
H2 Developers love Bun.
H3 JavaScript Runtime
H3 Package Manager
H3 Test Runner
H3 Bundler
H3 Claude Code uses Bun
H3 Railway Functions powered by Bun
H3 Midjourney uses Bun
H3 Builtin Core Features
H3 Builtin APIs
H3 Builtin Tooling
H3 Builtin Utilities
H3 HTTP & WebSockets
H3 Databases
H3 File System
H3 Testing
H3 Build & Deploy
H3 TypeScript & DX
H3 Security
H3 System Integration
H3 Utilities
H3 Lee Robinson
H3 Develop and ship frontend apps
H3 Documentation
H3 API Reference
H4 Start a dev server
H4 Hot Module Replacement
H4 Build for production
HEADING_REPEATED_BODY_FOOTER Test runner – Bun (https://bun.sh/docs/cli/test/)
Title

Test runner – Bun

Meta

Bun's fast, built-in, Jest-compatible test runner with TypeScript support, lifecycle hooks, mocking, and watch mode

H1 Test runner
H2 Documentation Index
H2 On this page
H2 ​Run tests
H2 ​CI/CD integration
H2 ​Timeouts
H2 ​Concurrent test execution
H2 ​Retry failed tests
H2 ​Rerun tests
H2 ​Randomize test execution order
H2 ​Bail out with –bail
H2 ​Watch mode
H2 ​Lifecycle hooks
H2 ​Mocks
H2 ​Snapshot testing
H2 ​UI & DOM testing
H2 ​Performance
H2 ​AI Agent Integration
H2 ​Examples
H3 Getting Started
H3 Test Execution
H3 Test Features
H3 Specialized Testing
H3 Reporting
H3 ​GitHub Actions
H3 ​JUnit XML reports (GitLab, etc.)
H3 ​–concurrent flag
H3 ​–max-concurrency flag
H3 ​test.concurrent
H3 ​test.serial
H3 ​Reproducible random order with –seed
H3 ​Environment Variables
H3 ​Behavior
H3 ​Execution Control
H3 ​Test Filtering
H3 ​Reporting
H3 ​Coverage
H3 ​Snapshots
H4 ​How to install bun in a GitHub Actions workflow
HEADING_REPEATED_BODY_FOOTER bun install – Bun (https://bun.sh/docs/cli/install/)
Title

bun install – Bun

Meta

Install packages with Bun's fast package manager

H1 bun install
H2 Documentation Index
H2 On this page
H2 ​Basic Usage
H2 ​Logging
H2 ​Lifecycle scripts
H2 ​Workspaces
H2 ​Installing dependencies for specific packages
H2 ​Overrides and resolutions
H2 ​Global packages
H2 ​Production mode
H2 ​Omitting dependencies
H2 ​Dry run
H2 ​Non-npm dependencies
H2 ​Installation strategies
H2 ​Minimum release age
H2 ​Configuration
H2 ​CI/CD
H2 ​Platform-specific dependencies?
H2 ​Peer dependencies?
H2 ​Lockfile
H2 ​Cache
H2 ​Platform-specific backends
H2 ​npm registry metadata
H2 ​pnpm migration
H2 ​CLI Usage
H3 Core Commands
H3 Publishing & Analysis
H3 Workspace Management
H3 Advanced Configuration
H3 ​Hoisted installs
H3 ​Isolated installs
H3 ​Default strategy
H3 ​Configuring bun install with bunfig.toml
H3 ​Configuring with environment variables
H3 ​–cpu and –os flags
H3 ​Lockfile Migration
H3 ​Workspace Configuration
H3 ​Catalog Dependencies
H3 ​Configuration Migration
H3 ​Requirements
H3 ​General Configuration
H3 ​Dependency Scope & Management
H3 ​Dependency Type & Versioning
H3 ​Lockfile Control
H3 ​Network & Registry Settings
H3 ​Installation Process Control
H3 ​Caching Options
H3 ​Output & Logging
H3 ​Security & Integrity
H3 ​Concurrency & Performance
H3 ​Lifecycle Script Management
H3 ​Help Information
HEADING_REPEATED_BODY_FOOTER Bundler – Bun (https://bun.sh/docs/bundler/)
Title

Bundler – Bun

Meta

Bun's fast native bundler for JavaScript, TypeScript, JSX, and more

H1 Bundler
H2 Documentation Index
H2 On this page
H2 ​Why bundle?
H2 ​Basic example
H2 ​Watch mode
H2 ​Content types
H2 ​API
H2 browser
H2 bun
H2 node
H2 ​Outputs
H2 ​Bytecode
H2 ​Executables
H2 ​Logs and errors
H2 ​Reference
H2 ​CLI Usage
H3 Core
H3 Development Server
H3 Asset Processing
H3 Single File Executable
H3 Extensions
H3 Optimization
H3 Migration
H3 ​At a Glance
H3 ​Assets
H3 ​Plugins
H3 ​entrypoints
H3 ​files
H3 ​outdir
H3 ​target
H3 ​format
H3 ​jsx
H3 ​splitting
H3 ​plugins
H3 ​env
H3 ​sourcemap
H3 ​minify
H3 ​external
H3 ​packages
H3 ​naming
H3 ​root
H3 ​publicPath
H3 ​define
H3 ​loader
H3 ​banner
H3 ​footer
H3 ​drop
H3 ​features
H3 ​optimizeImports
H3 ​metafile
H3 ​General Configuration
H3 ​Output & File Handling
H3 ​File Naming
H3 ​Bundling Options
H3 ​Minification & Optimization
H3 ​Development Features
H3 ​Standalone Executables
H3 ​Windows Executable Details
H3 ​Experimental & App Building
H4 ​Bundle entirely from memory
H4 ​Override files on disk
H4 ​Mix disk and virtual files
H4 ​format: “esm” – ES Module
H4 ​format: “cjs” – CommonJS
H4 ​format: “iife” – IIFE
H4 ​env: “inline”
H4 ​env: “PUBLIC_*” (prefix)
H4 ​env: “disable”
H4 ​Markdown metafile
H4 ​metafile option formats
📝 The Narrative — clean text per page (Info Density · Semantic Coherence)
HOMEPAGE (https://bun.sh) Bun — A fast all-in-one JavaScript runtime
Bun v1.3.14 is here! →
[H1] Bun is a fast JavaScriptall-in-one toolkit|
Bun is a fast, incrementally adoptable all-in-one JavaScript, TypeScript & JSX toolkit. Use individual tools like bun test or bun install in Node.js projects, or adopt the complete stack with a fast JavaScript runtime, bundler, test runner, and package manager built in. Bun aims for 100% Node.js compatibility.Install Bun v1.3.14Linux & macOSWindowsView install scriptcurl -fsSL https://bun.sh/install | bashpowershell -c "irm bun.sh/install.ps1 | iex"USED BY
[IMG: Lovable logo]
[IMG: CodeRabbit logo]
[IMG: Replit logo]
[IMG: Cursor logo]
BundlerExpressPostgresWebSockets
[H2] Bundling 10,000 React components
Build time in milliseconds (Linux x64, Hetzner)Bunv1.3.0269.1 msRolldownv1.0.0-beta.42494.9 msesbuildv0.25.10571.9 msFarmv1.0.51,608 msRspackv1.5.82,137 msView benchmark →
864 chars
SUB-PAGE (https://bun.sh/docs/cli/test/) Test runner – Bun
Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed with the Bun runtime, and support the following features.
TypeScript and JSX
Lifecycle hooks
Snapshot testing
UI & DOM testing
Watch mode with --watch
Script pre-loading with --preload
Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see this tracking
issue.
[H2] ​Run tests
terminalbun test
Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to Writing tests for full documentation.
[IMG: https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35b]
math.test.tsimport { expect, test } from "bun:test";
test("2 + 2", () => {
expect(2 + 2).toBe(4);
});
The runner recursively searches the working directory for files that match the following patterns:
*.test.{js|jsx|ts|tsx}
*_test.{js|jsx|ts|tsx}
*.spec.{js|jsx|ts|tsx}
*_spec.{js|jsx|ts|tsx}
You can filter the set of test files to run by passing additional positional arguments to bun test. Any test file with a path that matches one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
terminalbun test <filter> <filter> ...
To filter by test name, use the -t/--test-name-pattern flag.
terminal# run all tests or test suites with "addition" in the name
bun test --test-name-pattern addition
To run a specific file in the test runner, make sure the path starts with ./ or / to distinguish it from a filter name.
terminalbun test ./test/specific-file.test.ts
The test runner runs all tests in a single process. It loads all --preload scripts (see Lifecycle for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
[H2] ​CI/CD integration
bun test supports a variety of CI/CD integrations.
[H3] ​GitHub Actions
bun test automatically detects if it’s running inside GitHub Actions and will emit GitHub Actions annotations to the console directly.
No configuration is needed, other than installing bun in the workflow and running bun test.
[H4] ​How to install bun in a GitHub Actions workflow
To use bun test in a GitHub Actions workflow, add the following step:
.github/workflows/test.ymljobs:
build:
name: build-app
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies # (assuming your project has dependencies)
run: bun install # You can use npm/yarn/pnpm instead if you prefer
- name: Run tests
run: bun test
From there, you’ll get GitHub Actions annotations.
[H3] ​JUnit XML reports (GitLab, etc.)
To use bun test with a JUnit XML reporter, you can use the --reporter=junit in combination with --reporter-outfile.
terminalbun test --reporter=junit --reporter-outfile=./bun.xml
This will continue to output to stdout/stderr as usual, and also write a JUnit
XML report to the given path at the very end of the test run.
JUnit XML is a popular format for reporting test results in CI/CD pipelines.
[H2] ​Timeouts
Use the --timeout flag to specify a per-test timeout in milliseconds. If a test times out, it will be marked as failed. The default value is 5000.
terminal# default value is 5000
bun test --timeout 20
[H2] ​Concurrent test execution
By default, Bun runs all tests sequentially within each test file. You can enable concurrent execution to run async tests in parallel, significantly speeding up test suites with independent tests.
[H3] ​--concurrent flag
Use the --concurrent flag to run all tests concurrently within their respective files:
terminalbun test --concurrent
When this flag is enabled, all tests will run in parallel unless explicitly marked with test.serial.
[H3] ​--max-concurrency flag
Control the maximum number of tests running simultaneously with the --max-concurrency flag:
terminal# Limit to 4 concurrent tests
bun test --concurrent --max-concurrency 4
# Default: 20
bun test --concurrent
This helps prevent resource exhaustion when running many concurrent tests. The default value is 20.
[H3] ​test.concurrent
Mark individual tests to run concurrently, even when the --concurrent flag is not used:
[IMG: https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35b]
math.test.tsimport { test, expect } from "bun:test";
// These tests run in parallel with each other
test.concurrent("concurrent test 1", async () => {
await
4617 chars
SUB-PAGE (https://bun.sh/docs/cli/install/) bun install – Bun
[H2] ​Basic Usage
terminalbun install react
bun install react@19.1.1 # specific version
bun install react@latest # specific tag
The bun CLI contains a Node.js-compatible package manager designed to be a dramatically faster replacement for npm, yarn, and pnpm. It’s a standalone tool that will work in pre-existing Node.js projects; if your project has a package.json, bun install can help you speed up your workflow.
⚡️ 25x faster — Switch from npm install to bun install in any Node.js project to make your installations up to 25x faster.
[IMG: Bun installation speed
comparison]
To install all dependencies of a project:
terminalbun install
Running bun install will:
Install all dependencies, devDependencies, and optionalDependencies. Bun will install peerDependencies by default.
Run your project’s {pre|post}install and {pre|post}prepare scripts at the appropriate time. For security reasons Bun does not execute lifecycle scripts of installed dependencies.
Write a bun.lock lockfile to the project root.
[H2] ​Logging
To modify logging verbosity:
terminalbun install --verbose # debug logging
bun install --silent # no logging
[H2] ​Lifecycle scripts
Unlike other npm clients, Bun does not execute arbitrary lifecycle scripts like postinstall for installed dependencies. Executing arbitrary scripts represents a potential security risk.
To tell Bun to allow lifecycle scripts for a particular package, add the package to trustedDependencies in your package.json.
package.json{
"name": "my-app",
"version": "1.0.0",
"trustedDependencies": ["my-trusted-package"]
}
Then re-install the package. Bun will read this field and run lifecycle scripts for my-trusted-package.
Lifecycle scripts will run in parallel during installation. To adjust the maximum number of concurrent scripts, use the --concurrent-scripts flag. The default is two times the reported cpu count or GOMAXPROCS.
terminalbun install --concurrent-scripts 5
Bun automatically optimizes postinstall scripts for popular packages (like esbuild, sharp, etc.) by determining which scripts need to run. To disable these optimizations:
terminalBUN_FEATURE_FLAG_DISABLE_NATIVE_DEPENDENCY_LINKER=1 bun install
BUN_FEATURE_FLAG_DISABLE_IGNORE_SCRIPTS=1 bun install
[H2] ​Workspaces
Bun supports "workspaces" in package.json. For complete documentation refer to Package manager > Workspaces.
package.json{
"name": "my-app",
"version": "1.0.0",
"workspaces": ["packages/*"],
"dependencies": {
"preact": "^10.5.13"
}
}
[H2] ​Installing dependencies for specific packages
In a monorepo, you can install the dependencies for a subset of packages using the --filter flag.
terminal# Install dependencies for all workspaces except `pkg-c`
bun install --filter '!pkg-c'
# Install dependencies for only `pkg-a` in `./packages/pkg-a`
bun install --filter './packages/pkg-a'
For more information on filtering with bun install, refer to Package Manager > Filtering
[H2] ​Overrides and resolutions
Bun supports npm’s "overrides" and Yarn’s "resolutions" in package.json. These are mechanisms for specifying a version range for metadependencies—the dependencies of your dependencies. Refer to Package manager > Overrides and resolutions for complete documentation.
package.json{
"name": "my-app",
"dependencies": {
"foo": "^2.0.0"
},
"overrides": {
"bar": "~4.4.0"
}
}
[H2] ​Global packages
To install a package globally, use the -g/--global flag. Typically this is used for installing command-line tools.
terminalbun install --global cowsay # or `bun install -g cowsay`
cowsay "Bun!"
______
< Bun! >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
[H2] ​Production mode
To install in production mode (i.e. without devDependencies or optionalDependencies):
terminalbun install --production
For reproducible installs, use --frozen-lockfile. This will install the exact versions of each package specified in the lockfile. If your package.json disagrees with bun.lock, Bun will exit with an error. The lockfile will not be updated.
terminalbun install --frozen-lockfile
For more information on Bun’s lockfile bun.lock, refer to Package manager > Lockfile.
[H2] ​Omitting dependencies
To omit dev, peer, or optional dependencies use the --omit flag.
terminal# Exclude "devDependencies" from the installation. This will apply to the
# root package and workspaces if they exist. Transitive dependencies will
# not have "devDependencies".
bun install --omit dev
# Install only dependencies from "dependencies"
bun install --omit=dev --omit=peer --omit=optional
[H2] ​Dry run
To perform a dry run (i.e. don’t actually install anything):
terminalbun install --dry-run
[H2] ​Non-npm dependencies
Bun supports installing dependencies from Git, GitHub, and local or remotely-hosted tarballs. For complete documentation refer to Package manager > Git, GitHub, and tarball dependencies.
package.json{
"dependencies": {
"dayjs": "git+https://github.com/iamkun/dayjs.git",
"lodash": "git+ssh://github.com/lodash/lodash.git#4.17.21",
"moment": "git@github.com:moment/moment.git",
"zod": "github:colinhacks/zod",
"react": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
"bun-types": "npm:@types/bun"
}
}
[H2] ​Installation strategies
Bun supports two package installation strategies that determine how dependencies are organized in node_modules:
[H3] ​Hoisted installs
The traditional npm/Yarn approach that flattens dependencies into a shared node_modules directory:
terminalbun install --linker hoisted
[H3] ​Isolated installs
A pnpm-like approach that creates strict dependency isolation to prevent phantom dependencies:
terminalbun install --linker isolated
Isolated installs create a central package store in node_modules/.bun/ with symlinks in the top-level node_modules. This ensures packages can only access their declared dependencies.
[H3] ​Default strategy
The default linker strategy depends on whether you’re starting fresh or have an existing project:
New workspaces/monorepos: isolated (prevents phantom dependencies)
New single-package projects: hoisted (traditional npm behavior)
Existing projects (made pre-v1.3.2): hoisted (preserves backward compatibility)
The default is controlled by a configVersion field in your lockfile. For a detailed explanation, see Package manager > Isolated installs.
[H2] ​Minimum release age
To protect against supply chain attacks where malicious packages are quickly published, you can configure a minimum age requirement for npm packages. Package versions published more recently than the specified threshold (in seconds) will be filtered out during installation.
terminal# Only install package versions published at least 3 days ago
bun add @types/bun --minimum-release-age 259200 # seconds
You can also configure this in bunfig.toml:
bunfig.toml[install]
# Only install package versions published at least 3 days ago
minimumReleaseAge = 259200 # seconds
# Exclude trusted packages from the age gate
minimumReleaseAgeExcludes = ["@types/node", "typescript"]
When the minimum age filter is active:
Only affects new package resolution - existing packages in bun.lock remain unchanged
All dependencies (direct and transitive) are filtered to meet the age requirement when being resolved
When versions are blocked by the age gate, a stability check detects rapid bugfix patterns
If multiple versions were published close together just outside your age gate, it extends the filter to skip those potentially unstable versions and selects an older, more mature version
Searches up to 7 days after the age gate, however if still finding rapid releases it ignores stability check
Exact version requests (like package@1.1.1) still respect the age gate but bypass the stability check
Versions without a time field are treated as passing the age check (npm registry should always provide timestamps)
For more advanced security scanning, including integration with services & custom filtering, see Package manager > Security Scanner API.
[H2] ​Configuration
[H3] ​Configuring bun install with bunfig.toml
bunfig.toml is searched for in the following paths on bun install, bun remove, and bun add:
$XDG_CONFIG_HOME/.bunfig.toml or $HOME/.bunfig.toml
./bunfig.toml
If both are found, the results are merged together.
Configuring with bunfig.toml is optional. Bun tries to be zero configuration in general, but that’s not always possible. The default behavior of bun install can be configured in bunfig.toml. The default values are shown below.
bunfig.toml[install]
# whether to install optionalDependencies
optional = true
# whether to install devDependencies
dev = true
# whether to install peerDependencies
peer = true
# equivalent to `--production` flag
production = false
# equivalent to `--save-text-lockfile` flag
saveTextLockfile = false
# equivalent to `--frozen-lockfile` flag
frozenLockfile = false
# equivalent to `--dry-run` flag
dryRun = false
# equivalent to `--concurrent-scripts` flag
concurrentScripts = 16 # (cpu count or GOMAXPROCS) x2
# installation strategy: "hoisted" or "isolated"
# default depends on lockfile configVersion and workspaces:
# - configVersion = 1: "isolated" if using workspaces, otherwise "hoisted"
# - configVersion = 0: "hoisted"
linker = "hoisted"
# minimum age config
minimumReleaseAge = 259200 # seconds
minimumReleaseAgeExcludes = ["@types/node", "typescript"]
[H3] ​Configuring with environment variables
Environment variables have a higher priority than bunfig.toml.
NameDescriptionBUN_CONFIG_REGISTRYSet an npm registry (default: https://registry.npmjs.org)BUN_CONFIG_TOKENSet an auth token (currently does nothing)BUN_CONFIG_YARN_LOCKFILESave a Yarn v1-style yarn.lockBUN_CONFIG_LINK_NATIVE_BINSPoint bin in package.json to a platform-specific dependencyBUN_CONFIG_SKIP_SAVE_LOCKFILEDon’t save a lockfileBUN_CONFIG_SKIP_LOAD_LOCKFILEDon’t load a lockfileBUN_CONFIG_SKIP_INSTALL_PACKAGESDon’t install any packages
Bun always tries to use the fastest available installation method for the target platform. On macOS, that’s clonefile and on Linux, that’s hardlink. You can change which installation method is used with the --backend flag. When unavailable or on error, clonefile and hardlink fallsback to a platform-specific implementation of copying files.
Bun stores installed packages from npm in ~/.bun/install/cache/${name}@${version}. Note that if the semver version has a build or a pre tag, it is replaced with a hash of that value instead. This is to reduce the chances of errors from long file paths, but unfortunately complicates figuring out where a package was installed on disk.
When the node_modules folder exists, before installing, Bun checks if the "name" and "version" in package/package.json in the expected node_modules folder matches the expected name and version. This is how it determines whether it should install. It uses a custom JSON parser which stops parsing as soon as it finds "name" and "version".
When a bun.lock doesn’t exist or package.json has changed dependencies, tarballs are downloaded & extracted eagerly while resolving.
When a bun.lock exists and package.json hasn’t changed, Bun downloads missing dependencies lazily. If the package with a matching name & version already exists in the expected location within node_modules, Bun won’t attempt to download the tarball.
[H2] ​CI/CD
Use the official oven-sh/setup-bun action to install bun in a GitHub Actions pipeline:
.github/workflows/release.ymlname: bun-types
jobs:
build:
name: build-app
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun install
- name: Build app
run: bun run build
For CI/CD environments that want to enforce reproducible builds, use bun ci to fail the build if the package.json is out of sync with the lockfile:
terminalbun ci
This is equivalent to bun install --frozen-lockfile. It installs exact versions from bun.lock and fails if package.json doesn’t match the lockfile. To use bun ci or bun install --frozen-lockfile, you must commit bun.lock to version control.
And instead of running bun install, run bun ci.
.github/workflows/release.ymlname: bun-types
jobs:
build:
name: build-app
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v4
- name: Install bun
uses: oven-sh/setup-bun@v2
- name: Install dependencies
run: bun ci
- name: Build app
run: bun run build
[H2] ​Platform-specific dependencies?
bun stores normalized cpu and os values from npm in the lockfile, along with the resolved packages. It skips downloading, extracting, and installing packages disabled for the current target at runtime. This means the lockfile won’t change between platforms/architectures even if the packages ultimately installed do change.
[H3] ​--cpu and --os flags
You can override the target platform for package selection:
bun install --cpu=x64 --os=linux
This installs packages for the specified platform instead of the current system. Useful for cross-platform builds or when preparing deployments for different environments.
Accepted values for --cpu: arm64, x64, ia32, ppc64, s390x
Accepted values for --os: linux, darwin, win32, freebsd, openbsd, sunos, aix
[H2] ​Peer dependencies?
Peer dependencies are handled similarly to yarn. bun install will automatically install peer dependencies. If the dependency is marked optional in peerDependenciesMeta, an existing dependency will be chosen if possible.
[H2] ​Lockfile
bun.lock is Bun’s lockfile format. See our blogpost about the text lockfile.
Prior to Bun 1.2, the lockfile was binary and called bun.lockb. Old lockfiles can be upgraded to the new format by running bun install --save-text-lockfile --frozen-lockfile --lockfile-only, and then deleting bun.lockb.
[H2] ​Cache
To delete the cache:
bun pm cache rm
# or
rm -rf ~/.bun/install/cache
[H2] ​Platform-specific backends
bun install uses different system calls to install dependencies depending on the platform. This is a performance optimization. You can force a specific backend with the --backend flag.
hardlink is the default backend on Linux. Benchmarking showed it to be the fastest on Linux.
rm -rf node_modules
bun install --backend hardlink
clonefile is the default backend on macOS. Benchmarking showed it to be the fastest on macOS. It is only available on macOS.
rm -rf node_modules
bun install --backend clonefile
clonefile_each_dir is similar to clonefile, except it clones each file individually per directory. It is only available on macOS and tends to perform slower than clonefile. Unlike clonefile, this does not recursively clone subdirectories in one system call.
rm -rf node_modules
bun install --backend clonefile_each_dir
copyfile is the fallback used when any of the above fail, and is the slowest. on macOS, it uses fcopyfile() and on linux it uses copy_file_range().
rm -rf node_modules
bun install --backend copyfile
symlink is typically only used for file: dependencies (and eventually
15000 chars
SUB-PAGE (https://bun.sh/docs/bundler/) Bundler – Bun
Bun’s fast native bundler can be used via the bun build CLI command or the Bun.build() JavaScript API.
[H3] ​At a Glance
JS API: await Bun.build({ entrypoints, outdir })
CLI: bun build <entry> --outdir ./out
Watch: --watch for incremental rebuilds
Targets: --target browser|bun|node
Formats: --format esm|cjs|iife (experimental for cjs/iife)
JavaScript CLI
[IMG: https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35b]
build.tsawait Bun.build({
entrypoints: ['./index.tsx'],
outdir: './build',
});
terminalbun build ./index.tsx --outdir ./build
It’s fast. The numbers below represent performance on esbuild’s three.js benchmark.
[H2] ​Why bundle?
The bundler is a key piece of infrastructure in the JavaScript ecosystem. As a brief overview of why bundling is so important:
Reducing HTTP requests. A single package in node_modules may consist of hundreds of files, and large applications may have dozens of such dependencies. Loading each of these files with a separate HTTP request becomes untenable very quickly, so bundlers are used to convert our application source code into a smaller number of self-contained “bundles” that can be loaded with a single request.
Code transforms. Modern apps are commonly built with languages or tools like TypeScript, JSX, and CSS modules, all of which must be converted into plain JavaScript and CSS before they can be consumed by a browser. The bundler is the natural place to configure these transformations.
Framework features. Frameworks rely on bundler plugins & code transformations to implement common patterns like file-system routing, client-server code co-location (think getServerSideProps or Remix loaders), and server components.
Full-stack Applications. Bun’s bundler can handle both server and client code in a single command, enabling optimized production builds and single-file executables. With build-time HTML imports, you can bundle your entire application — frontend assets and backend server — into a single deployable unit.
Let’s jump into the bundler API.
The Bun bundler is not intended to replace tsc for typechecking or generating type declarations.
[H2] ​Basic example
Let’s build our first bundle. You have the following two files, which implement a client-side rendered React app.
[IMG: https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35b]
index.tsx
[IMG: https://mintcdn.com/bun-1dd33a4e/JUhaF6Mf68z_zHyy/icons/typescript.svg?fit=max&auto=format&n=JUhaF6Mf68z_zHyy&q=85&s=7ac549adaea8d5487d8fbd58cc3ea35b]
Component.tsximport * as ReactDOM from "react-dom/client";
import { Component } from "./Component";
const root = ReactDOM.createRoot(
2863 chars
🛡️ Trust Signals — reviews, proof links, trust-theatre flag (Trust & Proof)
30Review mentions (all pages)
0External proof links (all pages)
PageReviewsProof links
/ (home) 0 0
/docs/cli/test/ 6 0
/docs/cli/install/ 6 0
/docs/bundler/ 18 0
🔗 Identity & Technical Layer — schema JSON-LD: identity chains, entity gaps (Identity & Authority)
Homepage schema
[
    {
        "@context": "https://schema.org",
        "@type": "WebSite",
        "name": "Bun",
        "alternateName": "Bun",
        "url": "https://bun.com"
    },
    {
        "@context": "https://schema.org",
        "@type": "Organization",
        "name": "Bun",
        "url": "https://bun.com",
        "logo": "https://bun.com/logo-square.png",
        "alternateName": "Oven",
        "sameAs": [
            "https://twitter.com/bunjavascript",
            "https://bun.com"
        ],
        "description": "A fast all-in-one JavaScript runtime and toolkit"
    }
]
/docs/cli/test/
{
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "Bun",
    "creator": {
        "@type": "Organization",
        "name": "Mintlify",
        "url": "https://mintlify.com"
    }
}
/docs/cli/install/
{
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "Bun",
    "creator": {
        "@type": "Organization",
        "name": "Mintlify",
        "url": "https://mintlify.com"
    }
}
/docs/bundler/
{
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "Bun",
    "creator": {
        "@type": "Organization",
        "name": "Mintlify",
        "url": "https://mintlify.com"
    }
}

Your Diagnosis

Before revealing the machine’s verdict, predict the BS score for each signal. Higher = more BS (more fluff, less verifiable substance). Drag each slider, then submit to compare your judgment against the engine.

Information Density 0 / 30
Read the Narrative & headings: do hard facts (prices, dates, numbers) outweigh fluff power-words?
Semantic Coherence 0 / 20
Compare the homepage promise against the sub-page reality. Do they hold the same line?
Trust & Proof 0 / 20
Weigh review mentions against actual external proof links. Claims without verification = theatre.
Commodity Fingerprint 0 / 15
Check headings & narrative against the industry clichés in the setup above.
Identity & Authority 0 / 15
Inspect the schema: is there real Organization/Person identity with sameAs links, or gaps?
Your predicted BS score 0 / 100
💡 Stuck? Reveal the heuristic lens — how the deterministic page-auditor reads each signal (no AI, pure pattern rules)

These are the structural rules a local, deterministic auditor applies — the same lens you can use to judge each signal. They describe what to look for, not this company’s result.

Information Density

Classify each sentence as substantive or hollow. Grounding markers — numbers, currencies, dates, technical units, named entities — outweigh marketing adjectives. When fluff sits right next to hard evidence, the fluff is forgiven.

Semantic Alignment

Pull the main entities out of the H1, then check whether they actually recur through the body. A page that announces one thing and then talks about another drifts. Headings with no real sentences underneath read as pseudo-substance.

Trust & Proof

Count trust words (review, testimonial, rating, verified) against real outbound proof links (Google, Trustpilot, Clutch, G2, Yelp). Lots of trust language with zero verification links is trust theatre. Unlinked logo galleries count against it.

Commodity Fingerprint

Look at how much sentence length varies. Natural writing varies its rhythm; templated or mass-produced copy is statistically uniform. Very low variation reads as commodity content — unless unique named entities break the pattern.

Identity & Authority

Inspect the JSON-LD. Is there an Organization or Person schema, and does it carry sameAs links to real external profiles (LinkedIn, socials)? Missing schema or no identity declaration signals an anonymous entity.

Want to apply this lens yourself? The free BS Indicator Chrome extension runs these heuristic checks live on any page. Bear in mind it is a single-page, deterministic tool — it relies only on pattern rules for the page in front of it and does not perform the cross-page semantic correlation this audit uses, so its readout is a starting lens, not the full verdict.

B
BS Level
Software, SaaS & Tech Products
33.1 Avg BS

Based on 1129 businesses audited.

BS Detector

Software, SaaS & Tech Products BS: Bun (bun.sh)

https://bun.sh 📍 Industry: Software, SaaS & Tech Products
9 BS / 100

Bun is a masterclass in substance-over-signal marketing. It weaponizes benchmarks and documentation to prove its utility, leaving almost no room for traditional corporate bullshit.

Info Density Power-words vs. Substance ratio.
3
10% BS
Semantic Coherence Homepage promise vs. Sub-page reality.
0
0% BS
Trust & Proof Verifiable evidence vs. Trust Theatre.
4
20% BS
Commodity Fingerprint Detection of industry clichés/templates.
1
7% BS
Identity & Authority Expert verifiability & Schema depth.
1
7% BS

Directly link the 25x faster installation graphic to a reproducible benchmark repository. Add a dedicated Case Studies page to provide depth for the logos listed in the Used By section. Ensure the 100 percent Node.js compatibility claim is consistently qualified as Bun aims for to maintain technical honesty.

The site perfectly aligns with the Software and Developer Tools category. The content is deeply technical, focusing on runtime performance, CLI commands, and package management logic.

“The score of 9 is driven by the extreme technical specificity of the body text and the total absence of semantic drift. Minor points were deducted only for occasional marketing hyperbole in headings and a lack of direct external links for every single performance graphic shown on the homepage.”

Verified Analysis Date: June 20, 2026 © 1EuroSEO Independent Evaluator — Non-Sponsored Result
Brand AI Reputation