{"id":30856949,"url":"https://github.com/jackd248/composer-dependency-age","last_synced_at":"2025-09-07T12:44:15.234Z","repository":{"id":313055846,"uuid":"1047388771","full_name":"jackd248/composer-dependency-age","owner":"jackd248","description":"🕰️ A Composer plugin that analyzes the age of your project dependencies.","archived":false,"fork":false,"pushed_at":"2025-09-03T15:57:59.000Z","size":281,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-09-03T17:40:50.803Z","etag":null,"topics":["composer","composer-plugin"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jackd248.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T10:02:23.000Z","updated_at":"2025-09-03T15:58:03.000Z","dependencies_parsed_at":"2025-09-03T17:41:01.242Z","dependency_job_id":"a3f932c4-0fcc-45f9-9c3e-ac6ecd1e0834","html_url":"https://github.com/jackd248/composer-dependency-age","commit_stats":null,"previous_names":["jackd248/composer-dependency-age"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/jackd248/composer-dependency-age","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackd248%2Fcomposer-dependency-age","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackd248%2Fcomposer-dependency-age/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackd248%2Fcomposer-dependency-age/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackd248%2Fcomposer-dependency-age/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jackd248","download_url":"https://codeload.github.com/jackd248/composer-dependency-age/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jackd248%2Fcomposer-dependency-age/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274039529,"owners_count":25211901,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer","composer-plugin"],"created_at":"2025-09-07T12:44:12.544Z","updated_at":"2025-09-07T12:44:15.208Z","avatar_url":"https://github.com/jackd248.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Composer Dependency Age\n\n[![Coverage](https://img.shields.io/coverallsCoverage/github/jackd248/composer-dependency-age?logo=coveralls)](https://coveralls.io/github/jackd248/composer-dependency-age)\n[![CGL](https://img.shields.io/github/actions/workflow/status/jackd248/composer-dependency-age/cgl.yml?label=cgl\u0026logo=github)](https://github.com/jackd248/composer-dependency-age/actions/workflows/cgl.yml)\n[![Tests](https://img.shields.io/github/actions/workflow/status/jackd248/composer-dependency-age/tests.yml?label=tests\u0026logo=github)](https://github.com/jackd248/composer-dependency-age/actions/workflows/tests.yml)\n[![Supported PHP Versions](https://img.shields.io/packagist/dependency-v/konradmichalik/composer-dependency-age/php?logo=php)](https://packagist.org/packages/konradmichalik/composer-dependency-age)\n\n\u003c/div\u003e\n\nA Composer plugin that analyzes the age of your project dependencies and provides neutral categorization to help you understand your dependency landscape. No risk assessment - just clear, objective information about when your dependencies were last released.\n\n\u003e [!warning]\n\u003e This package is in early development stage and may change significantly in the future. I am working steadily to release a stable version as soon as possible.\n\n\u003e [!note]\n\u003e Understanding the age of your dependencies is crucial for maintaining a healthy codebase.\n\u003e While newer isn't always better, knowing when your dependencies were last updated helps you make informed decisions about maintenance, security planning, and technical debt management.\n\u003e This tool provides objective age categorization without making assumptions about what you should do - empowering you to prioritize updates based on your project's specific needs, risk tolerance and maintenance windows.\n\n## ✨ Features\n\n- **Neutral Age Analysis** - Categorizes dependencies as Current, Medium, or Old based on release dates\n- **Release Cycle Analysis** - Analyzes dependency activity patterns with 4-tier activity rating\n- **Multiple Output Formats** - CLI table, JSON for automation, GitHub-formatted for PRs\n- **Flexible Filtering** - Analyze all dependencies or focus on direct ones only\n- **Smart Caching** - Caches Packagist API responses with configurable TTL for better performance\n- **CI/CD Ready** - Perfect for automated dependency auditing in your build pipelines\n- **Highly Configurable** - Customize thresholds, ignore lists, and output preferences\n\n## 🔥 Installation\n\n```bash\ncomposer require konradmichalik/composer-dependency-age --dev\n```\n\n## 📊 Usage\n\n### Command\nRun the command to fully analyze your dependencies:\n\n```bash\ncomposer dependency-age\n```\n\n### Automatic Analysis\nThe plugin automatically runs after `composer install` and `composer update` operations, providing immediate feedback on your dependency landscape.\n\n```shell\n$ composer install\n...\nDependency age ~ // 21.9 years in total (9 months average per package). Use composer dependency-age for full details.\n...\n```\n\n## 📝 Configuration\n\n### Command Line Options\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `--format` | Output format: cli, json, github | cli |\n| `--direct` | Show only direct dependencies | false |\n| `--no-dev` | Exclude development dependencies | false |\n| `--no-colors` | Disable color output | false |\n| `--no-cache` | Disable caching | false |\n| `--offline` | Use cached data only | false |\n| `--ignore` | Comma-separated packages to ignore | - |\n| `--thresholds` | Custom age thresholds (years) | current=0.5,medium=1.0,old=2.0 |\n| `--no-release-cycles` | Disable release cycle analysis | false |\n\n### Configuration via composer.json\n\n```json\n{\n  \"extra\": {\n    \"dependency-age\": {\n      \"thresholds\": {\n        \"current\": 0.5,\n        \"medium\": 1.0,\n        \"old\": 2.0\n      },\n      \"ignore\": [\"psr/log\", \"psr/container\"],\n      \"output_format\": \"cli\",\n      \"include_dev\": false,\n      \"cache_ttl\": 2592000,\n      \"event_integration\": true,\n      \"event_operations\": [\"install\", \"update\"],\n      \"event_force_without_cache\": false,\n      \"enable_release_cycle_analysis\": true,\n      \"release_history_months\": 24\n    }\n  }\n}\n```\n\n## 📈 Age Categories\n\n| Category | Sign | Timeframe | Description |\n|----------|------|-----------|-------------|\n| Current | ✓    | ≤ 6 months | Recently released dependencies |\n| Medium | ~️   | ≤ 12 months | Moderately aged dependencies |\n| Old | !    | \u003e 12 months | Dependencies released over a year ago |\n| Unknown | ?    | - | Dependencies without release date information |\n\n### Overall Project Rating\n\nThe overall rating in the summary is calculated based on the distribution of your dependencies:\n\n| Rating | Symbol | Logic | Description |\n|--------|-------|-------|-------------|\n| **Mostly Current** | ✓ | ≥ 70% Current packages | Your project uses predominantly recent dependencies |\n| **Needs Attention** | ! | ≥ 30% Old packages | Significant portion of dependencies are outdated |\n| **Moderately Current** | ~️ | All other cases | Balanced mix of current and older dependencies |\n\n## 🔄 Release Cycle Analysis\n\nThe plugin analyzes the release patterns of your dependencies to provide insights into their maintenance activity:\n\n### Activity Categories\n\n| Activity Level | Rating | Release Frequency | Description |\n|----------------|--------|-------------------|-------------|\n| **Very Active** | ●●● | ≤ 60 days | Highly active development with frequent releases |\n| **Active** | ●●○ | ≤ 180 days | Regular maintenance with consistent releases |\n| **Moderate** | ●○○ | ≤ 365 days | Periodic updates with moderate activity |\n| **Slow/Inactive** | ○○○ | \u003e 365 days | Infrequent releases or maintenance |\n\n### Release Trend Detection\n\nThe analysis also detects release trends:\n- **Accelerating** - Release frequency is increasing\n- **Slowing** - Release frequency is decreasing\n- **Stable** - Consistent release pattern\n- **Unknown** - Insufficient data for trend analysis\n\n### Configuration Options\n\n- **`enable_release_cycle_analysis`** - Enable/disable release cycle analysis (default: `true`)\n- **`release_history_months`** - Months of release history to analyze (default: `24`, range: 1-60)\n- **`--no-release-cycles`** - Command line flag to disable analysis for faster execution\n\n## 🧑‍💻 Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## ⭐ License\n\nThis project is licensed under the GNU General Public License v3.0 - see the [LICENSE](LICENSE.md) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackd248%2Fcomposer-dependency-age","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjackd248%2Fcomposer-dependency-age","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjackd248%2Fcomposer-dependency-age/lists"}