PVM - PHP Version Manager for windows

by
PVM is a lightweight PHP Version Manager for Windows. Install, switch, and manage multiple PHP versions — plus extensions and ini settings — all from PowerShell, no dependencies required.

Add a comment

Replies

Best
Maker
📌
I built PVM (PHP Version Manager) because switching PHP versions on Windows has always been a clunky, manual process. Most tools are either Linux/macOS-focused or too heavy for quick, developer-friendly usage. I wanted something lightweight, fast, and native to Windows — no WSL, no complicated setups, just a simple PowerShell tool that works out of the box. What’s new and unique is that PVM doesn’t just switch PHP versions — it also manages extensions, php.ini settings, and paths in a way that feels tailored for Windows developers. You can install, enable/disable extensions, and tweak php.ini without digging into folders or restarting services. It’s also designed to be easy to extend, so anyone can add their own commands. I’m most proud that this launch is completely self-contained and dependency-free — no installers, no background services. Just drop it in, and you’re managing multiple PHP versions in minutes. It’s fast, it’s developer-focused, and it finally gives Windows PHP devs the smooth workflow they’ve been missing.
Maker

Hey PHP people

PVM v2.5.0 is here!

New Features

  • Install PHP and extensions by OS architecture (x86/x64)

  • Filter PHP versions and installs by build type (NTS/TS)

  • Profile management command to save and load predefined configurations

  • Get-OrUpdateCache helper for cleaner cache management

  • Xdebug: arch/buildtype metadata, sorting, compiler version display, and alpha version support

  • Include NTS versions in PHP listing and install commands

Improvements

  • Refactored install, uninstall, use, and list commands for clarity

  • Extension fetching now handles multi-page categories and caches heavy requests

  • Smarter arch and buildtype resolution with dedicated helpers (Resolve-Arch, Resolve-BuildType)

  • Cache validity check with Can-Use-Cache

  • Improved test coverage across router, common, install, list, current, ini, and use modules

Bug Fixes

  • Fixed arch and buildtype filtering logic

  • Fixed HTTPS request issues on Windows 10 (fallback to HTTP)

  • Fixed dynamic property assignment and null object handling

  • Fixed various typos and function naming inconsistencies

  • Corrected extension existence check to prioritize ./ext directory before ini file

Maker

Hey PHP people

PVM v2.6.0 is here!

What's New

  • pvm aliases command — user-editable aliases persisted in JSON

  • pvm cache command — manage cache files

  • pvm repair command — recreate missing PVM dirs and files

  • pvm profile clear sub-command

  • pvm install latest — install latest PHP version

  • Colon-style nested command syntax (pvm ini:get, pvm ini:set, etc.)

  • pvm info now consolidates PVM status and paths

Improvements

  • Config refactored into unified $Global:PVMConfig nested hashtable

  • Extensions and settings helpers unified with Get-All-* / Get-Matching-* pattern

  • Start-PVM dispatch pipeline refactored; Resolve-FlagCommand as single source of truth for flag mapping

  • Resolve-Alias with comprehensive alias map and JSON persistence

  • Setup-PVM decomposed into New-PVM-Directories / New-PVM-Files

  • NTS build type support across install, list, and use commands

  • Pester test architecture standardized across all modules

  • Expanded documentation and examples.

Bug Fixes

  • Shallow copy bug in test config setup

  • PSCustomObject vs OrderedDictionary deserialization after JSON alias persistence

  • -match vs -contains fix on array flag resolution

  • ini-only extension detection fix

  • Added -NoProfile to pvm.bat and subprocess

Maker

Hey PHP people

PVM v2.7.0 is here!

🔊 Sound Notifications

  • Added optional sound notifications for command completion, test results, and failures

  • Added the SOUNDS_DISABLED environment flag to toggle notifications

  • Added --mute to temporarily disable sounds for individual test and run commands

  • Sounds are automatically disabled in subprocess mode

📜 Test Scripts

  • Added the new run command for executing reusable project scripts, similar to npm or Composer scripts

  • Added support for custom files in the run command

  • Scripts can be defined and customized through storage/data/templates/scripts.json

  • Added visual feedback with a spinner during script execution

⚡ Background Jobs & Performance

  • Added background jobs for long-running operations such as PHP version and extension data fetching

  • Added Show-SpinnerWhileJob for visual feedback during long-running operations

  • Improved job serialization and data handling

  • Improved responsiveness during network-bound operations

🔧 Improvements

🧹 PowerShell Naming Convention

  • Renamed functions to use approved PowerShell verbs and the Verb-Noun convention

  • Refactored related helpers and wrappers for improved consistency

  • Improved code consistency and maintainability

⚙️ Configuration & Data Handling

  • Added Copy-ObjectDeep for proper deep-copy operations

  • Added filtering of invalid arguments and flags

  • Improved extension search with description property checking

  • Improved caching for PHP versions and extension data, including cache validation and duplicate-file handling

🧪 Testing & Quality

  • Expanded test coverage for new features and refactored components

  • Improved compatibility across Windows PowerShell 5.1 and PowerShell 7+

  • Added support for testing against multiple Pester versions, including Pester 5.7 and 6

  • Improved test execution across different PowerShell/Pester combinations

  • Added tests for setFakePaths, sound notifications, wrappers, and new helpers

  • Improved test data validation with Test-HasData

  • Added total test count reporting

✨ User Experience

  • Refactored the help section and improved help output

  • Improved color selection and output formatting

  • Sorted extensions list before printing

  • Enhanced info command with environment and PVM configuration data

🐛 Bug Fixes

  • Fixed PVMConfig values being unintentionally overridden through shallow copies

  • Improved error handling for run scripts

  • Fixed argument handling for older PowerShell versions

  • Fixed child processes not being terminated when the parent process exits

📝 Documentation

  • Updated documentation for the new run command and test scripts

  • Added documentation for sound notifications and configuration

  • Updated profile examples and configuration files

  • Improved command help and usage information