{"id":20684563,"url":"https://github.com/php-forge/foxy","last_synced_at":"2026-01-25T00:01:39.170Z","repository":{"id":218120738,"uuid":"745652761","full_name":"php-forge/foxy","owner":"php-forge","description":"A fast, reliable, and secure BUN/NPM/Yarn/PNpM bridge for Composer.","archived":false,"fork":false,"pushed_at":"2025-03-13T13:04:08.000Z","size":235,"stargazers_count":45,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T13:09:33.920Z","etag":null,"topics":["assets","bun","npm","php","pnpm","yarn"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/php-forge.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","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},"funding":{"github":["terabytesoftw"]}},"created_at":"2024-01-19T19:54:43.000Z","updated_at":"2025-03-13T13:03:11.000Z","dependencies_parsed_at":"2024-05-22T13:29:24.007Z","dependency_job_id":"ccb10ab0-edec-493b-9d71-6791a44dd367","html_url":"https://github.com/php-forge/foxy","commit_stats":{"total_commits":53,"total_committers":3,"mean_commits":"17.666666666666668","dds":"0.39622641509433965","last_synced_commit":"27ec552110e0857e4a0dba3331b59fc99bfe9edd"},"previous_names":["php-forge/foxy"],"tags_count":4,"template":false,"template_full_name":"yii-tools/template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Ffoxy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Ffoxy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Ffoxy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-forge%2Ffoxy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php-forge","download_url":"https://codeload.github.com/php-forge/foxy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247345853,"owners_count":20924102,"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","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":["assets","bun","npm","php","pnpm","yarn"],"created_at":"2024-11-16T22:22:53.810Z","updated_at":"2026-01-25T00:01:39.164Z","avatar_url":"https://github.com/php-forge.png","language":"PHP","funding_links":["https://github.com/sponsors/terabytesoftw"],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD041 --\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/php-forge/support\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/u/103309199?s=400\u0026u=ca3561c692f53ed7eb290d3bb226a2828741606f\u0026v=4\" height=\"150px\" alt=\"PHP Forge\"\u003e\n    \u003c/a\u003e\n    \u003ch1 align=\"center\"\u003eFoxy\u003c/h1\u003e\n    \u003cbr\u003e\n\u003c/p\u003e\n\u003c!-- markdownlint-enable MD041 --\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/php-forge/foxy/actions/workflows/build.yml\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/php-forge/foxy/build.yml?style=for-the-badge\u0026label=PHPUnit\u0026logo=github\" alt=\"PHPUnit\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://dashboard.stryker-mutator.io/reports/github.com/php-forge/foxy/main\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/endpoint?style=for-the-badge\u0026url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fphp-forge%2Ffoxy%2Fmain\" alt=\"Mutation Testing\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/php-forge/foxy/actions/workflows/ecs.yml\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/php-forge/foxy/ecs.yml?style=for-the-badge\u0026label=ECS\u0026logo=github\" alt=\"Easy Coding Standard\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/php-forge/foxy/actions/workflows/dependency-check.yml\" target=\"_blank\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/php-forge/foxy/dependency-check.yml?style=for-the-badge\u0026label=Dependency%20Check\u0026logo=github\" alt=\"Dependency Check\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cstrong\u003eFoxy is a Composer plugin that aggregates asset dependencies from Composer packages into a single package.json and runs Bun, npm, Yarn, or pnpm while preserving the Composer state on failures.\u003c/strong\u003e\n\u003c/p\u003e\n\n## Features\n\n\u003cpicture\u003e\n    \u003csource media=\"(min-width: 768px)\" srcset=\"./docs/svgs/features.svg\"\u003e\n    \u003cimg src=\"./docs/svgs/features-mobile.svg\" alt=\"Feature Overview\" style=\"width: 100%;\"\u003e\n\u003c/picture\u003e\n\n## Installation\n\n```bash\ncomposer require php-forge/foxy:^0.1\n```\n\nManager can be `bun`, `npm`, `yarn` or `pnpm`. For default, `npm` is used.\n\n```json\n{\n    \"require\": {\n        \"php-forge/foxy\": \"^0.1\"\n    },\n    \"config\": {\n        \"foxy\": {\n            \"manager\": \"bun\"\n        }\n    }\n}\n```\n\n## Quick start\n\n### Standard PHP project (Yii2)\n\nIn a standard PHP application, keep a `package.json` file at the project root. Foxy will merge asset dependencies from\ninstalled Composer packages and run the configured manager during Composer install and update.\n\nExample (Yii2 app template):\n\n[Yii2 app template](https://github.com/yiisoft/yii2-app-basic/tree/22)\n\n```json\n{\n    \"require\": {\n        \"php-forge/foxy\": \"^0.1\"\n    },\n    \"config\": {\n        \"foxy\": {\n            \"manager\": \"npm\"\n        }\n    }\n}\n```\n\n### Drupal layout (package.json under web/)\n\nIn a typical Drupal proof-of-concept workflow, Composer stays at the repository root while frontend tooling and builds\nlive under `web/`.\n\nFoxy lets you keep that layout while still aggregating asset dependencies and running npm in the correct directory, with\nComposer state preserved if the install fails.\n\n- Aggregates asset dependencies declared by Composer packages into a single npm install.\n- Keeps asset tooling configuration consistent across local and CI environments.\n- Restores Composer lock and PHP dependencies if npm exits with an error.\n- Runs npm against the `web/` package.json without moving Composer files.\n\n```json\n{\n    \"config\": {\n        \"foxy\": {\n            \"manager\": \"npm\",\n            \"root-package-json-dir\": \"web\"\n        }\n    }\n}\n```\n\n## Documentation\n\n- [Guide](resources/doc/index.md)\n- [Usage](resources/doc/usage.md)\n- [Configuration](resources/doc/config.md)\n- [Events](resources/doc/events.md)\n- [FAQs](resources/doc/faqs.md)\n- [Development Guide](docs/development.md)\n- [Testing Guide](docs/testing.md)\n- [Release Notes](https://github.com/php-forge/foxy/releases)\n\n## Package information\n\n[![PHP](https://img.shields.io/badge/%3E%3D8.1-777BB4.svg?style=for-the-badge\u0026logo=php\u0026logoColor=white)](https://www.php.net/releases/8.1/en.php)\n[![Latest Stable Version](https://img.shields.io/packagist/v/php-forge/foxy.svg?style=for-the-badge\u0026logo=packagist\u0026logoColor=white\u0026label=Stable)](https://packagist.org/packages/php-forge/foxy)\n[![Total Downloads](https://img.shields.io/packagist/dt/php-forge/foxy.svg?style=for-the-badge\u0026logo=composer\u0026logoColor=white\u0026label=Downloads)](https://packagist.org/packages/php-forge/foxy)\n\n## Quality code\n\n[![Codecov](https://img.shields.io/codecov/c/github/php-forge/foxy.svg?style=for-the-badge\u0026logo=codecov\u0026logoColor=white\u0026label=Coverage)](https://codecov.io/gh/php-forge/foxy)\n[![PHPStan Level Max](https://img.shields.io/badge/PHPStan-Level%205-4F5D95.svg?style=for-the-badge\u0026logo=github\u0026logoColor=white)](https://github.com/php-forge/foxy/actions/workflows/static.yml)\n[![Super-Linter](https://img.shields.io/github/actions/workflow/status/php-forge/foxy/linter.yml?style=for-the-badge\u0026label=Super-Linter\u0026logo=github)](https://github.com/php-forge/foxy/actions/workflows/linter.yml)\n[![Dependency Check](https://img.shields.io/github/actions/workflow/status/php-forge/foxy/dependency-check.yml?style=for-the-badge\u0026label=Dependency%20Check\u0026logo=github)](https://github.com/php-forge/foxy/actions/workflows/dependency-check.yml)\n\n## Our social networks\n\n[![Follow on X](https://img.shields.io/badge/-Follow%20on%20X-1DA1F2.svg?style=for-the-badge\u0026logo=x\u0026logoColor=white\u0026labelColor=000000)](https://x.com/Terabytesoftw)\n\n## License\n\n[![License](https://img.shields.io/badge/License-BSD--3--Clause-brightgreen.svg?style=for-the-badge\u0026logo=opensourceinitiative\u0026logoColor=white\u0026labelColor=555555)](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-forge%2Ffoxy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp-forge%2Ffoxy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-forge%2Ffoxy/lists"}