# Changelog ## v0.6.0 - 2026-10-27 ### Added - Added an optional web dashboard served by the daemon on `OXMGR_API_ADDR`: a React + TypeScript app with an overview of running and failing processes, live CPU and memory, a process table grouped by namespace, live logs and stop / restart / reload actions, updated over an authenticated WebSocket, plus `oxmgr ui web` to open it. It is off by default (`OXMGR_DASHBOARD=1` enables it), requires `OXMGR_DASHBOARD_USER` / `OXMGR_DASHBOARD_PASS` when bound to a non-loopback address, signs in with its own screen and an `HttpOnly` session cookie, throttles failed sign-ins, checks credentials in constant time, rejects foreign `Host` headers without credentials, and guards actions and the WebSocket against CSRF and cross-site hijacking. Initial implementation contributed by @aldok10 in [#91](https://github.com/Vladimir-Urik/OxMgr/pull/91). - On Windows, every managed process is now assigned to a dedicated Job Object with `JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE`, guaranteeing that no descendant can outlive its managed root or the daemon. This closes orphan-process gaps that `taskkill /T` alone cannot cover: children of a crashed application, descendants re-parented after an intermediate process exits, processes spawned mid-kill, and trees left behind when the daemon itself is force-killed. After a root exits, surviving descendants get up to `stop_timeout_secs` to finish before the job is terminated; the exit event (and any restart) is deferred until the sweep completes so a new instance never races leftovers for ports or files. If job creation or assignment fails (e.g. nested-job restrictions), oxmgr logs a warning and falls back to the previous `taskkill`-based cleanup. Thanks to @rckok for their contribution in [#88](https://github.com/Vladimir-Urik/OxMgr/pull/88). - Added `--follow` (`-f`) flag support to `oxmgr logs all` (and `oxmgr log all`), streaming live logs concurrently across all managed processes in the background. Each log line is prefixed with the process name (`[]` for unified logs, `[:stdout]` / `[:stderr]` for split logs) so outputs from different services can be distinguished easily. Initial support contributed by @johndoe75 in [#51](https://github.com/Vladimir-Urik/OxMgr/pull/51). ### Fixed - When the auto-started daemon fails to start, the CLI now reports the daemon's own error (for example `failed to bind daemon endpoint at 127.0.0.1:: Address in use`) as soon as the daemon exits, instead of waiting silently and printing `daemon did not become ready in time`. Daemon output is kept in `logs/daemon.log` under `OXMGR_HOME`. Addresses the diagnostics part of [#103](https://github.com/Vladimir-Urik/OxMgr/issues/103). - A port conflict on the optional HTTP API (pull webhooks, `/metrics`) no longer prevents the daemon from starting; the API is disabled and the reason is logged. - The APT install instructions now use the signed repository with `signed-by` instead of `[trusted=yes]`, which produced a `NO_PUBKEY 99A20442326A95A6` warning ([#105](https://github.com/Vladimir-Urik/OxMgr/issues/105)). - Responses to requests whose body the route does not read (for example large git webhook payloads on `/pull/*`) could be lost to a connection reset when the daemon closed the socket; the daemon now drains the unread request before closing. - On Windows, colored CLI output (`oxmgr list` and others) no longer prints raw escape sequences in the classic console (conhost): oxmgr enables virtual terminal processing first and falls back to plain text when the console refuses. Thanks to @xlat in [#96](https://github.com/Vladimir-Urik/OxMgr/pull/96). ### Changed - The npm package is now published through npm trusted publishing (OIDC) from `release.yml`, with provenance; the release workflow no longer needs an `NPM_TOKEN` secret. ### Dependencies - Added `base64` `0.23`, `tokio-tungstenite` `0.30`, `futures-util` `0.3` and `getrandom` `0.4` for the web dashboard (Basic Auth, WebSocket, session tokens) in [#91](https://github.com/Vladimir-Urik/OxMgr/pull/91). - Refreshed `Cargo.lock` with `cargo update` (among others `tokio` `1.54.1`, `clap` `4.6.7`, `croner` `4.0.2`, `serde_json` `1.0.154`, `thiserror` `2.0.21`), superseding the open Dependabot PRs. - Bumped `croner` from `3.0.1` to `4.0.0` by @dependabot[bot] in [#98](https://github.com/Vladimir-Urik/OxMgr/pull/98). - Bumped `thiserror` from `2.0.18` to `2.0.20` by @dependabot[bot] in [#99](https://github.com/Vladimir-Urik/OxMgr/pull/99). - Bumped `toml` from `1.1.5+spec-1.1.0` to `1.1.6+spec-1.1.0` by @dependabot[bot] in [#100](https://github.com/Vladimir-Urik/OxMgr/pull/100). - Bumped `flate2` from `1.1.9` to `1.1.10` by @dependabot[bot] in [#101](https://github.com/Vladimir-Urik/OxMgr/pull/101). - Bumped `clap` from `4.6.5` to `4.6.6` by @dependabot[bot] in [#102](https://github.com/Vladimir-Urik/OxMgr/pull/102). - Added `windows-sys` `0.61` (with `Win32_Foundation`, `Win32_Security`, `Win32_System_JobObjects`) for Windows targets in [#88](https://github.com/Vladimir-Urik/OxMgr/pull/88). - Bumped `dirs` from `6.0.0` to `7.0.0` by @dependabot[bot] in [#94](https://github.com/Vladimir-Urik/OxMgr/pull/94). - Bumped `clap` from `4.6.1` to `4.6.5` (via `4.6.2`) by @dependabot[bot] in [#76](https://github.com/Vladimir-Urik/OxMgr/pull/76) and [#87](https://github.com/Vladimir-Urik/OxMgr/pull/87). - Bumped `tokio` from `1.52.3` to `1.53.1` (via `1.52.4`) by @dependabot[bot] in [#79](https://github.com/Vladimir-Urik/OxMgr/pull/79) and [#83](https://github.com/Vladimir-Urik/OxMgr/pull/83). - Bumped `toml` from `1.1.2+spec-1.1.0` to `1.1.5+spec-1.1.0` (via `1.1.3+spec-1.1.0`) by @dependabot[bot] in [#77](https://github.com/Vladimir-Urik/OxMgr/pull/77) and [#95](https://github.com/Vladimir-Urik/OxMgr/pull/95). - Bumped `serde` from `1.0.228` to `1.0.229` by @dependabot[bot] in [#84](https://github.com/Vladimir-Urik/OxMgr/pull/84). - Bumped `serde_json` from `1.0.150` to `1.0.151` by @dependabot[bot] in [#81](https://github.com/Vladimir-Urik/OxMgr/pull/81). - Bumped `regex` from `1.12.4` to `1.13.1` by @dependabot[bot] in [#78](https://github.com/Vladimir-Urik/OxMgr/pull/78). - Bumped `anyhow` from `1.0.103` to `1.0.104` by @dependabot[bot] in [#80](https://github.com/Vladimir-Urik/OxMgr/pull/80). - Bumped `sysinfo` from `0.39.5` to `0.39.6` by @dependabot[bot] in [#72](https://github.com/Vladimir-Urik/OxMgr/pull/72). - Bumped `serial_test` from `3.5.0` to `4.0.1` by @dependabot[bot] in [#86](https://github.com/Vladimir-Urik/OxMgr/pull/86). ### New Contributors - @johndoe75 made their first contribution in [#51](https://github.com/Vladimir-Urik/OxMgr/pull/51). - @rckok made their first contribution in [#88](https://github.com/Vladimir-Urik/OxMgr/pull/88). - @aldok10 made their first contribution in [#91](https://github.com/Vladimir-Urik/OxMgr/pull/91). - @xlat made their first contribution in [#96](https://github.com/Vladimir-Urik/OxMgr/pull/96). ## v0.5.0 - 2026-07-09 ### Added - Added a Unix domain socket event bus (`events.sock`) so external tools can subscribe to real-time process lifecycle, log, and health events without polling the HTTP API. - Added `BusEvent` — a tagged NDJSON enum covering `process:started`, `process:online`, `process:stopped`, `process:restarting`, `process:errored`, `process:crashed`, `process:exited`, `log:out`, `log:err`, `health:healthy`, `health:unhealthy`, and `daemon:shutdown`. - Added `--json` flag to `oxmgr list` (alias `oxmgr ls`) that serializes the managed-process list to a JSON array via `serde`, instead of the human-readable table. Empty lists emit `[]`. Each entry reflects the full `ManagedProcess` schema (id, name, command, args, status, pid, cpu_percent, memory_bytes, restart_count, cluster_mode, health_status, etc.). Useful for scripting and piping to tools like `jq`. Thanks to @kvndrsslr for their first contribution in [#66](https://github.com/Vladimir-Urik/OxMgr/pull/66). - Added `oxmgr events` CLI command to stream events from the daemon socket, with `--filter`/`-f` glob patterns, `--process`/`-p` name filter, and `--json` raw output flag. - Added `EventFilter` subscription protocol: client sends one JSON filter object within 500 ms of connecting, then receives a stream of matching NDJSON events. - Unified stdout/stderr log forwarding into a single generic `forward_log_pipe` function; log lines are now always piped and emitted as `log:out`/`log:err` events regardless of `log_date_format`. - Added `prepare_log_files` helper that handles log rotation and cleanup without keeping file handles open. - Enriched exit/crash events with `signal` (POSIX signal name, e.g. `"SIGSEGV"`), `uptime_secs` (how long the process ran), and `stderr_tail` (last ≤30 stderr lines — captures stack traces, panics, and tracebacks for any language). - Extended `process` object in all bus events with `command` (full command line) and `cwd` (working directory). - Added per-app `[apps.logs]` table in `oxfile.toml` (mirrored on `[defaults.logs]`) with `stdout`, `stderr`, and `combined` fields to customize log file destinations. Relative paths resolve against the oxfile directory and support `~`/`$VAR` expansion; when unset the daemon keeps its previous default of `/.out.log` / `.err.log` (or `.log` with `unified_logs = true`). - PM2 ecosystem importer now recognises `out_file`, `error_file`, and `log_file` and maps them to the same stdout/stderr override pipeline. ### Fixed - Relative `cwd` values in `oxfile.toml` and PM2 ecosystem files are now resolved against the directory containing the config file, instead of the daemon's working directory. Absolute `cwd` values are unaffected. - `~`, `~/...`, `$VAR`, and `${VAR}` are now expanded in `env` values and `cwd` paths when loading `oxfile.toml` or PM2 ecosystem files. `$$` produces a literal `$`. Missing variables fail loudly with an error naming the variable rather than silently expanding to an empty string. - `oxmgr stop`/`restart`/`delete`/`start`/`reload` with a bare process name no longer fail with `config target is not a file` when a file or directory of the same name exists in the current directory. Lifecycle targets are now treated as config files only when they carry a config extension (`toml`/`js`/`cjs`/`mjs`/`json`) or a path separator; bare tokens are always resolved as process names/ids ([#58](https://github.com/Vladimir-Urik/OxMgr/issues/58)). - npm installer now extracts release archives with `tar` (bsdtar ships in Windows 10/11 and on macOS/Linux) instead of shelling out to PowerShell's `Expand-Archive`, fixing `npm install -g oxmgr` failures on PowerShell 7 caused by `Microsoft.PowerShell.Archive` module autoload errors. A PowerShell fallback (with an explicit `Import-Module`) is kept for older Windows without `tar` ([#50](https://github.com/Vladimir-Urik/OxMgr/issues/50)). - npm installer now selects the static musl binary on Linux systems whose glibc is older than the version required by the prebuilt gnu build (e.g. Debian 12, Ubuntu 22.04), instead of installing a gnu binary that fails to load with `GLIBC_x.yy not found`. - Fixed Windows build failures under `cargo clippy -- -D warnings` by gating the Unix-only event-bus imports and subscription-filter code so they no longer trip `unused_imports`/`dead_code` on non-Unix targets. ### Changed - `AppConfig` gains an `event_socket_path` field (default: `{base_dir}/events.sock`). - Daemon startup now spawns the event socket listener alongside the existing HTTP API and IPC listeners. - Both daemon shutdown paths (SIGTERM/SIGINT and IPC stop) emit a `daemon:shutdown` event before closing the socket. ### Security - Updated `SECURITY.md` supported-version table: added `0.5.x` as a supported release line and dropped `0.3.x` from active support. ### Dependencies - Bumped `tokio` from `1.52.1` to `1.52.3` (via `1.52.2`) by @dependabot[bot] in [#46](https://github.com/Vladimir-Urik/OxMgr/pull/46) and [#52](https://github.com/Vladimir-Urik/OxMgr/pull/52). - Bumped `sysinfo` from `0.38.4` to `0.39.5` (via `0.39.0`, `0.39.2`, `0.39.3`) by @dependabot[bot] in [#45](https://github.com/Vladimir-Urik/OxMgr/pull/45), [#55](https://github.com/Vladimir-Urik/OxMgr/pull/55), [#61](https://github.com/Vladimir-Urik/OxMgr/pull/61), and [#67](https://github.com/Vladimir-Urik/OxMgr/pull/67). - Bumped `nix` from `0.31.2` to `0.31.3` by @dependabot[bot] in [#54](https://github.com/Vladimir-Urik/OxMgr/pull/54). - Bumped `anyhow` from `1.0.102` to `1.0.103` by @dependabot[bot] in [#68](https://github.com/Vladimir-Urik/OxMgr/pull/68). - Bumped `chrono` from `0.4.44` to `0.4.45` by @dependabot[bot] in [#60](https://github.com/Vladimir-Urik/OxMgr/pull/60). - Bumped `serde_json` from `1.0.149` to `1.0.150` by @dependabot[bot] in [#57](https://github.com/Vladimir-Urik/OxMgr/pull/57). - Bumped `regex` from `1.12.3` to `1.12.4` by @dependabot[bot] in [#62](https://github.com/Vladimir-Urik/OxMgr/pull/62). - Bumped `serial_test` from `3.4.0` to `3.5.0` by @dependabot[bot] in [#59](https://github.com/Vladimir-Urik/OxMgr/pull/59). ### New Contributors - @kvndrsslr made their first contribution in [#66](https://github.com/Vladimir-Urik/OxMgr/pull/66). ## v0.4.0 - 2026-04-26 ### Added - Added `oxmgr restart all` to restart every managed process in a single command ([#31](https://github.com/Vladimir-Urik/OxMgr/issues/31)). - Added config-file targets for `oxmgr stop`, `oxmgr restart`, and `oxmgr delete`, so commands like `oxmgr stop ./oxfile.toml` resolve all named apps from an `oxfile.toml` or PM2 ecosystem file and apply the lifecycle action to each expanded process ([#31](https://github.com/Vladimir-Urik/OxMgr/issues/31)). - Added multi-file `oxmgr apply ...` and `oxmgr validate ...`, combining independently resolved config files in CLI argument order while still rejecting duplicate expanded process names ([#31](https://github.com/Vladimir-Urik/OxMgr/issues/31)). - Added Linux musl release artifacts for `x86_64` and `aarch64` to improve compatibility on older glibc-based distributions ([#32](https://github.com/Vladimir-Urik/OxMgr/issues/32)). ### Changed - Reused shared deterministic config-expansion logic across lifecycle commands, `apply`, and foreground `runtime` to keep instance naming behavior aligned. - Updated CLI and usage docs to document `restart all` and config-file lifecycle targets. - Updated Linux distribution channels so npm auto-detects `glibc` vs `musl`, APT packages ship the musl binary, and `oxmgr-bin` on AUR consumes the musl release artifact ([#32](https://github.com/Vladimir-Urik/OxMgr/issues/32)). ### Security - Updated `SECURITY.md` supported-version guidance. ### Dependencies - Bumped `clap` from `4.6.0` to `4.6.1`. - Bumped `tokio` from `1.51.1` to `1.52.1`. ## v0.3.0 - 2026-04-19 ### Added - Added `oxmgr stop all` to stop every managed process in a single command ([#28](https://github.com/Vladimir-Urik/OxMgr/issues/28)). - Added `oxmgr delete all` (alias: `oxmgr rm all`) to terminate and remove every managed process in a single command ([#28](https://github.com/Vladimir-Urik/OxMgr/issues/28)). - Updated docs (`docs/CLI.md`, `docs/USAGE.md`) to document the new bulk stop/delete behaviour. - Added `oxmgr logs all` (alias: `oxmgr log all`) to print recent logs for every managed process at once ([#30](https://github.com/Vladimir-Urik/OxMgr/issues/30)). - Running `oxmgr logs` without a target now prints usage help instead of an error ([#30](https://github.com/Vladimir-Urik/OxMgr/issues/30)). - Reserved `all` as a forbidden process name to avoid conflicts with bulk commands. ## v0.2.0 - 2026-04-06 This release focuses on Docker/Kubernetes-first runtime workflows, unified logging, and PM2 foreground parity improvements. ### Added - Added new foreground command: `oxmgr runtime [--env ] [--only a,b]` (pm2-runtime style). - Added daemon-less runtime execution mode that keeps `oxmgr` in foreground as PID 1 process manager. - Added runtime signal handling (`SIGTERM`/`SIGINT`) with graceful child shutdown behavior. - Added runtime child log forwarding to parent stdout/stderr for native container log collection. - Added runtime restart supervision in foreground mode, including `restart_policy`, `max_restarts`, `crash_restart_limit`, and `restart_delay_secs`. - Added runtime support for both Oxmgr native config (`oxfile.toml`) and PM2 ecosystem files (`ecosystem.config.{js,cjs,mjs,json}`). - Added PM2 `merge_logs` compatibility mapping to Oxmgr `unified_logs`. - Added `unified_logs` support across Oxfile defaults/apps/profiles, schema validation, parser/writer flow, process fingerprints, and runtime process specs. - Added runtime documentation page: `docs/RUNTIME.md`. - Added dedicated runtime unit coverage (`src/commands/runtime.rs`) for expansion/restart/spawn behavior and PM2 `merge_logs` mapping. - Added CLI parsing coverage for the new `runtime` command. - Added CLI log-view deduplication coverage for unified log-path mode. ### Changed - Updated log-path resolution so unified mode writes both stdout/stderr into a single `.log` stream. - Updated `oxmgr logs` behavior to avoid duplicate sections and duplicate follow output when unified logs are enabled. - Updated TUI log viewer and tail preview logic to treat identical stdout/stderr paths as one unified source. - Updated command dispatch to run `runtime` without daemon auto-start. - Updated docs (`README.md`, `docs/CLI.md`, `docs/USAGE.md`, `docs/install.md`, `docs/README.md`, `docs/OXFILE.md`, `docs/OXFILE_VS_PM2.md`) for runtime mode and unified logs. ### Testing - Extended full test coverage for runtime mode and unified logs. - Full suite remains green after changes (`cargo test`). **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.9...v0.2.0 ## v0.1.9 - 2026-04-05 This release focuses on PM2 migration parity (`log_date_format`, `cron_restart`), runtime compatibility updates after dependency bumps, and documentation refreshes. ### Added - Added `log_date_format` support across CLI start flags, Oxfile/ecosystem parsing, import/export bundles, and runtime process specs ([#21](https://github.com/Vladimir-Urik/OxMgr/issues/21)). - Added `cron_restart` support with cron-expression parsing, persisted next-run scheduling, and daemon-managed scheduled restarts ([#21](https://github.com/Vladimir-Urik/OxMgr/issues/21)). - Added dedicated cron restart unit coverage in `process_manager` tests. - Added a shared SHA-256 hex utility (`src/hash.rs`) and migrated hashing call sites to it for compatibility with `sha2` `0.11`. - Added AI Skill reference documentation (`docs/SKILL.md`). ### Changed - Updated daemon log forwarding paths so timestamp-prefixed log output and cwd/env marker handling stay consistent in E2E coverage. - Updated PM2 migration docs and core user docs for `log_date_format` and `cron_restart`. - Refreshed benchmark artifacts (`BENCHMARK.md`, `benchmark.json`). ### Dependencies - Bumped `clap` from `4.5.60` to `4.6.0`. - Bumped `tracing-subscriber` from `0.3.22` to `0.3.23`. - Bumped `toml` from `1.0.6+spec-1.1.0` to `1.1.0+spec-1.1.0` (via `1.0.7+spec-1.1.0`). - Bumped `toml` from `1.1.0+spec-1.1.0` to `1.1.2+spec-1.1.0`. - Bumped `cron` from `0.12.1` to `0.16.0`. - Bumped `sha2` from `0.10.9` to `0.11.0`. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.8...v0.1.9 ## v0.1.8 - 2026-03-15 This release focuses on adding native Linux ARM64 support across the entire packaging and distribution ecosystem, alongside minor dependency updates. ### Added - Added `aarch64-unknown-linux-gnu` (Linux ARM64) build target to the GitHub release workflow. - Added `arm64` Debian (`.deb`) package generation and APT repository publishing. - Added Linux ARM64 support to the npm wrapper installation script (`oxmgr`). - Added Linux ARM64 support to the Homebrew formula. - Added `aarch64` target metadata to the AUR package (`oxmgr-bin`). - Added Linux ARM64 tracking to the download metrics dashboard. ### Dependencies - Bumped `sysinfo` from `0.38.3` to `0.38.4`. - Bumped `toml` from `1.0.4+spec-1.1.0` to `1.0.6+spec-1.1.0`. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.7...v0.1.8 ## v0.1.7 - 2026-03-10 This release focuses on reload-time build hooks and best-effort reuse-port support for zero-downtime reloads. ### Added - Added `pre_reload_cmd` in `oxfile.toml`, ecosystem imports, bundles, and CLI `--pre-reload-cmd` to run a build/script before reload attempts. - Added `reuse_port` in `oxfile.toml` and CLI `--reuse-port` as a best-effort hint for SO_REUSEPORT on macOS/Linux (ignored on Windows). - Added `Reuse Port` field to `oxmgr status` output. - Added schema and documentation updates for the new fields. ### Changed - Reload now runs `pre_reload_cmd` (when configured) before spawning a replacement process; failures abort the reload and keep the existing process running. ### Testing - Added end-to-end coverage for `--reuse-port` (non-Windows) and `--pre-reload-cmd` (Windows and non-Windows). **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.6...v0.1.7 ## v0.1.6 - 2026-03-07 This release focuses on Arch Linux distribution support and release automation for the AUR package. ### Added - Added AUR packaging metadata for the new `oxmgr-bin` package, including `PKGBUILD` and `.SRCINFO`. - Added helper scripts to generate AUR package metadata from release version and checksum inputs. - Added a dedicated `publish-aur` job to the GitHub release workflow to update the `oxmgr-bin` AUR repository automatically when release tags are published. - Added Arch Linux installation instructions using `yay -S oxmgr-bin` across the main project docs and npm package README. ### Changed - Extended release documentation to cover AUR publishing, required repository secrets, and the release-time metadata generation flow. - Aligned packaging maintenance with the existing Homebrew, Chocolatey, Scoop, and APT distribution automation patterns. ### Notes - The AUR package is published as `oxmgr-bin`, which installs the released Linux binary instead of compiling from source. - Final AUR checksums are generated from the tagged GitHub release assets during the release workflow. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.5...v0.1.6 ## v0.1.5 - 2026-03-06 This release focuses on stronger diagnostics, better Oxfile editor tooling, a more usable terminal UI, and internal maintenance improvements. ### Added - Expanded `oxmgr doctor` with checks for API address resolution, `/metrics` reachability, service-manager installation/runtime state, cgroup prerequisites, git pull/webhook setup, and log-rotation policy. - Added live search to `oxmgr ui`, with filtering by process name, namespace, and command. - Added status filters and sortable process lists in the TUI (`all`, `running`, `stopped`, `unhealthy`; sort by ID, name, CPU, RAM, or restarts). - Added a shipped JSON Schema for `oxfile.toml` plus Taplo schema association for editor completion and validation. - Added packaging smoke checks in CI for the npm wrapper, Homebrew formula generation, and Scoop manifest generation. ### Changed - Refactored large runtime and UI modules into smaller internal components, including `process_manager`, TUI rendering/layout helpers, daemon HTTP handling, ecosystem profile/resource parsing, and process fingerprinting. - Consolidated shared process-spec handling across `start` and `apply` flows to reduce drift between CLI and config-driven workflows. - Reorganized unit tests for large modules into dedicated per-module test directories to keep runtime code easier to review and maintain. - Updated the README and docs to cover the richer `doctor` output, Oxfile schema support, and the new TUI search/filter/sort controls. ### Fixed - Fixed Windows `clippy`/CI failures around private-directory and file-permission helpers by separating Unix and non-Unix implementations. - Improved CI coverage by enforcing `cargo clippy` and packaging smoke checks alongside formatting, build, and test steps. - Improved TUI empty-state behavior so active search/filter views show a clear “no services match” message instead of a misleading blank table. ### Testing - Added and reorganized unit coverage for TUI state/render behavior, `doctor` probes, process-manager lifecycle helpers, and packaging checks. - Kept end-to-end coverage green for the updated diagnostics, config, and TUI workflows. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.4...v0.1.5 ## v0.1.4 - 2026-03-05 - This release focuses on Windows distribution improvements (Scoop), dependency updates, and refreshed benchmark snapshots since `v0.1.3`. ### Added - Added Scoop distribution support in release automation with a dedicated `publish-scoop` job. - Added `scripts/generate_scoop_manifest.sh` to generate the Scoop manifest (`oxmgr.json`) from release metadata and checksums. - Added Scoop installation instructions to user docs (`README.md` and `docs/install.md`). ### Changed - Updated release automation docs to include Scoop publishing details and required secrets (`SCOOP_BUCKET_TOKEN`, `SCOOP_BUCKET_REPO`). - Improved release workflow packaging coverage by validating and publishing Windows Scoop manifest data from release artifacts. - Maintained the official Scoop bucket target as `empellio/scoop-bucket`. ### Dependencies - Bumped `dirs` from `5.0.1` to `6.0.0`. - Bumped `tokio` from `1.49.0` to `1.50.0`. - Bumped `sysinfo` from `0.38.2` to `0.38.3`. - Bumped `toml` from `1.0.3+spec-1.1.0` to `1.0.4+spec-1.1.0`. - Updated `Cargo.lock` accordingly. ### Notes - No core runtime/process-manager behavior changes were introduced in this release; changes are focused on packaging, distribution, documentation, and dependency refreshes. ### What's Changed - Bump dirs from 5.0.1 to 6.0.0 by @dependabot[bot] in https://github.com/Vladimir-Urik/OxMgr/pull/10 - Bump toml from 1.0.3+spec-1.1.0 to 1.0.4+spec-1.1.0 by @dependabot[bot] in https://github.com/Vladimir-Urik/OxMgr/pull/9 - Bump sysinfo from 0.38.2 to 0.38.3 by @dependabot[bot] in https://github.com/Vladimir-Urik/OxMgr/pull/8 - Bump tokio from 1.49.0 to 1.50.0 by @dependabot[bot] in https://github.com/Vladimir-Urik/OxMgr/pull/7 **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.3...v0.1.4 ## v0.1.3 - 2026-03-04 - This release focuses on PM2 ecosystem compatibility, config-driven watch behavior, readiness-aware reloads, and Windows reliability fixes. ### Added - Added direct support for PM2-style `ecosystem.config.{js,cjs,mjs,json}` across `validate`, `apply`, `import`, and `convert`. - Added config-driven watch settings, including explicit watch paths, `ignore_watch` regexes, and restart debounce. - Added readiness settings, including `wait_ready` and `ready_timeout`, across ecosystem config, `oxfile.toml`, bundles, CLI flags, validation, and status output. ### Fixed - Fixed reload behavior so replacement processes must pass health-check readiness before cutover; if readiness fails or times out, the old process stays running. - Fixed Windows HTTP metrics response handling by explicitly shutting down the stream after flushing, avoiding connection reset failures in tests. - Improved CI reliability for process-manager tests on slower runners by extending long-running test fixtures. ### Validation and UX - `oxmgr validate` now accepts both `oxfile.toml` and local ecosystem configs, including JS-based PM2 configs. - Added validation for invalid watch combinations, relative watch paths without `cwd`, invalid `ignore_watch` patterns, and invalid readiness settings. - Expanded `oxmgr status` output with watch paths, ignore patterns, watch delay, wait-ready, and ready-timeout details. ### Documentation - Updated the README, CLI reference, and Oxfile docs to cover ecosystem JS support, config-driven watch settings, and readiness-aware reloads. ### Testing - Added unit and end-to-end coverage for ecosystem JS parsing, profile overrides, watch validation, readiness-aware reload success and failure paths, delayed watch restarts, and Windows HTTP metrics behavior. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.2...v0.1.3 ## v0.1.2 - 2026-03-03 This release focuses on observability, benchmark publishing, and project maintenance improvements. ### Added - Added a Prometheus-compatible `GET /metrics` endpoint on the daemon HTTP API. - Added per-process Prometheus metrics for process state, restart count, CPU, memory, PID, health status, and last-seen timestamps. - Added endpoint-level test coverage for the new metrics API, including HTTP response checks and Prometheus label escaping cases. - Added a machine-readable `benchmark.json` snapshot alongside the published benchmark report. - Added a security policy with supported-version and vulnerability-reporting guidance. - Added a Contributor Covenant Code of Conduct. - Added GitHub issue templates for bug reports and feature requests. ### Improved - Improved daemon readiness checks so `oxmgr` now verifies a real daemon ping response instead of only checking whether a TCP port is open. - Improved benchmark automation so the scheduled workflow now refreshes and publishes both Markdown and JSON benchmark snapshots. - Improved the benchmark harness with a stable JSON export format for downstream tooling and comparisons. ### Benchmarks - Added `benchmark.json` as a tracked machine-readable benchmark snapshot. - Updated the latest published benchmark snapshot in `BENCHMARK.md`. - Updated the benchmark workflow artifacts to publish both summary and JSON outputs. ### Documentation - Documented the new Prometheus metrics endpoint and daemon HTTP API behavior. - Added Prometheus scrape examples and clarified `OXMGR_API_ADDR` usage across the docs. - Updated README and docs index links to include the metrics guide and benchmark JSON snapshot. ### Project - Added a formal security disclosure process. - Added community contribution standards and better issue intake templates. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.1...v0.1.2 ## v0.1.1 - 2026-03-01 This release focuses on restart behavior fixes, benchmark coverage, and documentation improvements. ### Fixed - Fixed crash auto-restart behavior: `--restart-delay 0` now truly means immediate restart after an unexpected exit, with no hidden minimum delay. - Improved daemon restart scheduling so pending restarts are handled more precisely. - Added regression coverage for crash recovery and PID replacement, including end-to-end tests. ### Benchmarks - Added an `oxmgr` vs `pm2` benchmark harness. - Added a GitHub Actions workflow for scheduled and manual benchmark runs. - Added `BENCHMARK.md` with the latest published benchmark snapshot. ### Documentation - Added a new architecture overview. - Added benchmark documentation and reproducible benchmark workflow docs. - Clarified CLI and usage docs around `--restart-delay 0`. - Expanded inline documentation across core modules. **Full Changelog**: https://github.com/Vladimir-Urik/OxMgr/compare/v0.1.0...v0.1.1 ## v0.1.0 - 2026-02-28 First public release of Oxmgr. This entry was assembled from a manual review of every non-merge commit from the initial project commit (`32fe539`, 2026-02-26) through the current `0.1.0` state (`82efba2`, 2026-02-28). ### What Oxmgr Is Oxmgr is a lightweight, cross-platform, language-agnostic process manager written in Rust. It is positioned as a PM2 alternative that works for Node.js apps, Python services, Go programs, Rust binaries, and shell commands while keeping a small footprint and a practical operational model. The project is built around a local daemon with persistent state, a CLI that can auto-start the daemon when needed, a native `oxfile.toml` desired-state workflow, and day-to-day operator features such as health checks, logs, reloads, process inspection, and deployment helpers. ### Highlights - Cross-platform process management for Linux, macOS, and Windows. - Core lifecycle commands: `start`, `stop`, `restart`, `reload`, `delete`, `list`, `status`, and `logs`. - Background daemon with local IPC, persistent state, graceful shutdown, daemon stop support, and captured stdout/stderr logs. - Config-first workflows with native `oxfile.toml`, profile overlays, defaults, dependency ordering, multi-instance expansion, selective apply, validation, and pruning. - PM2 migration helpers through `ecosystem.config.json` import and conversion to native Oxfile format. - Health checks, restart policies, crash-loop protection, working-directory watch mode, resource limits, and CPU/RAM monitoring. - Linux cgroup v2 hard-limit enforcement and best-effort GPU denial support for constrained workloads. - Git-aware operations with `pull`, per-service git metadata, webhook-triggered pulls, and reload/restart only when revisions change. - Interactive terminal UI with fleet summary, keyboard and mouse controls, in-UI process creation, detailed process pane, and fullscreen log viewer. - Bundle export/import via `.oxpkg`, including remote HTTPS bundle import with optional SHA-256 pinning. - PM2-style remote deployment support with setup, update, revert, history inspection, one-off command execution, and multi-host parallelism. - Service installation for `systemd`, `launchd`, and Windows Task Scheduler, plus guided startup instructions and diagnostics. - Release and packaging pipeline for GitHub Releases, npm, Homebrew, Chocolatey, and Debian/Ubuntu APT. ### Changes Since The First Commit #### Core Runtime Foundation - Bootstrapped the project with a complete daemon/CLI architecture instead of a minimal skeleton. - Shipped core process lifecycle management from day one: start, stop, restart, reload, delete, list, logs, and status. - Added restart policies (`always`, `on-failure`, `never`), max restart budgets, graceful termination, CPU/RAM metrics, and best-effort zero-downtime reloads. - Implemented persistent local state, per-process stdout/stderr logging, and daemon auto-start from the CLI when commands require it. - Added Oxfile parsing, validation, idempotent `apply`, dependency-aware ordering, namespaces, instance expansion, and PM2 ecosystem import/convert support in the initial project foundation. #### Platform Integration And Diagnostics - Added daemon shutdown IPC support so the background runtime can be stopped cleanly. - Expanded runtime logging and test logging to make failures and command output easier to inspect. - Added `startup` guidance and full `service install|uninstall|status` flows for `systemd`, `launchd`, and Windows Task Scheduler. - Improved platform-specific service generation with better systemd escaping, launchd path normalization, and safer Windows task termination timeouts. - Added `doctor` to verify local directories, write access, daemon address resolution, state file validity, and daemon responsiveness. #### Config Model And Runtime Safety - Added Linux cgroup support for hard resource-limit enforcement and `deny_gpu` handling for best-effort GPU isolation. - Added crash-loop protection through `crash_restart_limit`, including reset semantics on manual `start`, `restart`, and `reload`. - Added config fingerprinting so `apply` can distinguish real process-definition drift from unchanged desired state more reliably. - Improved working-directory handling during command execution and tightened error paths around import/start flows. - Added test coverage for env parsing, health-check normalization, IPC response handling, state persistence, cgroup behavior, and end-to-end CLI flows. #### Operator Experience - Improved `list` and `status` output formatting and extracted shared UI rendering helpers. - Added command aliases such as `ls`, `ps`, `rs`, `rm`, and `log`, along with more structured grouped help output. - Introduced `oxmgr ui` with configurable refresh rate, fleet summary, process actions, create modal, help overlay, mouse support, and a fullscreen log viewer. - Improved log source selection by tracking file modification times so both `logs` and the UI prefer the freshest output. - Expanded user-facing documentation across installation, CLI reference, UI guide, usage guide, Oxfile guidance, bundle docs, and PM2 migration notes. #### Git, Deploy, And Portability Workflows - Added cluster mode for Node.js services with configurable worker count. - Added bundle export/import and documented `.oxpkg` as the portable service definition format. - Added PM2-style remote deploy support with config auto-discovery, lifecycle hooks, ref-based deploys, revert support, and parallel multi-host execution. - Added `pull` for git-backed services plus a local webhook API (`POST /pull/`) secured by hashed pull secrets. - Added change-aware pull behavior so services reload or restart only when the checked-out revision actually changed. - Added remote HTTPS bundle import with safer URL validation, maximum payload checks, and optional SHA-256 checksum pinning. #### Release Engineering And Maintenance - Added CI and release automation for GitHub Releases, platform binaries, Debian packages, npm publishing, Homebrew formula updates, Chocolatey packages, and APT repository publishing. - Switched build version injection to a dynamic release-time build version. - Refined GitHub Actions release conditions and updated macOS build targeting in the release workflow. - Added download metrics automation and a static dashboard generator for package/release distribution visibility. - Added `CONTRIBUTING.md`, Dependabot configuration, and dependency updates for `thiserror`, `nix`, `json5`, `toml`, and `sysinfo`. - Refreshed installation instructions, README content, and package-manager-facing documentation ahead of the first public release. ### Notes - Cluster mode currently supports `node