skynet / installers
A multi-framework Composer library installer
Package info
gitverse.ru/skynet-core/installers.git
Type:composer-plugin
pkg:composer/skynet/installers
Requires
- php: >=8.1
- composer-plugin-api: ^1.0 || ^2.0
- hflabs/dadata: *
- html2text/html2text: ^4.3
- irazasyed/telegram-bot-sdk: 3.x-dev
- kub-at/php-simple-html-dom-parser: dev-master
- mobiledetect/mobiledetectlib: ^3.74.0
- neos/diff: ^8.3
- nette/utils: ^4.0
- respect/rest: 0.6.1
- spatie/array-to-xml: dev-main
Requires (Dev)
- composer/composer: *@dev
- phpunit/phpunit: 4.1.*
Suggests
None
Provides
None
Conflicts
None
Replaces
- roundcube/plugin-installer: *
- shama/baton: *
This package is auto-updated.
Last update: 2026-11-08 20:59:22 UTC
README
This is for PHP package authors to require in their composer.json. It will
install their package to the correct location based on the specified package
type.
The goal of Installers is to be a simple package type to install path map. Users can also customize the install path per package and package authors can modify the package name upon installing.
HostCMS: optional SkyNet Geo scaffold
The plugin can create a project connector from the templates shipped by
skynet/core-module. Both packages need versions containing this feature.
Enable it explicitly in the root project, preserving other configuration:
{
"config": {"allow-plugins": {"skynet/installers": true}},
"extra": {"skynet-geo": {"scaffold": true, "module": "um"}}
}
After install/update, an interactive run asks before creating missing files in
modules/um/geo. No is the default: Enter or n skips scaffolding without
failing the installation or changing project files/configuration. If module
is omitted, the plugin asks for it; an empty answer also declines. Complete
existing connectors need no prompt. Noninteractive runs scaffold only when
both scaffold=true and module are explicitly configured; a missing target is
skipped. To disable future prompts, set scaffold=false or remove the section.
Interactive decisions apply to the current run and do not rewrite composer.json.
Optional
"web-root": "public" chooses an existing public directory inside the Composer
project; it does not change package installation paths. Existing files and
project edits are preserved. Removing SkyNet never removes the project connector.
No configuration means no scaffold work; generated protection remains disabled.
The callback never boots HostCMS, changes nginx or creates runtime policies/secrets.
The handler uses POST_INSTALL_CMD/POST_UPDATE_CMD, also when packages are already
installed. Composer --dry-run does not scaffold. --no-scripts does not disable
plugin subscribers; use --no-plugins or set scaffold=false to skip this handler.
Existing custom installers and their locations are unchanged.
For a manual command, root-script fallback and setup instructions, see
modules/skynetcore/docs/geo/README.md and the generated connector README.
Installers isn't intended on replacing all custom installers. If your package requires special installation handling then by all means, create a custom installer to handle it.
Natively Supported Frameworks:
The following frameworks natively work with Composer and will be
installed to the default vendor directory. composer/installers
is not needed to install packages with these frameworks:
- Aura
- Symfony2
- Yii
- Yii2
Current Supported Package Types
Stable types are marked as bold, this means that installation paths for those type will not be changed. Any adjustment for those types would require creation of brand new type that will cover required changes.
| Framework | Types |
|---|---|
| Aimeos | aimeos-extension |
| Asgard | asgard-moduleasgard-theme |
| Attogram | attogram-module |
| AGL | agl-module |
| Bonefish | bonefish-package |
| AnnotateCms | annotatecms-moduleannotatecms-componentannotatecms-service |
| Bitrix | bitrix-module (deprecated) bitrix-component (deprecated) bitrix-theme (deprecated) bitrix-d7-module bitrix-d7-component bitrix-d7-template |
| CakePHP 2+ | cakephp-plugin |
| Chef | chef-cookbookchef-role |
| CCFramework | ccframework-shipccframework-theme |
| Cockpit | cockpit-module |
| CodeIgniter | codeigniter-librarycodeigniter-third-partycodeigniter-module |
| concrete5 | concrete5-coreconcrete5-packageconcrete5-themeconcrete5-blockconcrete5-update |
| Craft | craft-plugin |
| Croogo | croogo-plugincroogo-theme |
| Decibel | decibel-app |
| DokuWiki | dokuwiki-plugindokuwiki-template |
| Dolibarr | dolibarr-module |
| Drupal | drupal-coredrupal-moduledrupal-themedrupal-librarydrupal-profiledrupal-drush |
| Elgg | elgg-plugin |
| Eliasis | eliasis-module |
| ExpressionEngine 3 | ee3-addonee3-theme |
| eZ Platform | ezplatform-assetsezplatform-meta-assets |
| FuelPHP v1.x | fuel-modulefuel-package<br/>fuel-theme |
| FuelPHP v2.x | fuelphp-component |
| Grav | grav-plugingrav-theme |
| Hurad | hurad-pluginhurad-theme |
| ImageCMS | imagecms-templateimagecms-moduleimagecms-library |
| iTop | itop-extension |
| Joomla | joomla-componentjoomla-modulejoomla-templatejoomla-pluginjoomla-library |
| Kanboard | kanboard-plugin |
| Kirby | kirby-pluginkirby-fieldkirby-tag |
| KodiCMS | kodicms-pluginkodicms-media |
| Kohana | kohana-module |
| Lan Management System | lms-pluginlms-templatelms-document-templatelms-userpanel-module |
| Laravel | laravel-library |
| Lavalite | lavalite-themelavalite-package |
| Lithium | lithium-librarylithium-source |
| Magento | magento-librarymagento-skinmagento-theme |
| Mako | mako-package |
| Mautic | mautic-pluginmautic-theme |
| Maya | maya-module |
| MODX Evo | modxevo-snippetmodxevo-pluginmodxevo-modulemodxevo-templatemodxevo-lib |
| MediaWiki | mediawiki-extension |
| October | october-moduleoctober-pluginoctober-theme |
| OntoWiki | ontowiki-extensionontowiki-themeontowiki-translation |
| OXID | oxid-moduleoxid-themeoxid-out |
| Osclass | osclass-pluginosclass-themeosclass-language |
| MODULEWork | modulework-module |
| Moodle | moodle-* (Please check source for all supported types) |
| Piwik | piwik-plugin |
| phpBB | phpbb-extensionphpbb-stylephpbb-language |
| Pimcore | pimcore-plugin |
| Plentymarkets | plentymarkets-plugin |
| PPI | ppi-module |
| Puppet | puppet-module |
| Porto | porto-container |
| RadPHP | radphp-bundle |
| REDAXO | redaxo-addon |
| ReIndex | reindex-plugin reindex-theme |
| Roundcube | roundcube-plugin |
| shopware | shopware-backend-plugin<br/>shopware-core-plugin<br/>shopware-frontend-plugin<br/>shopware-theme<br/>shopware-plugin<br/>shopware-frontend-theme |
| SilverStripe | silverstripe-modulesilverstripe-theme |
| SMF | smf-modulesmf-theme |
| SyDES | sydes-modulesydes-theme |
| symfony1 | symfony1-plugin |
| Tusk | tusk-tasktusk-commandtusk-asset |
| TYPO3 Flow | typo3-flow-packagetypo3-flow-frameworktypo3-flow-plugintypo3-flow-sitetypo3-flow-boilerplatetypo3-flow-build |
| TYPO3 CMS | typo3-cms-extension (Deprecated in this package, use the TYPO3 CMS Installers instead) |
| UserFrosting | userfrosting-sprinkle |
| Vanilla | vanilla-pluginvanilla-theme |
| Vgmcp | vgmcp-bundlevgmcp-theme |
| Wolf CMS | wolfcms-plugin |
| WordPress | wordpress-pluginwordpress-themewordpress-muplugin |
| YAWIK | yawik-module |
| Zend | zend-libraryzend-extrazend-module |
| Zikula | zikula-modulezikula-theme |
| Prestashop | prestashop-moduleprestashop-theme |
| Phifty | phifty-bundlephifty-frameworkphifty-library |
Example composer.json File
This is an example for a CakePHP plugin. The only important parts to set in your
composer.json file are "type": "cakephp-plugin" which describes what your
package is and "require": { "composer/installers": "~1.0" } which tells composer
to load the custom installers.
{
"name": "you/ftp",
"type": "cakephp-plugin",
"require": {
"composer/installers": "~1.0"
}
}
This would install your package to the Plugin/Ftp/ folder of a CakePHP app
when a user runs php composer.phar install.
So submit your packages to packagist.libfun.net!
Custom Install Paths
If you are consuming a package that uses the composer/installers you can
override the install path with the following extra in your composer.json:
{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["shama/ftp", "vendor/package"]
}
}
}
A package type can have a custom installation path with a type: prefix.
{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["type:wordpress-plugin"]
}
}
}
You can also have the same vendor packages with a custom installation path by
using the vendor: prefix.
{
"extra": {
"installer-paths": {
"your/custom/path/{$name}/": ["vendor:my_organization"]
}
}
}
These would use your custom path for each of the listed packages. The available
variables to use in your paths are: {$name}, {$vendor}, {$type}.
Custom Install Names
If you're a package author and need your package to be named differently when
installed consider using the installer-name extra.
For example you have a package named shama/cakephp-ftp with the type
cakephp-plugin. Installing with composer/installers would install to the
path Plugin/CakephpFtp. Due to the strict naming conventions, you as a
package author actually need the package to be named and installed to
Plugin/Ftp. Using the following config within your package composer.json
will allow this:
{
"name": "shama/cakephp-ftp",
"type": "cakephp-plugin",
"extra": {
"installer-name": "Ftp"
}
}
Please note the name entered into installer-name will be the final and will
not be inflected.
Should we allow dynamic package types or paths? No.
What are they? The ability for a package author to determine where a package
will be installed either through setting the path directly in their
composer.json or through a dynamic package type: "type":
"framework-install-here".
It has been proposed many times. Even implemented once early on and then removed. Installers won't do this because it would allow a single package author to wipe out entire folders without the user's consent. That user would then come here to yell at us.
Anyone still wanting this capability should consider requiring https://github.com/oomphinc/composer-installers-extender.
Проверка обновления Packagist
Workflow Update Packagist уведомляет
Packagist после push в настроенные ветки и при публикации тегов.
Для уведомления нужны секреты PACKAGIST_USERNAME и PACKAGIST_SAFE_TOKEN;
публичный URL пакета уже указан в workflow.
Эта заметка добавлена для тестового запуска: после push проверьте шаг
Notify Packagist в CI/CD и соответствие коммита на Packagist.
Повторная проверка доставки обновлений: для нового тестового коммита сверяйте
результат отдельного запуска Update Packagist, а не предыдущего workflow.
The published standalone generator and manual CLI are preserved; compatibility and the automatic selection of one generator are described in GEO-SCAFFOLD.md.