PHPackages                             contao-community-alliance/composer-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. contao-community-alliance/composer-installer

Abandoned → [contao-community-alliance/composer-plugin](/?search=contao-community-alliance%2Fcomposer-plugin)ArchivedComposer-installer

contao-community-alliance/composer-installer
============================================

1.7.1(12y ago)03.3k220LGPLv3PHP

Since Apr 29Pushed 12y ago3 watchersCompare

[ Source](https://github.com/contao-community-alliance-archive/composer-installer)[ Packagist](https://packagist.org/packages/contao-community-alliance/composer-installer)[ RSS](/packages/contao-community-alliance-composer-installer/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (1)Versions (18)Used By (20)

ComposerInstaller
=================

[](#composerinstaller)

contao composer installer

Symlinks
--------

[](#symlinks)

Contao require a strict module structure. Composer install all dependencies into the `vendor` directory, using the complete repository structure. Both often not match each other.

To solve this problem, without making a lot of shadow copies the `contao-module` installer create symlinks.

**Hint for users**: Symlinks require a *good* server setup. To work with Apache2 the `FollowSymLinks` option is mostly required.

**Hint for developers**: PHP will follow symlinks by default, but using `__DIR__` or `__FILE__` will return the real path. You will get `composer/vendor/me/my-module/MyClass.php` instead of `system/modules/my-module/MyClass.php`.

**Hint for Windows users**: Symlinks on Windows require PHP 5.3+, but this is no real problem, because composer require PHP 5.3+ ;-)

Installing repository root as module `my-module`: **Hint**: This is the implicit fallback (`system/modules/$packageName`), if no symlinks specified!

```
{
	"extra": {
		"symlinks": {
			"": "system/modules/my-module"
		}
	}
}
```

Installing repository sub-path `src/system/modules/my-module` as module `my-module`:

```
{
	"extra": {
		"symlinks": {
			"src/system/modules/my-module": "system/modules/my-module"
		}
	}
}
```

Userfiles
---------

[](#userfiles)

Sometimes you need to provide user files (files within the `(tl_)files` directory). There is a support to install these user files. Normally these files can be modified by users. To protect user changes, user files are only copied if they are not exists. The installer will **never** overwrite a user file.

**Hint**: User files are installed into the `$uploadPath` directory, not `TL_ROOT`.

```
{
	"extra": {
		"userfiles": {
			"src/system/modules/my-module/files/images": "my-module/images"
		}
	}
}
```

Runonces
--------

[](#runonces)

Putting your `runonce.php` into your modules `config` directory is not a good idea in combination with composer. After contao runs the `runonce.php` it get deleted. Next time you do an update, composer complains about this modification. To solve this, you can define your `runcone.php`'s, yes you are right, you can use multiple `runonce.php` files. There is no need to name them `runonce.php`, feel free to use any other name.

```
{
	"extra": {
		"runonce": [
			"src/system/modules/my-module/runonce/init_update.php",
			"src/system/modules/my-module/runonce/do_db_update.php",
			"src/system/modules/my-module/runonce/refresh_entities.php"
		]
	}
}
```

**Hint**: The order of the runonce files is taken into account.

**Hint**: No, the installer will **not** support directories. This is just to protect unexpected behavior.

###  Health Score

37

—

LowBetter than 83% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity18

Limited adoption so far

Community31

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 82% 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 ~13 days

Recently: every ~3 days

Total

17

Last Release

4551d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/8672569?v=4)[California College of Arts](/maintainers/cca)[@cca](https://github.com/cca)

---

Top Contributors

[![tristanlins](https://avatars.githubusercontent.com/u/343404?v=4)](https://github.com/tristanlins "tristanlins (91 commits)")[![dominikzogg](https://avatars.githubusercontent.com/u/1011217?v=4)](https://github.com/dominikzogg "dominikzogg (9 commits)")[![backbone87](https://avatars.githubusercontent.com/u/1196313?v=4)](https://github.com/backbone87 "backbone87 (8 commits)")[![discordier](https://avatars.githubusercontent.com/u/940331?v=4)](https://github.com/discordier "discordier (3 commits)")

### Embed Badge

![Health badge](/badges/contao-community-alliance-composer-installer/health.svg)

```
[![Health](https://phpackages.com/badges/contao-community-alliance-composer-installer/health.svg)](https://phpackages.com/packages/contao-community-alliance-composer-installer)
```

PHPackages © 2026

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