Use composer to install bundle in custom directory

I see there is already a question but it did not answer the question

How can I install a bundle in the /src directory?

Reason I would like to do this is for development and deployment, so

  • I don't have to check in Symphony's base code into my subversion repo
  • I could use Composer to deploy

Looking over the Composer docs some more I did come across this:

vendor-dir: Defaults to vendor. You can install dependencies into a different directory if you want to.

Could I set this at a Bundle level? or is this for the overall install?


I know this is late, but in case anyone is searching for an answer that I painstakingly (hours and hours) found: vendor-dir

The documentation says:

By setting this var you can make composer install the dependencies into a directory other than vendor


    "config": {
        "vendor-dir": "website/password/vendor/"

From this doc and this doc

Again, hope to save anyone else a couple hours.

    "extra": {
        "installer-paths": {
            "sites/{$name}": ["vendor/package"]

Read more.

I have implemented this composer plugin to install packages into user (custom) defined folders you can just include it in your composer.json, follow the example and tell me if you have more questions :)


A composer plugin, to install differenty types of composer packages in custom directories outside the default composer default installation path which is in the vendor folder.

This is not another composer-installer library for supporting non-composer package types i.e. application .. etc. This is only to add the flexability of installing composer packages outside the vendor folder. This package only supports composer package types,

The type of the package. It defaults to library.

Package types are used for custom installation logic. If you have a package that needs some special logic, you can define a custom type. This could be a symfony-bundle, a wordpress-plugin or a typo3-module. These types will all be specific to certain projects, and they will need to provide an installer capable of installing packages of that type.

How to use
  • Include the composer plugin into your composer.json require section::
    "php": ">=5.3",
    "mnsami/composer-custom-directory-installer": "1.1.*",
    "monolog/monolog": "*"
  • In the extra section define the custom directory you want to the package to be installed in::
      "./monolog/": ["monolog/monolog"]

by adding the installer-paths part, you are telling composer to install the monolog package inside the monolog folder in your root directory.

  • As an added new feature, we have added more flexibility in defining your download directory same like the composer/installers, in other words you can use variables like {$vendor} and {$name} in your installer-path section:
"extra": {
    "installer-paths": {
        "./customlibs/{$vendor}/db/{$name}": ["doctrine/orm"]

the above will manage to install the doctrine/orm package in the root folder of your project, under customlibs.


Composer type: project is not supported in this installer, as packages with type project only make sense to be used with application shells like symfony/framework-standard-edition, to be required by another package.

If you find composer's custom installers too complex or rigid, and you can plan what types of systems you will be deploying to, you might consider using post-install scripts.

Here's an example that creates a symlink from a package installed under vendors to the location where it might be expected:

"scripts": {
    "post-install-cmd": [
        "test -d vendor/foo/bar && ln -s ../vendor/foo/bar lib/bar"

This will create a symlink at lib/bar/ pointing to vendor/foo/bar/.

Need Your Help

What is the curiously recurring template pattern (CRTP)?

c++ templates c++-faq crtp

Without referring to a book, can anyone please provide a good explanation for CRTP with a code example?

How does @Html.BeginForm() works? razor

I'm very new to ASP.NET, just started the MVC tutorial today on I got here