Skip to content

v0.5.0

Latest

Choose a tag to compare

@Vladimir-Urik Vladimir-Urik released this 09 Jul 00:19
· 24 commits to master since this release

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.
  • 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 <log_dir>/<name>.out.log / <name>.err.log (or <name>.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).
  • 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).
  • 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

New Contributors

What's Changed

  • chore(deps): bump tokio from 1.52.1 to 1.52.2 by @dependabot[bot] in #46
  • chore(deps): bump sysinfo from 0.38.4 to 0.39.0 by @dependabot[bot] in #45
  • chore(deps): bump sysinfo from 0.39.0 to 0.39.2 by @dependabot[bot] in #55
  • chore(deps): bump nix from 0.31.2 to 0.31.3 by @dependabot[bot] in #54
  • chore(deps): bump tokio from 1.52.2 to 1.52.3 by @dependabot[bot] in #52
  • chore(deps): bump regex from 1.12.3 to 1.12.4 by @dependabot[bot] in #62
  • chore(deps): bump sysinfo from 0.39.2 to 0.39.3 by @dependabot[bot] in #61
  • chore(deps): bump serial_test from 3.4.0 to 3.5.0 by @dependabot[bot] in #59
  • chore(deps): bump serde_json from 1.0.149 to 1.0.150 by @dependabot[bot] in #57
  • chore(deps): bump chrono from 0.4.44 to 0.4.45 by @dependabot[bot] in #60
  • feat(cli): add oxmgr ls --json to emit process list as JSON array by @kvndrsslr in #66
  • chore(deps): bump anyhow from 1.0.102 to 1.0.103 by @dependabot[bot] in #68
  • chore(deps): bump sysinfo from 0.39.3 to 0.39.5 by @dependabot[bot] in #67

New Contributors

Full Changelog: v0.4.0...v0.5.0