Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Pretty Package Versions Laravel Package

jean85/pretty-package-versions

Lightweight wrapper to fetch human-friendly version strings for installed Composer dependencies. Works across Composer 1 and 2 with a smooth upgrade path, using the appropriate backend (InstalledVersions or package-versions-deprecated) as needed.

View on GitHub
Deep Wiki
Context7

Getting Started

Start by installing the package via Composer:

composer require 'jean85/pretty-package-versions:^1.5 || ^2.0'

Use the Jean85\PrettyVersions class to get version information for any installed dependency — for example, PrettyVersions::getVersion('phpunit/phpunit'). The returned Version object provides methods like getPrettyVersion() (e.g., '6.0.0') and __toString() (which implicitly calls getPrettyVersion()), making it trivial to display dependency versions in CLI tools, health checks, or error logs. For root project info, use PrettyVersions::getRootPackageVersion().

Implementation Patterns

  • Dependency Info in CLI Commands: Use in console commands (e.g., app:info) to display all major dependencies and versions cleanly.
  • Runtime Health Checks: Inject PrettyVersions::getVersion('some-critical-lib') into application health endpoints to validate exact versions.
  • Version-Specific Logic: Branch behavior based on version (e.g., '4.19' vs '5.0') using getShortVersion() or getPrettyVersion().
  • Developer Onboarding: Log versions of tools like laravel/framework, tightenco/jigsaw, or symfony/console to debug environment discrepancies.
  • Library Development: Require ^1.5 || ^2.0 to support both Composer 1 and 2 users, ensuring your library works across environments without forcing Composer upgrades.

Gotchas and Tips

  • Avoid Direct PackageVersions\Versions usage: This package provides stability across Composer versions and handles replaced/provided packages gracefully via exceptions (ProvidedPackageException, ReplacedPackageException).
  • Handle Edge Cases: Root or replaced packages may return NO_VERSION_TEXT (e.g., "dev-develop" without commit) — always use Version::NO_VERSION_TEXT and Version::NO_REFERENCE_TEXT constants for safe comparisons.
  • Deprecations in 2.x: The 2.x branch dropped PHP < 7.4 and Composer 1 support. Prefer getVersionWithShortReference() over deprecated getVersionWithShortCommit().
  • Root Package Gotcha: ROOT_PACKAGE_NAME is not guaranteed by Composer’s native API — use PrettyVersions::getRootPackageName() instead for reliability.
  • Tagged vs Development Versions: For non-tagged versions (e.g., dev-main@abc123), getPrettyVersion() falls back to getVersionWithShortReference() — handle in UI by stripping commit hash where needed.
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
davejamesmiller/laravel-breadcrumbs
artisanry/parsedown
christhompsontldr/phpsdk
enqueue/dsn
bunny/bunny
enqueue/test
enqueue/null
enqueue/amqp-tools
bower-asset/punycode
bower-asset/inputmask
bower-asset/jquery
bower-asset/yii2-pjax
laravel/nova
spatie/laravel-mailcoach
spatie/laravel-superseeder
laravel/liferaft
nst/json-test-suite
danielmiessler/sec-lists
jackalope/jackalope-transport
twbs/bootstrap4