This repository offers pre-configured Docker images combining Bun, with Node.js, the popular JavaScript runtime. Ideal for development, testing, and production environments.
Use node.js as runtime, and bun as package manager, etc. The node.js in this docker image functions as fallback when bun is not implement the feature yet.
- Multiple Node.js Versions: Supports Node.js versions which currently supported by docker-node
- Variety of Builds: Available in Alpine, Debian, and Slim versions
docker pull imbios/bun-nodeThe image sends one anonymous ping per container start to bun-node.imbios.dev
to help understand which versions are actually used. The payload contains only:
- the Bun and Node.js versions in the container
- the CPU architecture
- a random id (rotated every start)
The endpoint sees the container's source IP, and the random id is kept in KV for up to one hour to deduplicate repeated pings; no hostnames, commands, or user data are sent, and the ping fails silently (3s timeout, backgrounded) without affecting startup. The recorded date is the server's UTC date.
Opt out with either:
docker run -e BUN_NODE_TELEMETRY=0 imbios/bun-node
# or
docker run -e DO_NOT_TRACK=1 imbios/bun-nodeLive (public) and owner-only telemetry dashboards live at https://bun-node.imbios.dev.
- alpine: Minimal build ideal for smaller footprint
- debian: Standard build, balanced between size and features
- slim: Debian-based but lighter, stripped of unnecessary files
- Do you need
distroless?
imbios/bun-node:<bun-version>-<node-version>-<build-type>[optional -git]- bun-version: Bun version (e.g. 1.0.0, 1.0.30, 1) or tag (e.g. latest or canary)
- node-version: Node.js version (e.g. 18, 20.11, 21.7.1) or tag (e.g. hydrogen, iron, current)
- build-type: Build type (e.g. alpine, debian, slim)
- optional -git: Optional git tag, an alpine image with git installed
If you find this Docker image useful, please consider giving it a ⭐ star on GitHub and Dockerhub! These stats tell me this code is useful for humanity and makes me prioritize maintenance.
Feel free to contribute by submitting pull requests or by reporting issues.
Images are rebuilt daily by the Release workflow:
- Node.js majors are tracked automatically via
@nodevu/core: when a new major goes Current/LTS its Dockerfiles are generated fromtemplates/, and EOL majors are removed. The availablenode:<major>-alpine*tag is probed on Docker Hub so the newest Alpine is always used. - The
latesttag is re-pointed only after every build succeeds, so it always describes the most recent release. - The version state (
versions.json) is stored on the GitHub Releaseversionsinstead of in the repository.
Manual maintenance:
bun install
# pull the current release state (versions.json lives on the GitHub release)
gh release download versions --pattern versions.json
# check which Bun versions are current
bun run check-bun-node.ts --bun latest,canary
# print Node majors that changed vs the release state
bun run check-bun-node.ts --node --versions versions.json
# print the JSON build matrix (what would be built today)
bun run check-bun-node.ts --matrix --versions versions.json
# sync src/ with the supported Node majors (generate + cleanup)
bun run check-bun-node.ts --sync --versions versions.jsonSee docs/research_matrix.md for why the release pipeline uses a workflow matrix.
This project is licensed under the MIT License.
For custom configurations and support, visit Project Wiki or Issues.
Docker, Node.js, Bun, Development, Deployment, Alpine, Debian, Slim