2012-02-19 20:07:30 +00:00
|
|
|
# composer.json
|
|
|
|
|
2012-04-13 12:35:13 +00:00
|
|
|
This chapter will explain all of the fields available in `composer.json`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
## JSON schema
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
We have a [JSON schema](http://json-schema.org) that documents the format and
|
|
|
|
can also be used to validate your `composer.json`. In fact, it is used by the
|
2012-02-26 11:40:35 +00:00
|
|
|
`validate` command. You can find it at:
|
2012-04-13 12:35:13 +00:00
|
|
|
[`res/composer-schema.json`](https://github.com/composer/composer/blob/master/res/composer-schema.json).
|
|
|
|
|
|
|
|
## Root Package
|
|
|
|
|
|
|
|
The root package is the package defined by the `composer.json` at the root of
|
|
|
|
your project. It is the main `composer.json` that defines your project
|
|
|
|
requirements.
|
|
|
|
|
|
|
|
Certain fields only apply when in the root package context. One example of
|
|
|
|
this is the `config` field. Only the root package can define configuration.
|
|
|
|
The config of dependencies is ignored. This makes the `config` field
|
|
|
|
`root-only`.
|
|
|
|
|
|
|
|
If you clone one of those dependencies to work on it, then that package is the
|
|
|
|
root package. The `composer.json` is identical, but the context is different.
|
2012-07-20 18:38:46 +00:00
|
|
|
|
|
|
|
> **Note:** A package can be the root package or not, depending on the context.
|
|
|
|
> For example, if your project depends on the `monolog` library, your project
|
|
|
|
> is the root package. However, if you clone `monolog` from GitHub in order to
|
|
|
|
> fix a bug in it, then `monolog` is the root package.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
## Properties
|
|
|
|
|
|
|
|
### name
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
The name of the package. It consists of vendor name and project name,
|
|
|
|
separated by `/`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
* monolog/monolog
|
|
|
|
* igorw/event-source
|
|
|
|
|
|
|
|
Required for published packages (libraries).
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### description
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
A short description of the package. Usually this is just one line long.
|
|
|
|
|
2012-04-14 21:52:52 +00:00
|
|
|
Required for published packages (libraries).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### version
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2013-08-13 12:46:43 +00:00
|
|
|
The version of the package. In most cases this is not required and should
|
|
|
|
be omitted (see below).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2013-08-13 12:46:43 +00:00
|
|
|
This must follow the format of `X.Y.Z` or `vX.Y.Z` with an optional suffix
|
|
|
|
of `-dev`, `-patch`, `-alpha`, `-beta` or `-RC`. The patch, alpha, beta and
|
|
|
|
RC suffixes can also be followed by a number.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
1.0.0
|
|
|
|
1.0.2
|
|
|
|
1.1.0
|
|
|
|
0.2.5
|
|
|
|
1.0.0-dev
|
2012-09-10 08:08:40 +00:00
|
|
|
1.0.0-alpha3
|
2012-02-19 20:07:30 +00:00
|
|
|
1.0.0-beta2
|
|
|
|
1.0.0-RC5
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
Optional if the package repository can infer the version from somewhere, such
|
|
|
|
as the VCS tag name in the VCS repository. In that case it is also recommended
|
|
|
|
to omit it.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-06-14 12:59:11 +00:00
|
|
|
> **Note:** Packagist uses VCS repositories, so the statement above is very
|
|
|
|
> much true for Packagist as well. Specifying the version yourself will
|
|
|
|
> most likely end up creating problems at some point due to human error.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### type
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
The type of the package. It defaults to `library`.
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
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
|
2012-02-26 11:40:35 +00:00
|
|
|
`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.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2013-11-08 07:17:11 +00:00
|
|
|
Out of the box, composer supports four types:
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-24 17:20:27 +00:00
|
|
|
- **library:** This is the default. It will simply copy the files to `vendor`.
|
2013-04-11 10:35:41 +00:00
|
|
|
- **project:** This denotes a project rather than a library. For example
|
2013-04-11 09:53:19 +00:00
|
|
|
application shells like the [Symfony standard edition](https://github.com/symfony/symfony-standard),
|
|
|
|
CMSs like the [SilverStripe installer](https://github.com/silverstripe/silverstripe-installer)
|
|
|
|
or full fledged applications distributed as packages. This can for example
|
|
|
|
be used by IDEs to provide listings of projects to initialize when creating
|
|
|
|
a new workspace.
|
2012-03-24 17:20:27 +00:00
|
|
|
- **metapackage:** An empty package that contains requirements and will trigger
|
|
|
|
their installation, but contains no files and will not write anything to the
|
|
|
|
filesystem. As such, it does not require a dist or source key to be
|
|
|
|
installable.
|
2013-08-13 11:25:21 +00:00
|
|
|
- **composer-plugin:** A package of type `composer-plugin` may provide an
|
2012-04-08 17:13:00 +00:00
|
|
|
installer for other packages that have a custom type. Read more in the
|
|
|
|
[dedicated article](articles/custom-installers.md).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
Only use a custom type if you need custom logic during installation. It is
|
|
|
|
recommended to omit this field and have it just default to `library`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### keywords
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
An array of keywords that the package is related to. These can be used for
|
|
|
|
searching and filtering.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Examples:
|
|
|
|
|
|
|
|
logging
|
|
|
|
events
|
|
|
|
database
|
|
|
|
redis
|
|
|
|
templating
|
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### homepage
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
An URL to the website of the project.
|
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### time
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Release date of the version.
|
|
|
|
|
|
|
|
Must be in `YYYY-MM-DD` or `YYYY-MM-DD HH:MM:SS` format.
|
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### license
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
The license of the package. This can be either a string or an array of strings.
|
|
|
|
|
2012-05-07 19:34:25 +00:00
|
|
|
The recommended notation for the most common licenses is (alphabetical):
|
|
|
|
|
|
|
|
Apache-2.0
|
|
|
|
BSD-2-Clause
|
|
|
|
BSD-3-Clause
|
|
|
|
BSD-4-Clause
|
|
|
|
GPL-2.0
|
|
|
|
GPL-2.0+
|
|
|
|
GPL-3.0
|
|
|
|
GPL-3.0+
|
2012-08-18 06:16:19 +00:00
|
|
|
LGPL-2.1
|
|
|
|
LGPL-2.1+
|
2012-05-07 19:34:25 +00:00
|
|
|
LGPL-3.0
|
|
|
|
LGPL-3.0+
|
2012-02-19 20:07:30 +00:00
|
|
|
MIT
|
2012-05-07 19:34:25 +00:00
|
|
|
|
|
|
|
Optional, but it is highly recommended to supply this. More identifiers are
|
|
|
|
listed at the [SPDX Open Source License Registry](http://www.spdx.org/licenses/).
|
|
|
|
|
2013-02-24 17:33:06 +00:00
|
|
|
For closed-source software, you may use `"proprietary"` as the license identifier.
|
|
|
|
|
2012-05-07 19:34:25 +00:00
|
|
|
An Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"license": "MIT"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2012-05-12 16:42:35 +00:00
|
|
|
For a package, when there is a choice between licenses ("disjunctive license"),
|
2012-05-07 19:34:25 +00:00
|
|
|
multiple can be specified as array.
|
|
|
|
|
|
|
|
An Example for disjunctive licenses:
|
|
|
|
|
|
|
|
{
|
|
|
|
"license": [
|
2012-08-18 06:16:19 +00:00
|
|
|
"LGPL-2.1",
|
2012-05-07 19:34:25 +00:00
|
|
|
"GPL-3.0+"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
|
2012-07-10 09:37:03 +00:00
|
|
|
Alternatively they can be separated with "or" and enclosed in parenthesis;
|
2012-05-07 19:34:25 +00:00
|
|
|
|
|
|
|
{
|
2012-08-18 06:16:19 +00:00
|
|
|
"license": "(LGPL-2.1 or GPL-3.0+)"
|
2012-05-07 19:34:25 +00:00
|
|
|
}
|
|
|
|
|
2012-05-12 16:42:35 +00:00
|
|
|
Similarly when multiple licenses need to be applied ("conjunctive license"),
|
2012-07-10 09:37:03 +00:00
|
|
|
they should be separated with "and" and enclosed in parenthesis.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### authors
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
The authors of the package. This is an array of objects.
|
|
|
|
|
|
|
|
Each author object can have following properties:
|
|
|
|
|
|
|
|
* **name:** The author's name. Usually his real name.
|
|
|
|
* **email:** The author's email address.
|
|
|
|
* **homepage:** An URL to the author's website.
|
2012-05-01 14:01:55 +00:00
|
|
|
* **role:** The authors' role in the project (e.g. developer or translator)
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
An example:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"authors": [
|
|
|
|
{
|
|
|
|
"name": "Nils Adermann",
|
|
|
|
"email": "naderman@naderman.de",
|
2012-04-28 14:26:47 +00:00
|
|
|
"homepage": "http://www.naderman.de",
|
|
|
|
"role": "Developer"
|
2012-02-29 14:56:53 +00:00
|
|
|
},
|
|
|
|
{
|
|
|
|
"name": "Jordi Boggiano",
|
|
|
|
"email": "j.boggiano@seld.be",
|
2012-04-28 14:26:47 +00:00
|
|
|
"homepage": "http://seld.be",
|
|
|
|
"role": "Developer"
|
2012-02-29 14:56:53 +00:00
|
|
|
}
|
|
|
|
]
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Optional, but highly recommended.
|
|
|
|
|
2012-05-27 23:57:12 +00:00
|
|
|
### support
|
|
|
|
|
|
|
|
Various information to get support about the project.
|
|
|
|
|
|
|
|
Support information includes the following:
|
|
|
|
|
|
|
|
* **email:** Email address for support.
|
|
|
|
* **issues:** URL to the Issue Tracker.
|
|
|
|
* **forum:** URL to the Forum.
|
|
|
|
* **wiki:** URL to the Wiki.
|
|
|
|
* **irc:** IRC channel for support, as irc://server/channel.
|
|
|
|
* **source:** URL to browse or download the sources.
|
|
|
|
|
|
|
|
An example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"support": {
|
|
|
|
"email": "support@example.org",
|
|
|
|
"irc": "irc://irc.freenode.org/composer"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
### Package links
|
|
|
|
|
|
|
|
All of the following take an object which maps package names to
|
|
|
|
[version constraints](01-basic-usage.md#package-versions).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"require": {
|
|
|
|
"monolog/monolog": "1.0.*"
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
}
|
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
All links are optional fields.
|
|
|
|
|
|
|
|
`require` and `require-dev` additionally support stability flags (root-only).
|
|
|
|
These allow you to further restrict or expand the stability of a package beyond
|
|
|
|
the scope of the [minimum-stability](#minimum-stability) setting. You can apply
|
|
|
|
them to a constraint, or just apply them to an empty constraint if you want to
|
2013-08-23 09:09:46 +00:00
|
|
|
allow unstable packages of a dependency for example.
|
2012-05-12 10:08:35 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"require": {
|
2012-07-06 10:40:43 +00:00
|
|
|
"monolog/monolog": "1.0.*@beta",
|
2012-05-12 10:08:35 +00:00
|
|
|
"acme/foo": "@dev"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-23 09:09:46 +00:00
|
|
|
If one of your dependencies has a dependency on an unstable package you need to
|
|
|
|
explicitly require it as well, along with its sufficient stability flag.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"require": {
|
|
|
|
"doctrine/doctrine-fixtures-bundle": "dev-master",
|
|
|
|
"doctrine/data-fixtures": "@dev"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-05-17 08:08:48 +00:00
|
|
|
`require` and `require-dev` additionally support explicit references (i.e.
|
2013-01-04 21:43:00 +00:00
|
|
|
commit) for dev versions to make sure they are locked to a given state, even
|
2012-05-17 08:08:48 +00:00
|
|
|
when you run update. These only work if you explicitly require a dev version
|
2013-11-11 13:41:21 +00:00
|
|
|
and append the reference with `#<ref>`.
|
2012-05-17 08:08:48 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"require": {
|
2012-07-06 10:40:43 +00:00
|
|
|
"monolog/monolog": "dev-master#2eb0c0978d290a1c45346a1955188929cb4e5db7",
|
2012-05-17 08:08:48 +00:00
|
|
|
"acme/foo": "1.0.x-dev#abc123"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-11-11 13:41:21 +00:00
|
|
|
> **Note:** While this is convenient at times, it should not be how you use
|
|
|
|
> packages in the long term because it comes with a technical limitation. The
|
|
|
|
> composer.json metadata will still be read from the branch name you specify
|
|
|
|
> before the hash. Because of that in some cases it will not be a practical
|
|
|
|
> workaround, and you should always try to switch to tagged releases as soon
|
|
|
|
> as you can.
|
|
|
|
|
|
|
|
It is also possible to inline-alias a package constraint so that it matches
|
|
|
|
a constraint that it otherwise would not. For more information [see the
|
2012-11-07 12:11:09 +00:00
|
|
|
aliases article](articles/aliases.md).
|
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
#### require
|
|
|
|
|
|
|
|
Lists packages required by this package. The package will not be installed
|
|
|
|
unless those requirements can be met.
|
|
|
|
|
2012-07-03 07:17:09 +00:00
|
|
|
#### require-dev <span>(root-only)</span>
|
2012-05-12 10:08:35 +00:00
|
|
|
|
|
|
|
Lists packages required for developing this package, or running
|
2013-08-07 19:11:52 +00:00
|
|
|
tests, etc. The dev requirements of the root package are installed by default.
|
|
|
|
Both `install` or `update` support the `--no-dev` option that prevents dev
|
|
|
|
dependencies from being installed.
|
2012-05-21 16:41:20 +00:00
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
#### conflict
|
|
|
|
|
|
|
|
Lists packages that conflict with this version of this package. They
|
|
|
|
will not be allowed to be installed together with your package.
|
|
|
|
|
2013-07-29 19:44:16 +00:00
|
|
|
Note that when specifying ranges like `<1.0, >= 1.1` in a `conflict` link,
|
2013-06-20 21:32:59 +00:00
|
|
|
this will state a conflict with all versions that are less than 1.0 *and* equal
|
|
|
|
or newer than 1.1 at the same time, which is probably not what you want. You
|
2013-07-29 19:44:16 +00:00
|
|
|
probably want to go for `<1.0 | >= 1.1` in this case.
|
2013-06-20 21:32:59 +00:00
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
#### replace
|
|
|
|
|
2012-05-12 16:27:28 +00:00
|
|
|
Lists packages that are replaced by this package. This allows you to fork a
|
|
|
|
package, publish it under a different name with its own version numbers, while
|
|
|
|
packages requiring the original package continue to work with your fork because
|
|
|
|
it replaces the original package.
|
2012-05-12 10:08:35 +00:00
|
|
|
|
2012-05-12 16:27:28 +00:00
|
|
|
This is also useful for packages that contain sub-packages, for example the main
|
2012-05-12 10:08:35 +00:00
|
|
|
symfony/symfony package contains all the Symfony Components which are also
|
|
|
|
available as individual packages. If you require the main package it will
|
|
|
|
automatically fulfill any requirement of one of the individual components,
|
|
|
|
since it replaces them.
|
|
|
|
|
2012-05-12 16:27:28 +00:00
|
|
|
Caution is advised when using replace for the sub-package purpose explained
|
|
|
|
above. You should then typically only replace using `self.version` as a version
|
2012-05-12 10:08:35 +00:00
|
|
|
constraint, to make sure the main package only replaces the sub-packages of
|
|
|
|
that exact version, and not any other version, which would be incorrect.
|
|
|
|
|
|
|
|
#### provide
|
|
|
|
|
|
|
|
List of other packages that are provided by this package. This is mostly
|
|
|
|
useful for common interfaces. A package could depend on some virtual
|
|
|
|
`logger` package, any library that implements this logger interface would
|
|
|
|
simply list it in `provide`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-04-14 21:52:52 +00:00
|
|
|
### suggest
|
|
|
|
|
|
|
|
Suggested packages that can enhance or work well with this package. These are
|
|
|
|
just informational and are displayed after the package is installed, to give
|
|
|
|
your users a hint that they could add more packages, even though they are not
|
|
|
|
strictly required.
|
|
|
|
|
|
|
|
The format is like package links above, except that the values are free text
|
|
|
|
and not version constraints.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"suggest": {
|
|
|
|
"monolog/monolog": "Allows more advanced logging of the application flow"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### autoload
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Autoload mapping for a PHP autoloader.
|
|
|
|
|
2014-01-03 15:46:56 +00:00
|
|
|
Currently [`PSR-0`](http://www.php-fig.org/psr/psr-0/) autoloading,
|
|
|
|
[`PSR-4`](http://www.php-fig.org/psr/psr-4/) autoloading, `classmap` generation and
|
|
|
|
`files` includes are supported. PSR-4 is the recommended way though since it offers
|
|
|
|
greater ease of use (no need to regenerate the autoloader when you add classes).
|
|
|
|
|
|
|
|
#### PSR-4
|
|
|
|
|
|
|
|
Under the `psr-4` key you define a mapping from namespaces to paths, relative to the
|
|
|
|
package root. When autoloading a class like `Foo\\Bar\\Baz` a namespace prefix
|
|
|
|
`Foo\\` pointing to a directory `src/` means that the autoloader will look for a
|
|
|
|
file named `src/Bar/Baz.php` and include it if present. Note that as opposed to
|
|
|
|
the older PSR-0 style, the prefix (`Foo\\`) is **not** present in the file path.
|
|
|
|
|
|
|
|
Namespace prefixes must end in `\\` to avoid conflicts between similar prefixes.
|
|
|
|
For example `Foo` would match classes in the `FooBar` namespace so the trailing
|
|
|
|
backslashes solve the problem: `Foo\\` and `FooBar\\` are distinct.
|
|
|
|
|
|
|
|
The PSR-4 references are all combined, during install/update, into a single
|
|
|
|
key => value array which may be found in the generated file
|
|
|
|
`vendor/composer/autoload_psr4.php`.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
|
|
|
"psr-4": {
|
|
|
|
"Monolog\\": "src/",
|
2014-01-30 09:08:56 +00:00
|
|
|
"Vendor\\Namespace\\": ""
|
2014-01-03 15:46:56 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
If you need to search for a same prefix in multiple directories,
|
|
|
|
you can specify them as an array as such:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
|
|
|
"psr-4": { "Monolog\\": ["src/", "lib/"] }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
If you want to have a fallback directory where any namespace will be looked for,
|
|
|
|
you can use an empty prefix like:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
|
|
|
"psr-4": { "": "src/" }
|
|
|
|
}
|
|
|
|
}
|
2012-03-05 13:13:06 +00:00
|
|
|
|
2012-10-24 12:31:59 +00:00
|
|
|
#### PSR-0
|
|
|
|
|
2012-03-05 13:13:06 +00:00
|
|
|
Under the `psr-0` key you define a mapping from namespaces to paths, relative to the
|
2012-06-04 03:15:59 +00:00
|
|
|
package root. Note that this also supports the PEAR-style non-namespaced convention.
|
|
|
|
|
2013-05-13 12:58:11 +00:00
|
|
|
Please note namespace declarations should end in `\\` to make sure the autoloader
|
2013-05-13 13:03:42 +00:00
|
|
|
responds exactly. For example `Foo` would match in `FooBar` so the trailing
|
2013-05-13 12:58:11 +00:00
|
|
|
backslashes solve the problem: `Foo\\` and `FooBar\\` are distinct.
|
|
|
|
|
2012-06-07 10:25:05 +00:00
|
|
|
The PSR-0 references are all combined, during install/update, into a single key => value
|
2012-06-04 03:15:59 +00:00
|
|
|
array which may be found in the generated file `vendor/composer/autoload_namespaces.php`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"autoload": {
|
2012-04-27 08:01:01 +00:00
|
|
|
"psr-0": {
|
2013-05-13 12:58:11 +00:00
|
|
|
"Monolog\\": "src/",
|
2012-12-10 15:28:59 +00:00
|
|
|
"Vendor\\Namespace\\": "src/",
|
|
|
|
"Vendor_Namespace_": "src/"
|
2012-04-27 08:01:01 +00:00
|
|
|
}
|
2012-02-29 14:56:53 +00:00
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
}
|
|
|
|
|
2012-04-27 08:01:01 +00:00
|
|
|
If you need to search for a same prefix in multiple directories,
|
2012-03-28 15:09:07 +00:00
|
|
|
you can specify them as an array as such:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
2013-05-13 12:58:11 +00:00
|
|
|
"psr-0": { "Monolog\\": ["src/", "lib/"] }
|
2012-03-28 15:09:07 +00:00
|
|
|
}
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-06-07 10:25:05 +00:00
|
|
|
The PSR-0 style is not limited to namespace declarations only but may be
|
|
|
|
specified right down to the class level. This can be useful for libraries with
|
|
|
|
only one class in the global namespace. If the php source file is also located
|
2012-06-04 03:15:59 +00:00
|
|
|
in the root of the package, for example, it may be declared like this:
|
|
|
|
|
2012-06-07 10:25:05 +00:00
|
|
|
{
|
2012-06-04 03:15:59 +00:00
|
|
|
"autoload": {
|
|
|
|
"psr-0": { "UniqueGlobalClass": "" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-04-27 08:01:01 +00:00
|
|
|
If you want to have a fallback directory where any namespace can be, you can
|
|
|
|
use an empty prefix like:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
|
|
|
"psr-0": { "": "src/" }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-10-24 12:31:59 +00:00
|
|
|
#### Classmap
|
|
|
|
|
2012-06-07 10:25:05 +00:00
|
|
|
The `classmap` references are all combined, during install/update, into a single
|
|
|
|
key => value array which may be found in the generated file
|
2012-12-08 20:54:51 +00:00
|
|
|
`vendor/composer/autoload_classmap.php`. This map is built by scanning for
|
|
|
|
classes in all `.php` and `.inc` files in the given directories/files.
|
2012-06-04 03:15:59 +00:00
|
|
|
|
2012-03-05 13:13:06 +00:00
|
|
|
You can use the classmap generation support to define autoloading for all libraries
|
2014-01-03 15:46:56 +00:00
|
|
|
that do not follow PSR-0/4. To configure this you specify all directories or files
|
2012-03-05 13:13:06 +00:00
|
|
|
to search for classes.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
2012-07-06 10:40:43 +00:00
|
|
|
"autoload": {
|
2012-04-27 08:01:01 +00:00
|
|
|
"classmap": ["src/", "lib/", "Something.php"]
|
2012-03-05 13:13:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-10-24 12:31:59 +00:00
|
|
|
#### Files
|
|
|
|
|
2012-06-02 16:18:33 +00:00
|
|
|
If you want to require certain files explicitly on every request then you can use
|
|
|
|
the 'files' autoloading mechanism. This is useful if your package includes PHP functions
|
|
|
|
that cannot be autoloaded by PHP.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
|
|
|
"files": ["src/MyLibrary/functions.php"]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-02-27 09:39:33 +00:00
|
|
|
### autoload-dev <span>(root-only)</span>
|
|
|
|
|
2014-03-01 19:39:06 +00:00
|
|
|
This section allows to define autoload rules for development purposes.
|
2014-02-27 09:39:33 +00:00
|
|
|
|
2014-03-01 19:39:06 +00:00
|
|
|
Classes needed to run the test suite should not be included in the main autoload
|
|
|
|
rules to avoid polluting the autoloader in production and when other people use
|
|
|
|
your package as a dependency.
|
2014-02-27 09:39:33 +00:00
|
|
|
|
2014-03-01 19:39:06 +00:00
|
|
|
Therefore, it is a good idea to rely on a dedicated path for your unit tests
|
|
|
|
and to add it within the autoload-dev section.
|
2014-02-27 09:39:33 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"autoload": {
|
2014-03-01 19:39:06 +00:00
|
|
|
"psr-4": { "MyLibrary\\": "src/" }
|
2014-02-27 09:39:33 +00:00
|
|
|
},
|
|
|
|
"autoload-dev": {
|
2014-03-01 19:39:06 +00:00
|
|
|
"psr-4": { "MyLibrary\\Tests": "tests/" }
|
2014-02-27 09:39:33 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-04-08 15:42:57 +00:00
|
|
|
### include-path
|
|
|
|
|
2012-05-12 10:13:15 +00:00
|
|
|
> **DEPRECATED**: This is only present to support legacy projects, and all new code
|
|
|
|
> should preferably use autoloading. As such it is a deprecated practice, but the
|
|
|
|
> feature itself will not likely disappear from Composer.
|
2012-04-04 08:39:00 +00:00
|
|
|
|
|
|
|
A list of paths which should get appended to PHP's `include_path`.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
2012-04-08 15:42:57 +00:00
|
|
|
"include-path": ["lib/"]
|
2012-04-04 08:39:00 +00:00
|
|
|
}
|
|
|
|
|
2012-04-13 10:41:16 +00:00
|
|
|
Optional.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### target-dir
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2014-01-03 15:46:56 +00:00
|
|
|
> **DEPRECATED**: This is only present to support legacy PSR-0 style autoloading,
|
|
|
|
> and all new code should preferably use PSR-4 without target-dir and projects
|
|
|
|
> using PSR-0 with PHP namespaces are encouraged to migrate to PSR-4 instead.
|
|
|
|
|
2012-02-19 20:07:30 +00:00
|
|
|
Defines the installation target.
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
In case the package root is below the namespace declaration you cannot
|
|
|
|
autoload properly. `target-dir` solves this problem.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
An example is Symfony. There are individual packages for the components. The
|
|
|
|
Yaml component is under `Symfony\Component\Yaml`. The package root is that
|
|
|
|
`Yaml` directory. To make autoloading possible, we need to make sure that it
|
|
|
|
is not installed into `vendor/symfony/yaml`, but instead into
|
|
|
|
`vendor/symfony/yaml/Symfony/Component/Yaml`, so that the autoloader can load
|
|
|
|
it from `vendor/symfony/yaml`.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
To do that, `autoload` and `target-dir` are defined as follows:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"autoload": {
|
2013-05-13 12:58:11 +00:00
|
|
|
"psr-0": { "Symfony\\Component\\Yaml\\": "" }
|
2012-02-29 14:56:53 +00:00
|
|
|
},
|
|
|
|
"target-dir": "Symfony/Component/Yaml"
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-05-12 10:08:35 +00:00
|
|
|
### minimum-stability <span>(root-only)</span>
|
|
|
|
|
|
|
|
This defines the default behavior for filtering packages by stability. This
|
2012-07-04 14:37:28 +00:00
|
|
|
defaults to `stable`, so if you rely on a `dev` package, you should specify
|
|
|
|
it in your file to avoid surprises.
|
2012-05-12 10:08:35 +00:00
|
|
|
|
2012-07-04 14:37:28 +00:00
|
|
|
All versions of each package are checked for stability, and those that are less
|
2012-05-12 10:08:35 +00:00
|
|
|
stable than the `minimum-stability` setting will be ignored when resolving
|
|
|
|
your project dependencies. Specific changes to the stability requirements of
|
|
|
|
a given package can be done in `require` or `require-dev` (see
|
|
|
|
[package links](#package-links)).
|
|
|
|
|
2012-09-10 15:18:22 +00:00
|
|
|
Available options (in order of stability) are `dev`, `alpha`, `beta`, `RC`,
|
|
|
|
and `stable`.
|
2012-07-04 14:37:28 +00:00
|
|
|
|
2013-03-30 19:02:29 +00:00
|
|
|
### prefer-stable <span>(root-only)</span>
|
|
|
|
|
|
|
|
When this is enabled, Composer will prefer more stable packages over unstable
|
|
|
|
ones when finding compatible stable packages is possible. If you require a
|
|
|
|
dev version or only alphas are available for a package, those will still be
|
2013-06-30 22:14:57 +00:00
|
|
|
selected granted that the minimum-stability allows for it.
|
|
|
|
|
|
|
|
Use `"prefer-stable": true` to enable.
|
2013-03-30 19:02:29 +00:00
|
|
|
|
2012-04-13 10:41:16 +00:00
|
|
|
### repositories <span>(root-only)</span>
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Custom package repositories to use.
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
By default composer just uses the packagist repository. By specifying
|
|
|
|
repositories you can get packages from elsewhere.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
Repositories are not resolved recursively. You can only add them to your main
|
|
|
|
`composer.json`. Repository declarations of dependencies' `composer.json`s are
|
|
|
|
ignored.
|
2012-02-19 21:31:04 +00:00
|
|
|
|
2012-02-26 11:40:35 +00:00
|
|
|
The following repository types are supported:
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
* **composer:** A composer repository is simply a `packages.json` file served
|
2012-10-03 18:32:00 +00:00
|
|
|
via the network (HTTP, FTP, SSH), that contains a list of `composer.json`
|
|
|
|
objects with additional `dist` and/or `source` information. The `packages.json`
|
|
|
|
file is loaded using a PHP stream. You can set extra options on that stream
|
|
|
|
using the `options` parameter.
|
2012-02-20 10:08:18 +00:00
|
|
|
* **vcs:** The version control system repository can fetch packages from git,
|
2012-02-26 11:40:35 +00:00
|
|
|
svn and hg repositories.
|
2012-02-20 10:08:18 +00:00
|
|
|
* **pear:** With this you can import any pear repository into your composer
|
|
|
|
project.
|
|
|
|
* **package:** If you depend on a project that does not have any support for
|
|
|
|
composer whatsoever you can define the package inline using a `package`
|
|
|
|
repository. You basically just inline the `composer.json` object.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-07 23:18:03 +00:00
|
|
|
For more information on any of these, see [Repositories](05-repositories.md).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"repositories": [
|
|
|
|
{
|
|
|
|
"type": "composer",
|
|
|
|
"url": "http://packages.example.com"
|
|
|
|
},
|
2012-10-03 18:32:00 +00:00
|
|
|
{
|
|
|
|
"type": "composer",
|
|
|
|
"url": "https://packages.example.com",
|
|
|
|
"options": {
|
|
|
|
"ssl": {
|
|
|
|
"verify_peer": "true"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"type": "vcs",
|
|
|
|
"url": "https://github.com/Seldaek/monolog"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "pear",
|
|
|
|
"url": "http://pear2.php.net"
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"type": "package",
|
|
|
|
"package": {
|
|
|
|
"name": "smarty/smarty",
|
|
|
|
"version": "3.1.7",
|
|
|
|
"dist": {
|
|
|
|
"url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
|
|
|
|
"type": "zip"
|
|
|
|
},
|
|
|
|
"source": {
|
|
|
|
"url": "http://smarty-php.googlecode.com/svn/",
|
|
|
|
"type": "svn",
|
|
|
|
"reference": "tags/Smarty_3_1_7/distribution/"
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
}
|
|
|
|
}
|
2012-02-29 14:56:53 +00:00
|
|
|
]
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-15 00:13:10 +00:00
|
|
|
> **Note:** Order is significant here. When looking for a package, Composer
|
|
|
|
will look from the first to the last repository, and pick the first match.
|
|
|
|
By default Packagist is added last which means that custom repositories can
|
|
|
|
override packages from it.
|
2012-02-20 00:04:35 +00:00
|
|
|
|
2012-04-13 10:41:16 +00:00
|
|
|
### config <span>(root-only)</span>
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
A set of configuration options. It is only used for projects.
|
|
|
|
|
|
|
|
The following options are supported:
|
|
|
|
|
2012-02-27 10:35:26 +00:00
|
|
|
* **process-timeout:** Defaults to `300`. The duration processes like git clones
|
2012-02-27 08:32:59 +00:00
|
|
|
can run before Composer assumes they died out. You may need to make this
|
|
|
|
higher if you have a slow connection or huge vendors.
|
2013-02-12 10:16:52 +00:00
|
|
|
* **use-include-path:** Defaults to `false`. If true, the Composer autoloader
|
|
|
|
will also look for classes in the PHP include path.
|
2013-03-05 11:56:09 +00:00
|
|
|
* **preferred-install:** Defaults to `auto` and can be any of `source`, `dist` or
|
|
|
|
`auto`. This option allows you to set the install method Composer will prefer to
|
|
|
|
use.
|
2014-02-13 15:23:53 +00:00
|
|
|
* **github-protocols:** Defaults to `["git", "https", "ssh"]`. A list of protocols to
|
2013-06-28 17:16:12 +00:00
|
|
|
use when cloning from github.com, in priority order. You can reconfigure it to
|
2014-02-13 15:23:53 +00:00
|
|
|
for example prioritize the https protocol if you are behind a proxy or have somehow
|
|
|
|
bad performances with the git protocol.
|
2012-12-08 19:53:24 +00:00
|
|
|
* **github-oauth:** A list of domain names and oauth keys. For example using
|
|
|
|
`{"github.com": "oauthtoken"}` as the value of this option will use `oauthtoken`
|
|
|
|
to access private repositories on github and to circumvent the low IP-based
|
|
|
|
rate limiting of their API.
|
2014-01-31 16:33:13 +00:00
|
|
|
[Read more](articles/troubleshooting.md#api-rate-limit-and-oauth-tokens)
|
2014-01-31 16:33:47 +00:00
|
|
|
on how to get an OAuth token for GitHub.
|
2013-02-12 10:16:52 +00:00
|
|
|
* **vendor-dir:** Defaults to `vendor`. You can install dependencies into a
|
|
|
|
different directory if you want to.
|
|
|
|
* **bin-dir:** Defaults to `vendor/bin`. If a project includes binaries, they
|
|
|
|
will be symlinked into this directory.
|
2012-11-22 23:28:47 +00:00
|
|
|
* **cache-dir:** Defaults to `$home/cache` on unix systems and
|
|
|
|
`C:\Users\<user>\AppData\Local\Composer` on Windows. Stores all the caches
|
|
|
|
used by composer. See also [COMPOSER_HOME](03-cli.md#composer-home).
|
|
|
|
* **cache-files-dir:** Defaults to `$cache-dir/files`. Stores the zip archives
|
|
|
|
of packages.
|
|
|
|
* **cache-repo-dir:** Defaults to `$cache-dir/repo`. Stores repository metadata
|
2013-02-28 16:10:04 +00:00
|
|
|
for the `composer` type and the VCS repos of type `svn`, `github` and `bitbucket`.
|
2012-11-22 23:28:47 +00:00
|
|
|
* **cache-vcs-dir:** Defaults to `$cache-dir/vcs`. Stores VCS clones for
|
|
|
|
loading VCS repository metadata for the `git`/`hg` types and to speed up installs.
|
2012-11-11 14:31:50 +00:00
|
|
|
* **cache-files-ttl:** Defaults to `15552000` (6 months). Composer caches all
|
|
|
|
dist (zip, tar, ..) packages that it downloads. Those are purged after six
|
|
|
|
months of being unused by default. This option allows you to tweak this
|
|
|
|
duration (in seconds) or disable it completely by setting it to 0.
|
2013-02-12 10:16:52 +00:00
|
|
|
* **cache-files-maxsize:** Defaults to `300MiB`. Composer caches all
|
|
|
|
dist (zip, tar, ..) packages that it downloads. When the garbage collection
|
|
|
|
is periodically ran, this is the maximum size the cache will be able to use.
|
|
|
|
Older (less used) files will be removed first until the cache fits.
|
2013-10-16 10:17:18 +00:00
|
|
|
* **prepend-autoloader:** Defaults to `true`. If false, the composer autoloader
|
2013-11-13 07:15:08 +00:00
|
|
|
will not be prepended to existing autoloaders. This is sometimes required to fix
|
2013-10-16 10:17:18 +00:00
|
|
|
interoperability issues with other autoloaders.
|
2013-12-26 16:40:52 +00:00
|
|
|
* **autoloader-suffix:** Defaults to `null`. String to be used as a suffix for
|
|
|
|
the generated Composer autoloader. When null a random one will be generated.
|
2014-01-17 13:43:54 +00:00
|
|
|
* **optimize-autoloader** Defaults to `false`. Always optimize when dumping
|
2014-01-16 21:03:04 +00:00
|
|
|
the autoloader.
|
2012-09-07 23:51:33 +00:00
|
|
|
* **github-domains:** Defaults to `["github.com"]`. A list of domains to use in
|
|
|
|
github mode. This is used for GitHub Enterprise setups.
|
2012-11-22 23:28:47 +00:00
|
|
|
* **notify-on-install:** Defaults to `true`. Composer allows repositories to
|
|
|
|
define a notification URL, so that they get notified whenever a package from
|
|
|
|
that repository is installed. This option allows you to disable that behaviour.
|
2013-02-28 16:10:04 +00:00
|
|
|
* **discard-changes:** Defaults to `false` and can be any of `true`, `false` or
|
2013-03-01 22:47:24 +00:00
|
|
|
`"stash"`. This option allows you to set the default style of handling dirty
|
|
|
|
updates when in non-interactive mode. `true` will always discard changes in
|
|
|
|
vendors, while `"stash"` will try to stash and reapply. Use this for CI
|
|
|
|
servers or deploy scripts if you tend to have modified vendors.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Example:
|
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
{
|
|
|
|
"config": {
|
|
|
|
"bin-dir": "bin"
|
|
|
|
}
|
2012-02-19 20:07:30 +00:00
|
|
|
}
|
|
|
|
|
2012-04-13 12:35:13 +00:00
|
|
|
### scripts <span>(root-only)</span>
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-26 11:40:35 +00:00
|
|
|
Composer allows you to hook into various parts of the installation process
|
|
|
|
through the use of scripts.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-26 22:59:08 +00:00
|
|
|
See [Scripts](articles/scripts.md) for events details and examples.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### extra
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Arbitrary extra data for consumption by `scripts`.
|
|
|
|
|
2012-02-20 10:08:18 +00:00
|
|
|
This can be virtually anything. To access it from within a script event
|
|
|
|
handler, you can do:
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-02-29 14:56:53 +00:00
|
|
|
$extra = $event->getComposer()->getPackage()->getExtra();
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-03-18 10:49:06 +00:00
|
|
|
### bin
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2012-04-12 08:04:45 +00:00
|
|
|
A set of files that should be treated as binaries and symlinked into the `bin-dir`
|
|
|
|
(from config).
|
2012-02-19 20:07:30 +00:00
|
|
|
|
2013-01-14 18:42:12 +00:00
|
|
|
See [Vendor Binaries](articles/vendor-binaries.md) for more details.
|
2012-02-19 20:07:30 +00:00
|
|
|
|
|
|
|
Optional.
|
2012-03-07 16:35:53 +00:00
|
|
|
|
2013-02-07 14:45:58 +00:00
|
|
|
### archive
|
|
|
|
|
|
|
|
A set of options for creating package archives.
|
|
|
|
|
|
|
|
The following options are supported:
|
|
|
|
|
|
|
|
* **exclude:** Allows configuring a list of patterns for excluded paths. The
|
|
|
|
pattern syntax matches .gitignore files. A leading exclamation mark (!) will
|
|
|
|
result in any matching files to be included even if a previous pattern
|
|
|
|
excluded them. A leading slash will only match at the beginning of the project
|
|
|
|
relative path. An asterisk will not expand to a directory separator.
|
|
|
|
|
|
|
|
Example:
|
|
|
|
|
|
|
|
{
|
|
|
|
"archive": {
|
|
|
|
"exclude": ["/foo/bar", "baz", "/*.test", "!/foo/bar/baz"]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
The example will include `/dir/foo/bar/file`, `/foo/bar/baz`, `/file.php`,
|
|
|
|
`/foo/my.test` but it will exclude `/foo/bar/any`, `/foo/baz`, and `/my.test`.
|
|
|
|
|
|
|
|
Optional.
|
|
|
|
|
2012-03-10 00:22:40 +00:00
|
|
|
← [Command-line interface](03-cli.md) | [Repositories](05-repositories.md) →
|