A workbench for developing Composer packages.

Overview

studio

Develop your Composer libraries with style.

This package makes it easy to develop Composer packages while using them.

Instead of installing the packages you're working on from the Packagist repository, use Studio to symlink them from the filesystem instead. Under the hood, it uses Composer's path repositories to do so. As a result, you won't have to develop in the vendor directory.

Studio also knows how to configure development tools that might be part of your workflow. This includes the following:

  • Autoloading (src and tests)
  • PhpUnit
  • PhpSpec
  • TravisCI

This list will only get longer in the future.

Installation

Studio can be installed globally or per project, with Composer:

Globally (recommended): composer global require franzl/studio (use as studio)

Make sure that the ~/.composer/vendor/bin directory is added to your PATH, so that the studio executable can be located by your system.

Per project: composer require --dev franzl/studio (use as vendor/bin/studio)

Usage

All commands should be run from the root of your project, where the composer.json file is located.

Workflow

Typically, you will want to require one of your own Composer packages in an application. With Studio, you can pull in your local copy of the package instead of the version hosted on Packagist. The kicker: You can keep developing your library while you dogfood it, but you won't need to change your composer.json file.

Loading local packages

To use one of your own libraries within your application, you need to tell Studio where it can locate the library. You can do so with the load command. When Composer resolves its dependencies, Studio will then pitch in and symlink your local directory to Composer's vendor directory.

So, to have Studio manage your awesome world domination library, all you have to do is run the following command:

$ studio load path/to/world-domination

This command should create a studio.json file in the current working directory. It contains a list of directories for Studio to load.

Next, if you haven't already done so, make sure you actually require the package in your composer.json:

"require": {
    "my/world-domination": "dev-master"
}

And finally, tell Studio to set up the symlinks:

$ composer update my/world-domination

If all goes well, you should now see a brief message along the following as part of Composer's output:

[Studio] Loading path installer

This is what will happen under the hood:

  1. Composer begins checking dependencies for updates.
  2. Studio jumps in and informs Composer to prefer packages from the directories listed in the studio.json file over downloading them from Packagist.
  3. Composer symlinks these packages into the vendor directory or any other appropriate place (e.g. for custom installers). Thus, to your application, these packages will behave just like "normal" Composer packages.
  4. Composer generates proper autoloading rules for the Studio packages.
  5. For non-Studio packages, Composer works as always.

Pro tip: If you keep all your libraries in one directory, you can let Studio find all of them by using a wildcard:

$ studio load 'path/to/my/libraries/*'

Kickstarting package development

If you haven't started world domination yet, Studio also includes a handy generator for new Composer packages. Besides the usual ceremony, it contains several optional components, such as configuration for unit tests, continuous integration on Travis-CI and others.

First, we need to create the local directory for the development package:

$ studio create domination
# or if you want to clone a git repo
$ studio create domination --git [email protected]:vendor/domination.git

After asking you a series of questions, this will create (or download) a package in the domination subdirectory inside the current working directory. There is a good chance that you need a little time to develop this package before publishing it on Packagist. Therefore, if you ran this command in a Composer application, Studio will offer you to load your new package immediately. This essentially comes down to running studio load domination.

Finally, don't forget to use composer require to actually add your package as a dependency.

Command Reference

create: Create a new package skeleton

$ studio create foo/bar

This command creates a skeleton for a new Composer package, already filled with some helpful files to get you started. In the above example, we're creating a new package in the folder foo/bar in your project root. All its dependencies will be available when using Composer.

During creation, you will be asked a series of questions to configure your skeleton. This will include things like configuration for testing tools, Travis CI, and autoloading.

create --git: Manage existing packages by cloning a Git repository

$ studio create bar --git [email protected]:me/myrepo.git

This will clone the given Git repository to the bar directory and install its dependencies.

create --submodule: Manage existing packages by loading a Git repository as submodule

$ studio create bar --submodule [email protected]:me/myrepo.git

This will load the given Git repository to the bar directory as a submodule and install its dependencies.

create --options: Provide specific options to Git when loading the repository

$ studio create bar --git [email protected]:me/myrepo.git --options="--single-branch --branch=mybranch"
$ studio create bar --submodule [email protected]:me/myrepo.git --options="-b mybranch"

This will load the given Git repository and checkout a specific branch. To have an overview of all the options available to you, check git clone --help and git submodule add --help.

load: Make all packages from the given local path available to Composer

$ studio load baz

This will make sure all packages in the baz directory (paths with wildcards are supported, too) will be autoloadable using Composer.

unload: Stop managing a local path

$ studio unload foo

This will remove the path foo from the studio.json configuration file. This means any packages in that path will not be available to Composer anymore (unless they are still hosted on Packagist).

This does not remove the package contents from the file system. See scrap for completely removing a package.

You can reload the path using the load command.

scrap: Remove a package

Sometimes you want to throw away a package. You can do so with the scrap command, passing a path for a Studio-managed package:

$ studio scrap foo

Don't worry - you'll be asked for confirmation first.

License

This code is published under the MIT License. This means you can do almost anything with it, as long as the copyright notice and the accompanying license file is left intact.

Contributing

Feel free to send pull requests or create issues if you come across problems or have great ideas. Any input is appreciated!

franzl/studio for enterprise

Available as part of the Tidelift Subscription

The maintainers of franzl/studio and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. Learn more.

Comments
  • Autoload Directory Seperator on Windows / Autoloading not doing anything?

    Autoload Directory Seperator on Windows / Autoloading not doing anything?

    As you can see from the below example, the auto-generated line from Studio in the vendor/autoload.php file seems to produce an incorrect file-path (actually uses a mixture of separators):

    require_once __DIR__ . '/../package\vendor\autoload.php';
    

    This results in a fatal error due to the require failing. The fatal error goes away once all the back slashes are changed to forward slashes. I'm using Windows 10.

    bug 
    opened by Rjs37 22
  • Avoid duplicate dependencies

    Avoid duplicate dependencies

    Studio currently suffers from the same problem that Workbench had: libraries in development with some of the same dependencies of the main project can cause conflicts with autoloading.

    This needs to be solved by messing around with the Composer-generated files.

    Here's my idea:

    • Composer currently generates (I think) three different files based on the different autoloading types (PSR-4 etc.). These can be merged easily.
    • After creating the autoloaders for the main project as well as the managed libraries, the type-specific files from the managed libraries should be merged into the respective ones from the main project. This should come down to merging a bunch of arrays.
    • For conflicts, the ones from the main project should be preferred.

    /cc @kirkbushell

    enhancement discussion 
    opened by franzliedke 19
  • Class not found error after update to 0.10.0

    Class not found error after update to 0.10.0

    Been using Studio for a while now and it's worked great. I use it to share packages between 3 different, but connected projects. I just updated from 0.9.5 to 0.10.0 and am getting class not found errors when running composer update. Specifically, it's happening in the post-update-cmd event and the classes not found are service providers. Studio is globally installed and they are all Laravel 5 applications. All workbench packages are 2 levels up from the Laravel roots. When I go back to 0.9.5 it all works again. Got any advice?

    opened by boris-glumpler 12
  • Broken on Composer 1.6.3

    Broken on Composer 1.6.3

    Not really sure what is happening, but as soon as I upgrade to Composer 1.6.3, all my symlinks are gone and real packages are installed instead.

    Downgrading to 1.6.2 fixes the issue.

    Tested both master and next branches.

    opened by emodric 11
  • Should a studio loaded package take precedence over composer vendor package?

    Should a studio loaded package take precedence over composer vendor package?

    In my use case, I want to workbench a package that is being consumed by a project already. My expectation is that, by loading it via Studio, the PSR-4 classes of the workbenched package will be get loaded instead of those in the composer vendor directory. This isn't what I'm observing, though. Is my expectation wrong here?

    opened by weotch 9
  • Is create -> load the correct approach? Installers? Guidance?

    Is create -> load the correct approach? Installers? Guidance?

    The documentation is a bit vague in my opinion. Is the following the correct approach to creating a new package using studio?

    1. Create a new package skeleton using studio create <asdf>.
    2. Adjust the skeleton, perhaps create baseline content.
    3. Go to a Composer-powered project root.
    4. Run studio load <asdf>.
    5. studio.json is created containing something like
    {
        "version": 1,
        "paths": [
            "<asdf>"
        ]
    }
    

    This should load the WIP package living in <asdf> to the Composer-powered project, am I correct?

    When I run composer update nothing is installed and Nothing to install or update comes up in my terminal.

    How I understand it should go:

    1. studio create ...
    2. studio load ...
    3. composer update
    4. Dev package created with studio create should appear to vendor or similar, either as a link/copy or as a line in the autoloader.

    Currently nothing happens which resembles number 4 on that list.

    I tried to create a package for a Wordpress plugin ("type": "wordpress-plugin") and a regular library package too, but both do not work for me. I'm running latest Composer and my environment is Ubuntu 14.04.

    opened by rask 8
  • No way to do a package publish?

    No way to do a package publish?

    I hoped to miss something but somehow I see no way to publish the package public folder like I could do in L4 - php artisan asset:publish --bench.

    Nothing be published with php artisan vendor:publish either.

    opened by simonberger 7
  • Can I change location where Studio creates packages?

    Can I change location where Studio creates packages?

    Hi, I know this is more of a support question than an issue, but I'm not aware of any other way to ask. So, by default, Studio creates packages in /root/vendor-name/package-name. Is it possible to have Studio create all the packeges inside, let's say, /root/studio/vendor-name/package-name, but without having the studio segment in the package's namespace, because obviously once I publish the package, the studio segment will not be there.

    opened by tomicakorac 7
  • Add support for Composer 2

    Add support for Composer 2

    Composer 2.0 is getting closer to a stable release and plugin authors are asked to test Composer 2 and add support to the plugins.

    For more information see: https://github.com/composer/composer/issues/8726

    If I've got time I'll take a look into it.

    opened by baukevdw 6
  • Studio and composer create-project

    Studio and composer create-project

    Hi,

    Thanks for the awesome job with Studio, it's so cool!

    I've tried to use Studio with composer create-project command, without success. Is it the normal or is it a bug? Or maybe I'm doing something wrong? Using Studio allows to create a package easily, to test it almost in "real life", using Composer with require command. I'd like to use it to download a project too... I can use Satis, but it's a bit more complicated: I wish Studio could help :)

    discussion 
    opened by Arcesilas 6
  • Issue with library versions not being detected.

    Issue with library versions not being detected.

    I have been asked to leave this issue here, but I'm not sure I'll get the wording correct.

    Basically, I attempted to use studio to clone a github library like this:

    studio create telegram-bot-sdk --git https://github.com/irazasyed/telegram-bot-sdk

    Then I went to my project root and attempted to require the library:

    composer require irazasyed/telegram-bot-sdk expecting studio to create a symlink to the local copy. That didn't happen and all I got was the library saved in the vendor folder as normal.

    Having spoken with @franzliedke, he suggested to try using the dev-master version for my composer require which I did:

    composer require irazasyed/telegram-bot-sdk:dev-master and suddenly everything worked* fine.

    I hope this helps someone else.

    *Well not actually the first time. There was a problem creating the symlink but that was fixed by running vagrant as admin.

    bug 
    opened by jonnywilliamson 6
  • Using studio together with PhpStorm

    Using studio together with PhpStorm

    Hello! Actually I'm not about a bug, but this applies to the simultaneous use of the studio and phpstorm. When I create a symlink to an existing package using studio, it contains a vendor folder with its own dependencies, unlike any other non-local package. That a reason why phpstorm spends a lot of time to index that folder and slows down after, because all nested classes now are duplicated in multiple locations.

    I tried to mark project/vendor/me/package/vendor directory as excluded in phpstorm, but it doesn't help ever or helps partially. If I use studio to connect more than one package, work becomes hell, because phpstorm stucks every few seconds.

    Has anyone encountered a similar problem and how was it solved?

    opened by WindBridges 5
  • Installation fails with Composer 2 in some cases

    Installation fails with Composer 2 in some cases

    Hi,

    here are a couple of cases where install fails with Composer 2, while install Composer 1 works fine (doesn't matter if Studio symlinks the repo or not). To test, you can use this repo as a reproducer:

    https://github.com/emodric/studio-composer2

    To get it up and running:

    git clone https://github.com/emodric/studio-composer2
    cd studio-composer2
    mv case1/repos/polyfill/..git case1/repos/polyfill/.git
    mv case2/repos/polyfill/..git case2/repos/polyfill/.git
    mv case3/repos/polyfill/..git case3/repos/polyfill/.git
    

    Case 1: Version in composer.json (~1.20.0) and local version (1.21.0) missmatch. Composer 1 would just install 1.20.0 from Packagist and be done with it. Composer 2 fails the install.

    ~/www/studio/case1 $ composer install
    
    [Studio] Loading path repos/*
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 9 installs, 0 updates, 0 removals
      - Installing symfony/polyfill (v1.20.0): Downloading (100%)         
      - Installing symfony/process (v5.2.1): Loading from cache
      - Installing symfony/filesystem (v5.2.1): Loading from cache
      - Installing symfony/string (v5.2.1): Loading from cache
      - Installing psr/container (1.0.0): Loading from cache
      - Installing symfony/service-contracts (v2.2.0): Loading from cache
      - Installing symfony/console (v5.2.1): Loading from cache
      - Installing franzl/studio (0.15.0): Loading from cache
      - Installing symfony/intl (v5.2.1): Loading from cache
    Writing lock file
    Generating autoload files
    8 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    Symfony recipes are disabled: "symfony/flex" not found in the root composer.json
    
    ~/www/studio/case1 $ composer2 install
    
    No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file.
    [Studio] Loading path repos/*
    Loading composer repositories with package information
    Updating dependencies
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Root composer.json requires symfony/polyfill ~1.20.0, it is satisfiable by symfony/polyfill[v1.20.0] from composer repo (https://repo.packagist.org) but symfony/polyfill[dev-main, 1.21.x-dev (alias of dev-main)] from path repo (repos/*) has higher repository priority. The packages with higher priority do not match your constraint and are therefore not installable. See https://getcomposer.org/repoprio for details and assistance.
    

    Case 2: Version in composer.json (~1.21.0) and local version (1.21.0) match. This is using a stable requirement. Composer 1 would just install 1.21.0 from Packagist and be done with it. Composer 2 fails the install.

    ~/www/studio/case2 $ composer install
    
    [Studio] Loading path repos/*
    Loading composer repositories with package information
    Updating dependencies (including require-dev)
    Package operations: 8 installs, 0 updates, 0 removals
      - Installing symfony/polyfill (v1.21.0): Downloading (100%)         
      - Installing symfony/process (v5.2.1): Loading from cache
      - Installing symfony/filesystem (v5.2.1): Loading from cache
      - Installing symfony/string (v5.2.1): Loading from cache
      - Installing psr/container (1.0.0): Loading from cache
      - Installing symfony/service-contracts (v2.2.0): Loading from cache
      - Installing symfony/console (v5.2.1): Loading from cache
      - Installing franzl/studio (0.15.0): Loading from cache
    Writing lock file
    Generating autoload files
    7 packages you are using are looking for funding.
    Use the `composer fund` command to find out more!
    Symfony recipes are disabled: "symfony/flex" not found in the root composer.json
    
    ~/www/studio/case2 $ composer2 install
    
    No lock file found. Updating dependencies instead of installing from lock file. Use composer update over composer install if you do not have a lock file.
    [Studio] Loading path repos/*
    Loading composer repositories with package information
    Updating dependencies
    Your requirements could not be resolved to an installable set of packages.
    
      Problem 1
        - Root composer.json requires symfony/polyfill ~1.21.0, it is satisfiable by symfony/polyfill[v1.21.0] from composer repo (https://repo.packagist.org) but symfony/polyfill[dev-main, 1.21.x-dev (alias of dev-main)] from path repo (repos/*) has higher repository priority. The packages with higher priority do not match your minimum-stability and are therefore not installable. See https://getcomposer.org/repoprio for details and assistance.
    

    Case 3: Version in composer.json (~1.21.0@dev) and local version (1.21.0) match. This is using a dev requirement. Composer 1 and Composer 2 work OK and symlink the package, so no need for example output.

    opened by emodric 0
  • composer require wont work while composer update does.

    composer require wont work while composer update does.

    Amazing project,

    I was putting together some new packages, and when using studio, if I run

    `studio load /path/to/packages/*' it returns an error with this output

    Too many arguments, expected arguments "command" "path".
    
    
    load <path>
    

    Also, I've noticed in some projects when I create a new project, and then use the following:

    studio load path/to/project/project-a this works fine, but if I try something like

    composer require roni-estein/package-a I throws this error:

    
    [InvalidArgumentException]
      Could not find a matching version of package roni-estein/laravel-commands. Check the package spelling, your version constraint and that the package is 
    available in a stability which matches your minimum-stability (dev).
    
    

    However, if I add the package to composer.json, and composer update everything works.

    Is that an expected behavior? If so, can I contribute a PR to make the README more specific.

    Thanks.

    opened by roni-estein 6
  • Hook in requireCommand

    Hook in requireCommand

    Hi,

    I'm trying to write a command that runs composer require and use Studio. Currently, Studio is only loaded on update and install commands.

    After trying many different events, I found out that it's possible to use the PluginEvents::PRE_COMMAND_RUN event. Since it's very generic, the command name should be check beforehand, using PreCommandRunEvent::getCommand(). This event could be used for all commands: install, require and update.

    By the way, this would allow us to use Studio with create-project command, without using --repository option :grin:

    I can provide a PR.

    enhancement help wanted 
    opened by Arcesilas 1
  • Packages Using Relative Paths May Sometimes Break (Symlink Issue)

    Packages Using Relative Paths May Sometimes Break (Symlink Issue)

    Hi,

    First thanks for this great package. I love it!

    I'm using Laravel Mix to merge a package manifest file into the main application's manifest file. The way I'm achieving this is by setting the public path with a relative path:

    mix.setPublicPath('./../../../../../public').mergeManifest();

    This doesn't work because of the symlink. If I were to give an absolute path or remove the symlink (and treat the package as a real composer package) it works.

    Any ideas on how I could use relative paths with the symlink in play? (Sorry in advance if this is an issue with my own ignorance instead of an issue with your package)

    Thanks! Cheers.

    Edit: Digging up more info to come up with a solution. I noticed the symlink is on the package name, not the package namespace. So there's what the structure looks like for the vendor folder:

    - vendor
    --- packagenamespace (folder)
    ------- packagename (symlink) --> ../../../my-custom-path/packagenamespace/packagename/
    

    Here's my studio.json file in case it's relevant:

    {
        "version": 2,
        "paths": [
            "/var/www/composer-local/*"
        ]
    }
    
    opened by zschuessler 0
Releases(0.16.0)
  • 0.16.0(Oct 12, 2022)

    This update includes several BC adaptions and fixes, that occurred with new releases of Composer 2.x. Also we improved compatibility with PHP 8.1 (and also test for it now, too).

    What's Changed

    • account for glob in studio load wildcard/* example by @imme-emosol in https://github.com/franzliedke/studio/pull/109
    • Allow Symfony 6.0 by @D3lph1 in https://github.com/franzliedke/studio/pull/112
    • Fix deprecation notice in php 8.1 by @baukevdw in https://github.com/franzliedke/studio/pull/117
    • Load and unload multiple paths in one call by @MetalArend in https://github.com/franzliedke/studio/pull/119
    • Fix LogicException for composer ^2.3 by @baukevdw in https://github.com/franzliedke/studio/pull/116

    New Contributors

    • @imme-emosol made their first contribution in https://github.com/franzliedke/studio/pull/109
    • @D3lph1 made their first contribution in https://github.com/franzliedke/studio/pull/112
    • @baukevdw made their first contribution in https://github.com/franzliedke/studio/pull/117
    • @MetalArend made their first contribution in https://github.com/franzliedke/studio/pull/119

    Full Changelog: https://github.com/franzliedke/studio/compare/0.15.0...0.16.0

    Source code(tar.gz)
    Source code(zip)
  • 0.15.0(Dec 18, 2020)

    Hello again. With this release, Studio is finally compatible with Composer 2.

    Also, please welcome @apfelbox as an additional maintainer! :raised_hands:

    Summary

    • Drop support for PHP <7.
    • Add support for Composer 2 (#101, #104 by @emodric).
    • Add support for Symfony 5.0 (#98, #102 and #106 by @emodric and @apfelbox).
    • When using create to clone packages, additional Git options can be provided (#93 by @gnutix).
    • Deduplicate entries in studio.json (#94 and #103 by @gnutix and @apfelbox).
    Source code(tar.gz)
    Source code(zip)
  • 0.14.0-beta1(Dec 2, 2017)

    This is a fundamental rewrite of the Composer integration. Now, instead of adding the loaded paths to Composer's search path (by creating path repositories for them), we replace the packages downloaded by Composer that can be found in the loaded paths by symlinks to the local paths.

    All of this should hopefully fix several issues, e.g. #52, #58, #65, and #72.

    Source code(tar.gz)
    Source code(zip)
  • 0.13.0(Dec 1, 2017)

    Time to get things moving again. This release updates Symfony version constraints to allow people to install Studio together with other projects using Symfony v4.

    Summary

    • Allow installation with Symfony 4.0 (#81 by @emodric).
    • Use "proper" way to reference PHPUnit classes in the stubs (#79 by @simonhunt).
    Source code(tar.gz)
    Source code(zip)
  • 0.12.0(Sep 15, 2017)

    Long time, no see. Finally, a new update. More changes are coming soon!

    Summary

    • Use more recent versions when starting a new project with PhpUnit and PhpSpec (#76).
    Source code(tar.gz)
    Source code(zip)
  • 0.11.2(Nov 25, 2016)

    A small patch release with a minor suggested improvement.

    Summary

    • Small refactorings.
    • Replace slashes with backslashes when asking for namespaces (#70).
    Source code(tar.gz)
    Source code(zip)
  • 0.11.1(Nov 19, 2016)

    Another patch release with a small community-contributed feature: the unload command.

    Summary

    • unload command: Reverse operation of the load command: This will remove the given entry from the studio.json file, resulting in Composer no longer finding the packages in that path, unless they are available from Packagist (#67, implemented by @rask in #68).
    Source code(tar.gz)
    Source code(zip)
  • 0.11.0(Apr 6, 2016)

    Another minor release, caused by changes to the config file format and slightly different semantics for the load command.

    Summary

    • Path wildcards: Similar to Composer's path repositories, Studio now allows for paths to contain wildcards. This makes it super easy to load multiple packages at once in a workbench-like environment (#54).
    • Changes:
      • The format of studio.json has changed - it only stores paths (and wildcards) to load, no more mapping from packages to paths.
      • The load command now accepts glob paths - these can contain wildcards.

    More changes are in the pipeline, that will deal with some problems introduced in the 0.10 revamp.

    Source code(tar.gz)
    Source code(zip)
  • 0.10.0(Mar 22, 2016)

    Almost ready for a 1.0 release now.

    Revamp under the hood

    This release marks the culmination of a lot of work, diving into Composer's innards and even sending a pull request to Composer. Thus, to enjoy this release to its fullest, make sure you're running an up-to-date version of Composer. (You can do so by running composer self-update.)

    Most importantly, Studio now makes use of Composer's path repositories instead of manipulating the generated autoloader files. The benefit: Studio-managed packages are symlinked directly into the vendor directory, and version conflicts are handled completely by Composer. Let Composer do what it dos best.

    Thus, besides giving you a helping hand in kickstarting new Composer packages, Studio now primarily provides a nice interface to working with path repositories. The benefit over doing it by hand: no manipulation of the composer.json file, which is shared in the repository. Instead, a local studio.json files describes your development setup and can be ignored by other maintainers or contributors of your project.

    I have successfully used this approach for a while now in developing Flarum - in a setup with various core libraries and more than ten extension packages. It works really well!

    Summary

    • Path repositories: As described above, this also takes care of duplicate dependencies (#14, #33, #42, #45).
    • Autoloading files: With these changes, file autoloaders now work well, too (#29).
    • composer update will now also affect managed packages' dependencies (#26).
    • Studio now works well Composer's custom installers (#36).
    • Allow creating packages as Git submodules (#31).
    • Changes:
      • Compatibility with Symfony 3.x (#20, #40, #44, #47).
      • Updates for Composer's plugin API versioning (#43, #46).
      • Clearly ask for confirmation when scrapping packages (#39).
    • Bug fixes:
      • More error checking when running studio create (#12).
      • scrap command could not handle symlinks (#23).
      • Don't crash when trying to load locations that don't exist (#38).

    Thanks for your patience and to all the people who made this release possible - from issues and fruitful discussion to pull requests. :tada:

    Source code(tar.gz)
    Source code(zip)
  • 0.9.5(Mar 25, 2015)

    Autoloading was basically useless up to this release, sorry.

    • Bug fix:
      • Autoload files from Studio-managed projects are now properly included in Composer's autoload.php file.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.4(Mar 17, 2015)

    • Improved error messages: When entering invalid package names or namespaces, the error messages now explain the requirements. See #8.
    • load command: Start managing existing directories. See #9.
    • Bug fix:
      • Less unneeded backslashes in generated studio.json file.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.3(Feb 24, 2015)

    • Made the license explicit for this library. It is published under the terms of the MIT License.
    • Bug fix:
      • Generated composer.json files will now contain less backslashes where they are not needed.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.2(Feb 23, 2015)

    • PhpSpec: Studio will now configure PhpSpec if requested (include dependencies and configure test suite with autoloading).
    • Bug fix:
      • Fixed broken autoloading for PhpUnit tests namespace.
    Source code(tar.gz)
    Source code(zip)
  • 0.9.1(Feb 22, 2015)

    • PSR-4 autoloading: Studio will now configure Composer to use PSR-4 autoloading for your source and test files (if PhpUnit is configured).
    • scrap command: Makes it easy to throw away package (may only be useful for me during development)
    Source code(tar.gz)
    Source code(zip)
  • 0.9.0(Feb 22, 2015)

Owner
Franz Liedke
Franz Liedke
Authoring Tool and Language Workbench for Online Courses

Authoring Tool and Language Workbench for Online Courses

sellquiz 1 Feb 2, 2022
Composer Repository Manager for selling Magento 2 extension and offering composer installation for ordered packages.

Magento 2 Composer Repository Credits We got inspired by https://github.com/Genmato. Composer Repository for Magento 2 This extension works as a Magen

EAdesign 18 Dec 16, 2021
Composer plugin that wraps all composer vendor packages inside your own namespace. Intended for WordPress plugins.

Imposter Plugin Composer plugin that wraps all composer vendor packages inside your own namespace. Intended for WordPress plugins. Built with ♥ by Typ

Typist Tech 127 Dec 17, 2022
Private, self-hosted Composer/Satis repository with unlimited private and open-source packages and support for Git, Mercurial, and Subversion.

Private, self-hosted Composer/Satis repository with unlimited private and open-source packages and support for Git, Mercurial, and Subversion. HTTP API, HTTPs support, webhook handler, scheduled builds, Slack and HipChat integration.

Łukasz Lach 112 Nov 24, 2022
Private Composer registry for private PHP packages on AWS Serverless

Tug Tug is a Composer private registry for private PHP packages installable with Composer (1 and 2). The main idea of this project is to have an inter

Fxp 33 Oct 5, 2022
Allow composer packages to define compilation steps

Composer Compile Plugin The "Compile" plugin enables developers of PHP libraries to define free-form "compilation" tasks, such as: Converting SCSS to

CiviCRM 11 Aug 3, 2022
Installed composer packages info

PackageInfo This package was highly inspired from ocramius/package-versions I needed some methods to read data from the composer.lock file fast...this

Martin Keckeis 7 Jun 2, 2022
Composer addon to efficiently get installed packages' version numbers

Package Versions composer/package-versions-deprecated is a fully-compatible fork of ocramius/package-versions which provides compatibility with Compos

Composer 1.4k Dec 27, 2022
This composer plugin is a temporary implementation of using symbolic links to local packages as dependencies to allow a parallel work process

Composer symlinker A Composer plugin to install packages as local symbolic links. This plugin is a temporary implementation of using symbolic links to

Pierre Cassat 18 Nov 9, 2021
This composer plugin allows you to share your selected packages between your projects by creating symlinks

Composer - Shared Package Plugin This composer plugin allows you to share your selected packages between your projects by creating symlinks. All share

L'Etudiant 169 Sep 20, 2022
Simple custom chat bot developing framework for telegram, qq and more in PHP (the best language)

RinoBot RinoBot 是一个为统一聊天机器人扩展开发的框架,编写一份插件用于多种机器人协议。 简体中文 | English ?? 开发中 ?? 暂不适用于生产环境 特性 插件扩展机制 一份代码运行于多平台多协议机器人 并减小开发难度 插件提供 Yaml 配置 供使用者修改 基于机器人 We

LixWorth 3 Apr 18, 2022
Minimalist PHP frame for Core-Library, for Developing PHP application that gives you the full control of your application.

LazyPHP lightweight Pre-Made Frame for Core-library Install Run the below command in your terminal $ composer create-project ryzen/lazyphp my-first-pr

Ry-Zen 7 Aug 21, 2022
Provides a foundation for developing with Magento Commerce in a Vagrant box

Provides a foundation for developing with Magento Commerce in a Vagrant box. The machine is based on CentOS 6.4. ==== List of installed software. Mage

Jason Evans 19 May 12, 2017
Ied plugin composer - Inspired Plugin Composer: Create, publish and edit plugins from within Textpattern CMS.

ied_plugin_composer Create, publish and edit plugins from within Textpattern CMS. Creates a new page under the Extensions tab where you can edit and e

Stef Dawson 8 Oct 3, 2020
Magento-composer-installer - Composer installer for Magento modules

!!! support the maintainer of this project via Patreon: https://www.patreon.com/Flyingmana Magento Composer Installer The purpose of this project is t

null 213 Sep 24, 2022
Composer registry manager that help to easily switch to the composer repository you want

CRM - Composer Registry Manager Composer Registry Manager can help you easily and quickly switch between different composer repositories. 简体中文 Install

Tao 500 Dec 29, 2022
Dependency graph visualization for composer.json (PHP + Composer)

clue/graph-composer Graph visualization for your project's composer.json and its dependencies: Table of contents Usage graph-composer show graph-compo

Christian Lück 797 Jan 5, 2023
Composer Registrar Composer Plugin for Magento 2

This module add a global registration.php that replace the default glob search performed for each request to discover the components not installed from composer.

OpenGento 3 Mar 22, 2022
Drupal Composer Scaffold - A flexible Composer project scaffold builder

This project provides a composer plugin for placing scaffold files (like index.php, update.php, …) from the drupal/core project into their desired location inside the web root. Only individual files may be scaffolded with this plugin.

Drupal 44 Sep 22, 2022