Skip to content
@Runtimes-Node

Runtime Node

Stop shipping OS bloat. A secure, distroless Node.js base image designed for efficient containerization. <50MB compressed.
Runtime Node Icon

Runtime Node

Stop shipping OS bloat.

A secure, distroless Node.js base image built entirely FROM scratch.
No shell. No package manager. No OS utilities. Just Node.js — and nothing else.

LicenseLatest ReleasePlatformsVulnerabilitiesImage SizeDocker PullsNode.js


What Is Runtime Node?

Runtime Node is a production-grade Docker base image that ships only what Node.js actually needs to run — and nothing more.

Built entirely FROM scratch, the image is assembled by extracting hand-picked binaries and shared libraries from the official Alpine Node.js image, rather than inheriting a full operating system. The result is an image that is smaller, safer, and cleaner than any Alpine or Debian-based alternative — with zero known vulnerabilities and a footprint of approximately <50 MB.


Why Runtime Node?

Most Node.js Docker images ship with far more than your application needs at runtime. That extra surface area — shells, package managers, system utilities — doesn't help your app run. It just gives attackers somewhere to hide.

Runtime Node eliminates that entirely. By building from scratch and including only the minimum required components, the image enforces a distroless guarantee: if a tool isn't needed to execute Node.js, it isn't there.


Key Features

FeatureDetail
BaseFROM scratch — no OS, no shell
Node.js VersionSee latest release
NODE_ENVproduction (baked in)
TZUTC (baked in)
Timezone DatabaseIANA tzdata included
Image Size<50 MB
Architectureslinux/amd64, linux/arm64
ShellNone
Package ManagerNone
CA CertificatesIncluded
DNS Resolutionnsswitch.conf included
Vulnerabilities0 known
Provenance & SBOMGenerated on every release

Pull the Image

# Docker Hub
docker pull runtimenode/runtime-node:latest
# GitHub Container Registry
docker pull ghcr.io/runtimes-node/runtime-node:latest

For versioned (production-recommended) tags, see the Releases page.


How Does It Compare?

node:latestnode:alpineruntimenode/runtime-node
Image Size~407 MB~56 MB<50 MB
BaseDebian BookwormAlpine LinuxFROM scratch
Shell✅ bash + sh✅ sh (ash)❌ None
Package Manager✅ apt✅ apk❌ None
Known VulnerabilitiesHighLow–Medium0
Attack SurfaceLargeMediumMinimal
NODE_ENV=production preset
TZ=UTC preset
Provenance & SBOM

Getting Started

Replace <image_tag> and <node_version> with the values from the latest release.

# Build stage — use the matching Node.js versionFROM node:<node_version>-alpine AS builder
WORKDIR /dist
COPY ./ ./
RUN npm ci --omit=dev --no-cache
# Runtime stage — distroless, production-readyFROM runtimenode/runtime-node:<image_tag>
# Copy your production build artifacts onlyCOPY --from=builder --chmod=555 dist/ /app/
# No shell is available — invoke Node directly using exec formENTRYPOINT ["/usr/local/bin/node", "/app/index.js"]

Note: Because the image has no shell, your ENTRYPOINT must use exec form (JSON array syntax) and reference the Node.js binary by its full path: /usr/local/bin/node.


Registries

RegistryImage
Docker Hubruntimenode/runtime-node
GitHub Container Registryghcr.io/runtimes-node/runtime-node

Repositories

RepositoryDescription
Runtime-NodeThe Runtime Node Dockerfile, CI/CD pipelines, and full project documentation.

Security

To report a vulnerability, please follow the responsible disclosure process outlined in SECURITY.md. Do not open a public GitHub Issue for security reports.


Code of Conduct

This project follows a Code of Conduct. By participating, you are expected to uphold it.


Contributing

Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.


Licensed under the Apache License 2.0.

Pinned Loading

  1. Runtime-NodeRuntime-NodePublic

    Secure, Distroless, Multi-Arch Node.js Runtime. Built from Scratch, 0 Vulnerabilities, <50MB.

    Dockerfile 2

Repositories

Showing 2 of 2 repositories

Top languages

Loading…

Most used topics

Loading…