PHPackages                             survos/installer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. survos/installer

AbandonedComposer-plugin[Utility &amp; Helpers](/categories/utility)

survos/installer
================

Composer plugin for installing configuration files and updating .env and .gitignore, based on survos/installer

2.1.7(6mo ago)03.8k↓83.3%4MITPHPPHP ^8.4

Since Apr 8Pushed 3w agoCompare

[ Source](https://github.com/survos/installer)[ Packagist](https://packagist.org/packages/survos/installer)[ GitHub Sponsors](https://github.com/kbond)[ RSS](/packages/survos-installer/feed)WikiDiscussions tac Synced yesterday

READMEChangelog (10)Dependencies (5)Versions (49)Used By (4)

survos/installer
================

[](#survosinstaller)

*By [survos](https://github.com/survos)*

A Composer plugin that applies a bundle's **recipe** to the host project on install/update, and reverses it on removal — a lightweight, in-bundle stand-in for [symfony/recipes-contrib](https://github.com/symfony/recipes-contrib).

Forked from [endroid/installer](https://github.com/endroid/installer), which only copies files. This fork adds the rest of what a Flex recipe does: merging `.env` and `.gitignore`, printing post-install notes, and undoing all of it when the package is removed.

Why this exists
---------------

[](#why-this-exists)

Recipes-contrib is the "real" mechanism, but it lives in a **separate repo** and must be kept in lockstep with every bundle release. During active development that round-trip is painful. This plugin lets a bundle **carry its own recipe**(`recipe/` at the package root), so the recipe ships and versions with the code.

The recipe format is **identical to a Symfony Flex recipe** (`recipe/manifest.json`). That is deliberate: when a bundle stabilizes, publishing to [survos/recipes](https://github.com/survos/recipes) is just copying the `recipe/`directory into the recipes repo — no format conversion. The plugin is the stopgap; recipes-contrib is the destination.

What it does
------------

[](#what-it-does)

On `composer require` / `composer update` of a package that contains a `recipe/`:

- **`env`** — adds variables to the project `.env` inside a scoped block `###> vendor/package ###` … `###< vendor/package ###` (comments preserved).
- **`gitignore`** — adds patterns to `.gitignore` in the same scoped-block style.
- **`copy-from-recipe`** — copies recipe files into the project, **never overwriting** files the user already has.
- **`post-install-output`** — prints the next-steps block to the console.

On `composer remove`, each of the above is **reversed**: scoped blocks are stripped from `.env`/`.gitignore` and recipe-copied files are removed (only if unchanged), leaving user edits intact.

Recipe layout
-------------

[](#recipe-layout)

```
my-bundle/
└── recipe/
    ├── manifest.json
    └── config/
        └── packages/
            └── survos_bunny.yaml

```

### `recipe/manifest.json`

[](#recipemanifestjson)

Standard Flex manifest format:

```
{
    "bundles": {
        "Survos\\BunnyBundle\\SurvosBunnyBundle": ["all"]
    },
    "copy-from-recipe": {
        "config/": "%CONFIG_DIR%/"
    },
    "env": {
        "BUNNY_API_KEY": ""
    },
    "gitignore": [
        "/var/bunny/"
    ],
    "post-install-output": [
        "  * Next steps:",
        "    1. Get your main API key at https://dash.bunny.net/account/api-key",
        "    2. bin/console bunny:config  (or set BUNNY_API_KEY)",
        "    3. bin/console bunny:list"
    ]
}
```

The resulting `.env` block:

```
###> survos/bunny-bundle ###
BUNNY_API_KEY=
###< survos/bunny-bundle ###
```

Installation
------------

[](#installation)

```
composer config allow-plugins.survos/installer true
composer require survos/installer
```

For local development against a path checkout:

```
composer config repositories.survos_installer '{"type": "path", "url": "../installer"}'
composer require survos/installer:dev-main
```

Disabling for specific packages
-------------------------------

[](#disabling-for-specific-packages)

```
{
    "extra": {
        "survos": {
            "installer": {
                "enabled": true,
                "exclude": [
                    "survos/asset",
                    "survos/embed"
                ]
            }
        }
    }
}
```

Status
------

[](#status)

Under active development — see [PLAN.md](PLAN.md). The recipe-format decision (Flex `manifest.json`) and testing strategy are settled there; the code is mid-migration from an older multi-directory convention.

Versioning
----------

[](#versioning)

MAJOR.MINOR.PATCH. Lock your dependencies for production and test on upgrade.

License
-------

[](#license)

MIT. See the [LICENSE](LICENSE) file.

###  Health Score

57

—

FairBetter than 98% of packages

Maintenance82

Actively maintained with recent releases

Popularity19

Limited adoption so far

Community19

Small or concentrated contributor base

Maturity94

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 67.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~62 days

Recently: every ~37 days

Total

46

Last Release

206d ago

Major Versions

1.4.5 → 2.02024-11-18

PHP version history (9 changes)1.0.0PHP &gt;=7.1

1.1.4PHP &gt;=7.2

1.3.0PHP ^7.4||^8.0

1.3.1PHP ^7.3||^8.0

1.4.1PHP ^8.0

1.4.3PHP ^8.1

2.0PHP ^8.2

2.1PHP ^8.3

2.1.5PHP ^8.4

### Community

Maintainers

![](https://www.gravatar.com/avatar/21b39551f92ed4143772c622f9e571589c5a72c96ab3c53fe67489ce0d83e806?d=identicon)[tacman1123](/maintainers/tacman1123)

---

Top Contributors

[![endroid](https://avatars.githubusercontent.com/u/537253?v=4)](https://github.com/endroid "endroid (80 commits)")[![tacman](https://avatars.githubusercontent.com/u/619585?v=4)](https://github.com/tacman "tacman (27 commits)")[![aminenaro](https://avatars.githubusercontent.com/u/103141798?v=4)](https://github.com/aminenaro "aminenaro (7 commits)")[![Seldaek](https://avatars.githubusercontent.com/u/183678?v=4)](https://github.com/Seldaek "Seldaek (2 commits)")[![ThomasLandauer](https://avatars.githubusercontent.com/u/1054469?v=4)](https://github.com/ThomasLandauer "ThomasLandauer (2 commits)")[![COil](https://avatars.githubusercontent.com/u/177844?v=4)](https://github.com/COil "COil (1 commits)")

### Embed Badge

![Health badge](/badges/survos-installer/health.svg)

```
[![Health](https://phpackages.com/badges/survos-installer/health.svg)](https://phpackages.com/packages/survos-installer)
```

###  Alternatives

[phpro/grumphp

A composer plugin that enables source code quality checks.

4.3k16.7M1.0k](/packages/phpro-grumphp)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

103519.9k53](/packages/friendsoftypo3-content-blocks)[oro/platform

Business Application Platform (BAP)

645143.5k115](/packages/oro-platform)[altis/local-server

Local Server module for Altis

18221.6k3](/packages/altis-local-server)[blackfire/player

A powerful web crawler and web scraper with Blackfire support

49617.1k](/packages/blackfire-player)[lullabot/drainpipe

An automated build tool to allow projects to have a set standardized operations scripts.

43785.5k4](/packages/lullabot-drainpipe)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
