{"id":49648424,"url":"https://github.com/php-fast-forward/composer-installers","last_synced_at":"2026-05-06T03:35:34.810Z","repository":{"id":354541422,"uuid":"1224086977","full_name":"php-fast-forward/composer-installers","owner":"php-fast-forward","description":"Composer installer plugin for Fast Forward resource bundles","archived":false,"fork":false,"pushed_at":"2026-04-29T01:32:17.000Z","size":25,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-29T02:35:07.085Z","etag":null,"topics":["composer","composer-plugin","developer-tools","fast-forward","installers","php"],"latest_commit_sha":null,"homepage":"https://php-fast-forward.github.io/composer-installers/","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-fast-forward.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","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":"AGENTS.md","dco":null,"cla":null},"funding":{"github":"php-fast-forward","custom":["https://www.paypal.com/donate/?business=JLDAF45XZ8D84"]}},"created_at":"2026-04-29T00:24:10.000Z","updated_at":"2026-04-29T01:31:59.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/php-fast-forward/composer-installers","commit_stats":null,"previous_names":["php-fast-forward/composer-installers"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/php-fast-forward/composer-installers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-fast-forward%2Fcomposer-installers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-fast-forward%2Fcomposer-installers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-fast-forward%2Fcomposer-installers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-fast-forward%2Fcomposer-installers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/php-fast-forward","download_url":"https://codeload.github.com/php-fast-forward/composer-installers/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/php-fast-forward%2Fcomposer-installers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32677932,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T02:33:58.958Z","status":"ssl_error","status_checked_at":"2026-05-06T02:33:39.611Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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","developer-tools","fast-forward","installers","php"],"created_at":"2026-05-06T03:35:30.412Z","updated_at":"2026-05-06T03:35:34.798Z","avatar_url":"https://github.com/php-fast-forward.png","language":"PHP","funding_links":["https://github.com/sponsors/php-fast-forward","https://www.paypal.com/donate/?business=JLDAF45XZ8D84"],"categories":[],"sub_categories":[],"readme":"# Fast Forward Composer Installers\n\nComposer installer plugin for Fast Forward resource bundle packages.\n\n`fast-forward/composer-installers` lets Fast Forward packages declare a payload\ndirectory and lets consumer roots choose where that payload is copied. The\npackage root still lives in `vendor/`, but only the declared payload contents\nare materialized into consumer-owned paths.\n\n## Resource Package Metadata\n\nResource packages use the `fast-forward-resource-bundle` type and declare the\npayload directory to copy. They may also declare how existing target files are\nhandled when the manifest is missing:\n\n```json\n{\n  \"type\": \"fast-forward-resource-bundle\",\n  \"extra\": {\n    \"fast-forward-bundle\": {\n      \"payload-path\": \".agents\",\n      \"install-policy\": \"mutable\"\n    }\n  }\n}\n```\n\n`install-policy` is optional and defaults to `mutable`.\n\n## Consumer Configuration\n\nConsumer repositories allow this Composer plugin and map resource packages to\ntarget directories:\n\n```json\n{\n  \"config\": {\n    \"allow-plugins\": {\n      \"fast-forward/composer-installers\": true\n    }\n  },\n  \"extra\": {\n    \"installer-paths\": {\n      \".agents/\": [\"fast-forward/agents\"],\n      \".github/workflows/\": [\"fast-forward/github-workflows\"]\n    }\n  }\n}\n```\n\nThe target path receives the payload contents. For `fast-forward/agents`, that\nmeans `.agents/agents` and `.agents/skills` are copied into the consumer project\nwithout creating `.agents/agents/.agents`.\n\n## Update Behavior\n\nThe installer writes a manifest under `vendor/fast-forward/.composer-installers`\nfor each materialized package. On package update, files listed in the manifest\nare refreshed from the new payload and stale managed files are removed. Files\nthat already exist in the target but are not tracked by the manifest are handled\naccording to the bundle install policy.\n\nThe `mutable` policy is the default. It adopts existing files when their content\nalready matches the payload and recreates the manifest, which makes `composer\ninstall` safe after deleting `vendor/`. If an existing file differs from the\npayload and no manifest marks it as managed, that path is skipped with a warning\ninstead of overwriting a consumer customization. The installer still materializes\nthe remaining payload entries and records only copied or adopted entries in the\nmanifest.\n\nThe `authoritative` policy is intended for generated or shared automation such\nas GitHub workflow bundles. It overwrites existing divergent target files and\nthen writes a fresh manifest, allowing committed workflow files to be refreshed\nafter a clean clone where `vendor/` has not been installed yet. Authoritative\nbundles should use package-specific target directories or clearly owned file\nnames, such as a `fast-forward-` prefix, so the installer only overwrites paths\nthat are intentionally controlled by the bundle. Non-empty consumer directories\nare not removed automatically; they are skipped with a warning.\n\nThe materialized payload is copied as literal files and directories. Composer\n`path` repositories may still symlink the package root in `vendor/`, but the\nconsumer-facing payload remains copied.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-fast-forward%2Fcomposer-installers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphp-fast-forward%2Fcomposer-installers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphp-fast-forward%2Fcomposer-installers/lists"}