{"id":13669149,"url":"https://github.com/franzliedke/studio","last_synced_at":"2025-05-14T15:10:04.919Z","repository":{"id":25640528,"uuid":"29075900","full_name":"franzliedke/studio","owner":"franzliedke","description":"A workbench for developing Composer packages.","archived":false,"fork":false,"pushed_at":"2024-04-21T19:23:19.000Z","size":238,"stargazers_count":1138,"open_issues_count":23,"forks_count":74,"subscribers_count":45,"default_branch":"master","last_synced_at":"2024-10-29T14:59:58.636Z","etag":null,"topics":["composer-packages","composer-plugin","php"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/franzliedke.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"franzliedke","tidelift":"packagist/franzl/studio"}},"created_at":"2015-01-11T00:11:58.000Z","updated_at":"2024-10-25T09:16:35.000Z","dependencies_parsed_at":"2022-08-02T10:43:41.333Z","dependency_job_id":"b86dfab8-83d9-474b-b6e9-8bc009b1cfea","html_url":"https://github.com/franzliedke/studio","commit_stats":{"total_commits":266,"total_committers":19,"mean_commits":14.0,"dds":0.1127819548872181,"last_synced_commit":"1255eb4017954cbcd32da2a1381d2bf4dd697acc"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzliedke%2Fstudio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzliedke%2Fstudio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzliedke%2Fstudio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/franzliedke%2Fstudio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/franzliedke","download_url":"https://codeload.github.com/franzliedke/studio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248384695,"owners_count":21094761,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["composer-packages","composer-plugin","php"],"created_at":"2024-08-02T08:01:04.118Z","updated_at":"2025-04-11T11:36:34.383Z","avatar_url":"https://github.com/franzliedke.png","language":"PHP","funding_links":["https://github.com/sponsors/franzliedke","https://tidelift.com/funding/github/packagist/franzl/studio","https://tidelift.com/subscription/pkg/packagist-franzl-studio?utm_source=packagist-franzl-studio\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo"],"categories":["PHP","Tools"],"sub_categories":["Support"],"readme":"# studio\n\n* [Installation](#installation)\n* [Usage](#installation)\n  * [Workflow](#workflow)\n  * [Command Reference](#command-reference)\n* [License](#license)\n* [Contributing](#contributing)\n* [For enterprise](#franzlstudio-for-enterprise)\n\nDevelop your Composer libraries with style.\n\nThis package makes it easy to develop Composer packages while using them.\n\nInstead of installing the packages you're working on from the Packagist repository, use Studio to symlink them from the filesystem instead.\nUnder the hood, it uses Composer's [path repositories](https://getcomposer.org/doc/05-repositories.md#path) to do so.\nAs a result, you won't have to develop in the `vendor` directory.\n\nStudio also knows how to configure development tools that might be part of your workflow.\nThis includes the following:\n\n- Autoloading (`src` and `tests`)\n- PhpUnit\n- PhpSpec\n- TravisCI\n\nThis list will only get longer in the future.\n\n## Installation\n\nStudio can be installed globally or per project, with Composer:\n\nGlobally (recommended): `composer global require franzl/studio`\n(use as `studio`)\n\n\u003e Make sure that the ~/.composer/vendor/bin directory is added to your PATH, so that the `studio` executable can be located by your system.\n\nPer project: `composer require --dev franzl/studio`\n(use as `vendor/bin/studio`)\n\n## Usage\n\nAll commands should be run from the root of your project, where the `composer.json` file is located.\n\n### Workflow\n\nTypically, you will want to require one of your own Composer packages in an application.\nWith Studio, you can pull in your local copy of the package *instead of* the version hosted on Packagist.\nThe kicker: You can keep developing your library while you dogfood it, but **you won't need to change your composer.json file**.\n\n#### Loading local packages\n\nTo use one of your own libraries within your application, you need to tell Studio where it can locate the library.\nYou can do so with the `load` command.\nWhen Composer resolves its dependencies, Studio will then pitch in and symlink your local directory to Composer's `vendor` directory.\n\nSo, to have Studio manage your awesome world domination library, all you have to do is run the following command:\n\n    $ studio load path/to/world-domination\n\nThis command should create a `studio.json` file in the current working directory.\nIt contains a list of directories for Studio to load.\n\nNext, if you haven't already done so, make sure you actually require the package in your composer.json:\n\n    \"require\": {\n        \"my/world-domination\": \"dev-master\"\n    }\n    \nAnd finally, tell Studio to set up the symlinks:\n\n    $ composer update my/world-domination\n\nIf all goes well, you should now see a brief message along the following as part of Composer's output:\n\n\u003e [Studio] Loading path installer\n\nThis is what will happen under the hood:\n\n1. Composer begins checking dependencies for updates.\n2. Studio jumps in and informs Composer to prefer packages from the directories listed in the `studio.json` file over downloading them from Packagist.\n3. Composer symlinks these packages into the `vendor` directory or any other appropriate place (e.g. for [custom installers](https://getcomposer.org/doc/articles/custom-installers.md)).\n   Thus, to your application, these packages will behave just like \"normal\" Composer packages.\n4. Composer generates proper autoloading rules for the Studio packages.\n5. For non-Studio packages, Composer works as always.\n\n**Pro tip:** If you keep all your libraries in one directory, you can let Studio find all of them by using a wildcard:\n\n    $ studio load 'path/to/my/libraries/*'\n\n#### Kickstarting package development\n\nIf you haven't started world domination yet, Studio also includes a handy generator for new Composer packages.\nBesides the usual ceremony, it contains several optional components, such as configuration for unit tests, continuous integration on Travis-CI and others.\n\nFirst, we need to create the local directory for the development package:\n\n    $ studio create domination\n    # or if you want to clone a git repo\n    $ studio create domination --git git@github.com:vendor/domination.git\n\nAfter asking you a series of questions, this will create (or download) a package in the  `domination` subdirectory inside the current working directory.\nThere is a good chance that you need a little time to develop this package before publishing it on Packagist.\nTherefore, if you ran this command in a Composer application, Studio will offer you to load your new package immediately.\nThis essentially comes down to running `studio load domination`.\n\nFinally, don't forget to use `composer require` to actually add your package as a dependency.\n\n### Command Reference\n\n#### create: Create a new package skeleton\n\n    $ studio create foo/bar\n\nThis command creates a skeleton for a new Composer package, already filled with some helpful files to get you started.\nIn the above example, we're creating a new package in the folder `foo/bar` in your project root.\nAll its dependencies will be available when using Composer.\n\nDuring creation, you will be asked a series of questions to configure your skeleton.\nThis will include things like configuration for testing tools, Travis CI, and autoloading.\n\n#### create --git: Manage existing packages by cloning a Git repository\n\n    $ studio create bar --git git@github.com:me/myrepo.git\n\nThis will clone the given Git repository to the `bar` directory and install its dependencies.\n\n#### create --submodule: Manage existing packages by loading a Git repository as submodule\n\n    $ studio create bar --submodule git@github.com:me/myrepo.git\n\nThis will load the given Git repository to the `bar` directory as a submodule and install its dependencies.\n\n#### create --options: Provide specific options to Git when loading the repository\n\n    $ studio create bar --git git@github.com:me/myrepo.git --options=\"--single-branch --branch=mybranch\"\n    $ studio create bar --submodule git@github.com:me/myrepo.git --options=\"-b mybranch\"\n\nThis will load the given Git repository and checkout a specific branch.\nTo have an overview of all the options available to you, check `git clone --help` and `git submodule add --help`.\n\n#### load: Make all packages from the given local path available to Composer\n\n    $ studio load baz\n\nThis will make sure all packages in the `baz` directory (paths with wildcards are supported, too) will be autoloadable using Composer.\n\n#### unload: Stop managing a local path\n\n    $ studio unload foo\n \nThis will remove the path `foo` from the studio.json configuration file.\nThis means any packages in that path will not be available to Composer anymore (unless they are still hosted on Packagist).\n\nThis does not remove the package contents from the file system.\nSee `scrap` for completely removing a package.\n\nYou can reload the path using the `load` command.\n\n#### scrap: Remove a package\n\nSometimes you want to throw away a package.\nYou can do so with the `scrap` command, passing a path for a Studio-managed package:\n\n    $ studio scrap foo\n\nDon't worry - you'll be asked for confirmation first.\n\n## License\n\nThis code is published under the [MIT License](http://opensource.org/licenses/MIT).\nThis means you can do almost anything with it, as long as the copyright notice and the accompanying license file is left intact.\n\n## Contributing\n\nFeel free to send pull requests or create issues if you come across problems or have great ideas.\nAny input is appreciated!\n\n## franzl/studio for enterprise\n\nAvailable as part of the Tidelift Subscription\n\nThe 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.](https://tidelift.com/subscription/pkg/packagist-franzl-studio?utm_source=packagist-franzl-studio\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzliedke%2Fstudio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffranzliedke%2Fstudio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffranzliedke%2Fstudio/lists"}