pm2

Infrastructure & DevOps

Node.js/Bun Production Process Manager with a built-in Load Balancer.

Latest v7.0.4 · by UnitechWebsiteUnitech/pm2RSS

Release activity

Release activity — 10 releases across 7 days since Sep 2, 2025. Each cell is one day; darker means more releases that day. Nothing is recorded before Sep 2, 2025. Older weeks are hidden at this screen width.
JunJulAug
SundayNo releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026No releases on Aug 16, 2026No releases on Aug 23, 2026No releases on Aug 30, 2026
MondayNo releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 20262 releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026No releases on Aug 17, 20261 release on Aug 24, 2026No releases on Aug 31, 2026
TuesdayNo releases on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 2026No releases on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026No releases on Aug 18, 2026No releases on Aug 25, 2026No releases on Sep 1, 2026
WednesdayNo releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026No releases on Aug 19, 2026No releases on Aug 26, 2026
ThursdayNo releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 2026No releases on Jun 25, 2026No releases on Jul 2, 2026No releases on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026No releases on Aug 13, 2026No releases on Aug 20, 2026No releases on Aug 27, 2026
FridayNo releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 2026No releases on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026No releases on Aug 14, 2026No releases on Aug 21, 2026No releases on Aug 28, 2026
SaturdayNo releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026No releases on Aug 15, 2026No releases on Aug 22, 2026No releases on Aug 29, 2026

10 releases since Sep 2, 2025, busiest day 2

Changelog

v7.0.4

Latest
Added 1
  • Start .ts apps with Node.js native type stripping when bun is not installed (Node.js >= 22.18 / 23.6, --experimental-strip-types auto-injected on 22.6+) with ts-node fallback now resolved from the app's own dependencies
Changed 1
  • Pin OpenTelemetry package versions in pm2 install-otel and re-emit legacy HTTP span tags (http.method, http.status_code, http.target) dropped by @opentelemetry/instrumentation-http >= 0.220
Fixed 7
  • Fix pm2 start --container / --container --dist crashing with Cannot find module due to wrong require depth in Containerizer.js
  • Bump js-yaml 4.3.0 → 4.3.1
  • Fix overlapping reloads colliding on the _old_<pm_id> slot and orphaning a cluster worker by refusing a reload while one is in progress
  • Ignore stale exit events from a replaced process to fix double start on Windows with shutdown_with_message
  • Fix retrying in NaNms kill log and ~1ms poll spam when kill_retry_time is unset by falling back to KILL_RETRY_TIME constant (100ms, overridable via PM2_KILL_RETRY_TIME)
  • Fix pm2 start/restart RPC hanging forever when a cluster worker dies before its online event by having executeApp conclude on exit-before-online
  • Surface the daemon's actual error in CLI output instead of masking everything as Process not found
Removed 1
  • Remove dead code including promise.min.js polyfill, IsAbsolute.js, unused Java/Ruby Dockerfile templates, and always-false win64 platform checks

From pm2

7.0.4
Features
  • Start .ts apps with Node.js native type stripping when bun is not installed (Node.js >= 22.18 / 23.6, --experimental-strip-types auto-injected on 22.6+); ts-node fallback now resolved from the app's own dependencies
Bug Fixes
  • Fix pm2 start --container / --container --dist crashing with Cannot find module — wrong require depth in Containerizer.js from the v7 promptly internalization
  • Bump js-yaml 4.3.0 → 4.3.1
  • Fix overlapping reloads colliding on the _old_<pm_id> slot and orphaning a cluster worker — a reload is now refused while one is in progress #6129
  • Ignore stale exit events from a replaced process — fixes double start on Windows with shutdown_with_message #6142
  • Fix retrying in NaNms kill log and ~1ms poll spam when kill_retry_time is unset — fallback to KILL_RETRY_TIME constant (100ms, PM2_KILL_RETRY_TIME overridable)
  • Fix pm2 start/restart RPC hanging forever when a cluster worker dies before its online event (bad node_args, boot OOM) — executeApp now concludes on exit-before-online
  • Surface the daemon's actual error in CLI output instead of masking everything as Process not found
  • Pin OpenTelemetry package versions in pm2 install-otel and re-emit legacy HTTP span tags (http.method, http.status_code, http.target) dropped by @opentelemetry/instrumentation-http

= 0.220

Core Refactor
  • Remove dead code: promise.min.js polyfill (native Promise), IsAbsolute.js (native path.isAbsolute), unused Java/Ruby Dockerfile templates, always-false win64 platform checks
View originalPermalink
How v7.0.4 went

v7.0.3

Fixed 1
  • Fix daemon failing to boot on Node.js < 14.18 by switching embedded vizion from node:-scheme requires to bare specifiers

From pm2

Bug Fixes
  • Fix daemon failing to boot on Node.js < 14.18 — embedded vizion used node:-scheme requires; switched to bare specifiers
View originalPermalink
How v7.0.3 went

v7.0.2

Added 2
  • Show pm2 ls host-metrics line by default
  • Add adaptive layout to pm2 ls that picks the widest layout fitting the terminal (full, condensed, or ultra-compact mini)
Changed 4
  • Filter pm2 ls host-metrics line to only list network interfaces carrying traffic
  • Replace pm2 ls host-metrics mem free with ram usage percentage and add GPU memory/temperature when reported
  • Show per-interface network errors/drops in pm2 ls host-metrics line when non-zero
  • Replace bundled pm2-sysmonit module and systeminformation with lib/tools/SysMetrics.js for Linux/macOS
Fixed 3
  • Fix pm2 serve returning 403 Forbidden on Windows due to traversal guard using hardcoded / separator
  • Fix pm2 ls table misalignment when username exceeds user column width caused by cli-tableau's truncate() miscounting ANSI bytes
  • Fix long status lines wrapping on narrow terminals by making Common.printOut ANSI-aware and cropping output to terminal width
Removed 1
  • Remove old vizion module and 3 submodules
Security 3
  • Bump js-yaml 4.1.1 to 4.3.0 to fix quadratic-complexity DoS in merge-key handling
  • Bump ws 8.20.0 to 8.21.0 to fix uninitialized-memory disclosure and tiny-fragment DoS
  • Bump @pm2/js-api 0.8.0 to 0.8.1 to pull in patched ws@8.21.0

From pm2

7.0.2
Bug Fixes
  • Fix pm2 serve returning 403 Forbidden on Windows — traversal guard used hardcoded / separator #6109
  • Fix pm2 ls table misalignment when a username exceeds the user column width — cli-tableau's truncate() miscounts ANSI bytes, leaking bold into the watching column
  • Fix long status lines (e.g. Applying action … on app […]) wrapping on narrow terminals — Common.printOut now ANSI-aware crops single-line TTY output to terminal width (piped output unaffected)
Features
  • pm2 ls host-metrics line now shown by defaultpm2 update)
  • pm2 ls adaptive layout: picks the widest layout that fits the terminal — full → condensed → new ultra-compact mini (id · name · status · cpu · mem) — and caps the name column so long names can't overflow the table
  • pm2 ls host-metrics line only lists network interfaces carrying traffic (hides idle utun/awdl/bridge/anpi/unused en*)
  • pm2 ls host-metrics line: replaced mem free with ram usage (%), added GPU memory/temperature when reported, per-interface network errors/drops shown when non-zero
Core Refactor
  • Drop old vizion module, refactor to support only git and drop 3 submodules
  • Replace the bundled pm2-sysmonit module and systeminformation with lib/tools/SysMetrics.js (Linux/macOS); pm2 slist/getSystemData and the Docker metrics path now read this collector. Covered by test/programmatic/sysmetrics.mocha.js
Security
  • Bump js-yaml 4.1.1 → 4.3.0 — fixes quadratic-complexity DoS in merge-key handling (GHSA-h67p-54hq-rp68) #6122
  • Bump ws 8.20.0 → 8.21.0 — fixes uninitialized-memory disclosure and tiny-fragment DoS (GHSA-58qx-3vcg-4xpx, GHSA-96hv-2xvq-fx4p) #6116
  • Bump @pm2/js-api 0.8.0 → 0.8.1, pulling in patched ws@8.21.0 (its transitive ws was pinned to the vulnerable 7.x). Production deps are now advisory-free (npm audit --omit=dev clean)
View originalPermalink
How v7.0.2 went

v7.0.1

Fixed 5
  • Fix Python and other non-Node interpreter regression on Ubuntu where bun runtime detection used naive substring matching that incorrectly matched paths containing 'bun', causing routing through ProcessContainerForkBun.js and SyntaxError when Python tried to parse the JS container
  • Display max_memory_restart in pm2 describe output when set
  • Add missing port option to StartOptions TypeScript declaration
  • Fix incorrect file permissions on openrc.tpl template
  • Fix Windows cmd.exe regression by reverting bin/pm2 launchers to #!/usr/bin/env node shebang to restore compatibility with npm's pm2.cmd shim

From pm2

7.0.1
Bug Fixes
  • Fix Python (and other non-Node) interpreter regression on Ubuntu: bun runtime detection used a naive includes('bun') substring check that matched any path containing the letters "bun" — most notably /home/ubuntu/.... Affected paths were routed through ProcessContainerForkBun.js and crashed with SyntaxError: unterminated string literal when Python tried to parse the JS container. Anchored the match to the end of the interpreter path (=== 'bun' or /bun$/) in both lib/God/ForkMode.js and lib/Common.js #5990
  • Display max_memory_restart in pm2 describe output when set #5925
  • Add missing port option to StartOptions TypeScript declaration #6045
  • Fix incorrect file permissions on openrc.tpl template (0755 → 0644) #5957
  • Fix Windows cmd.exe regression: revert bin/pm2* launchers to #!/usr/bin/env node shebang (was polyglot #!/bin/sh). Polyglot worked on Linux/macOS but broke npm's pm2.cmd shim on Windows — cmd.exe can't interpret /bin/sh shebang and failed with '"/bin/sh"' is not recognized as an internal or external command. PowerShell's auto-generated pm2.ps1 shim happened to call node directly so it kept working, masking the regression. Bun-only Linux/macOS users (no Node installed) need to symlink node to bun (sudo ln -s $(which bun) /usr/local/bin/node) — same workaround used in the project's bun test Dockerfile. Documented in README #6108
View originalPermalink
How v7.0.1 went

v7.0.0

Added 1
  • Add Bun runtime support with ProcessContainerBun.js and ProcessContainerForkBun.js
Changed 9
  • Internalize pm2-axon, pm2-axon-rpc, pm2-io-bpm, pm2-io-agent, and fclone as local modules to reduce supply chain surface
  • Internalize pm2-multimeter and charm into lib/tools/multimeter with zero external dependencies
  • Replace needle with native fetch for CliAuth and TAR publish
  • Replace enquirer with lightweight built-in prompt for boilerplate selector
  • Replace promptly with built-in lib/tools/prompt
  • Replace mkdirp with native fs.mkdirSync({ recursive: true })
Fixed 3
  • Fix HttpInterface env stripping never executing with WEB_STRIP_ENV_VARS
  • Rewrite TreeKill to use single ps snapshot and in-memory tree build to eliminate race conditions and improve SIGKILL escalation
  • Fix [object Object] env vars leaked to fork mode subprocesses
Removed 2
  • Require Node.js >= 18.0.0 and drop Node.js 16 support
  • Drop auto source map file detection in Common.prepareAppConf
Security 6
  • Fix ReDoS vulnerability in Config.js string-to-array split regex (CVE-2025-5891)
  • Update proxy-agent to 6.5.0 and basic-ftp to 5.3.1 (CVE-2026-27699)
  • Fix command injection in WebAuth.js open() by replacing exec() with execFile()
  • Fix command injection in PM2IO.js open() by replacing exec() with execFile() and validating SUDO_USER
  • Fix command injection in lib/tools/open.js by replacing exec() with execFile() and validating SUDO_USER
  • Fix prototype pollution in Configuration.set/unset via __proto__ key traversal

From pm2

7.0.0
Breaking Changes
  • Require Node.js >= 18.0.0 (dropped Node.js 16 support)
Core Refactor
  • Internalize pm2-axon, pm2-axon-rpc, pm2-io-bpm, pm2-io-agent, fclone as local modules (reduced supply chain surface)
  • Internalize pm2-multimeter and charm into lib/tools/multimeter (zero external deps)
  • Add Bun runtime support (ProcessContainerBun.js, ProcessContainerForkBun.js)
  • Replace needle with native fetch (CliAuth, TAR publish)
  • Replace enquirer with lightweight built-in prompt (boilerplate selector)
  • Replace promptly with built-in lib/tools/prompt
  • Replace mkdirp with native fs.mkdirSync({ recursive: true })
  • Replace source-map-support with native process.setSourceMapsEnabled()
  • Replace sprintf-js with template literals (Dashboard)
  • Replace url.parse() with native URL constructor (Serve, Utility, CliAuth)
  • Remove fclone npm dep, use internalized module
  • Drop auto source map file detection in Common.prepareAppConf
Security
  • CVE-2025-5891 Fix ReDoS in Config.js string-to-array split regex #6075
  • CVE-2026-27699 Update proxy-agent to 6.5.0, basic-ftp to 5.3.1 #6088
  • Fix command injection in WebAuth.js open() — replace exec() with execFile() #6089
  • Fix command injection in PM2IO.js open() — replace exec() with execFile(), validate SUDO_USER
  • Fix command injection in lib/tools/open.js — replace exec() with execFile(), validate SUDO_USER
  • Fix prototype pollution in Configuration.set/unset via proto key traversal #6089
  • Fix HttpInterface env stripping never executing (WEB_STRIP_ENV_VARS) #6089
Bug Fixes
  • Rewrite TreeKill: single ps snapshot + in-memory tree build, eliminates race conditions. SIGKILL escalation now targets surviving child processes directly instead of re-walking a dead tree #6084
  • Fix [object Object] env vars leaked to fork mode subprocesses #6073
  • Fix Windows home path: use os.homedir() instead of HOMEPATH/HOMEDRIVE env vars #6106
  • Fix Windows TreeKill callback consistency
  • Fix missing BPM monitoring injection in Bun cluster mode (ProcessContainerBun.js)
  • Fix ReferenceError crash in Bun cluster console overrides when disable_logs is true
  • Fix CliAuth wrong credentials error displaying "undefined" instead of error message
Features
  • Add --ftp option to pm2 serve for directory listing (python http.server style)
Dependencies
  • Add OpenTelemetry tracing as direct dependencies (@opentelemetry/api, sdk-node, auto-instrumentations-node)
  • Upgrade OpenTelemetry packages to latest
  • Update pidusage from 3.0.2 to 4.0.1
  • Upgrade ws to ^8.18.0, eventemitter2 to ^6.4.9
  • Remove needle, enquirer, promptly, mkdirp, source-map-support, sprintf-js, fclone from npm dependencies
Testing
  • Add Docker parallel test runner with Node.js and Bun support
  • Add Windows test suite (test/windows.sh)
  • Add OpenTelemetry tracing tests
  • Add TreeKill unit tests
  • Add test scripts for internalized modules (bpm, axon, axon-rpc, io-agent)
  • Fix test compatibility for Node.js 22+ and Bun
  • CI matrix: Node.js 18, 20 + latest
View originalPermalink
How v7.0.0 went

v6.0.14

Changed 1
  • Replace fs.R_OK with fs.constants.F_OK
Fixed 1
  • Fixed version of @pm2/pm2-version-check
Security 1
  • Update js-yaml to address CVE-2025-64718

From pm2

  • Fixed version of @pm2/pm2-version-check #6055
  • CVE-2025-64718 Update js-yaml
  • replace fs.R_OK with fs.constants.T_OK #6012 #6019
View originalPermalink
How v6.0.14 went

v6.0.13

  • Fix blessed package import
View originalPermalink
How v6.0.13 went

v6.0.12

Fixed 1
  • Fix pm2 monit crash
Removed 1
  • Remove npm-shrinkwrap in favor of fixed dependencies versions

From pm2

  • #6037 Drop npm-shrinkwrap in favor of fixed dependencies versions
  • #5577 fix pm2 monit crash
View originalPermalink
How v6.0.12 went

v6.0.11

Changed 1
  • Replace package-lock.json with npm-shrinkwrap.json
Fixed 1
  • Allow updating namespaced pm2 NPM modules with @org/module-name format

From pm2

  • #6034 replace package-lock.json by npm-shrinkwrap.json
  • #5915 fix allowing to update namespaced pm2 NPM module (@org/module-name)
View originalPermalink
How v6.0.11 went
View all

Discussion

If you publish pm2, you can claim this product by proving you administer its repository.