| OLD | NEW | 
|---|
|  | (Empty) | 
| 1 --- |  | 
| 2 title: "Glossary" |  | 
| 3 --- |  | 
| 4 |  | 
| 5 ### Application package |  | 
| 6 |  | 
| 7 A package that is not intended to be used as a library. Application packages may |  | 
| 8 have [dependencies](#dependency) on other packages, but are never depended on |  | 
| 9 themselves. They are usually meant to be run directly, either on the command |  | 
| 10 line or in a browser. The opposite of an application package is a [library |  | 
| 11 package](#library-package). |  | 
| 12 |  | 
| 13 Application packages should check their [lockfiles](#lockfile) into source |  | 
| 14 control, so that everyone working on the application and every location the |  | 
| 15 application is deployed has a consistent set of dependencies. Because their |  | 
| 16 dependencies are constrained by the lockfile, application packages usually |  | 
| 17 specify `any` for their dependencies' [version |  | 
| 18 constraints](#version-constraint). |  | 
| 19 |  | 
| 20 ### Asset |  | 
| 21 |  | 
| 22 <div class="learn-more"> |  | 
| 23   <a href="/doc/assets-and-transformers.html"> |  | 
| 24     Learn more about assets → |  | 
| 25   </a> |  | 
| 26 </div> |  | 
| 27 |  | 
| 28 A resource—Dart, HTML, JavaScript, CSS, image, or anything |  | 
| 29 else—intended to be part of a deployed package. The package can be a web |  | 
| 30 app, a package used by a web app, or any other package that benefits from a |  | 
| 31 build step. Tools such as [`pub serve`](pub-serve.html) and [`pub build`](pub- |  | 
| 32 build.html) take _source_ assets (such as an HTML file, a CSS file, and |  | 
| 33 several Dart files) and produce _generated_ assets (such as the same HTML and |  | 
| 34 CSS files, plus a single JavaScript file). |  | 
| 35 |  | 
| 36 Assets fall into four groups, with some overlap: |  | 
| 37 |  | 
| 38 * Source asset: An actual, authored file on disk that `pub build` and |  | 
| 39   `pub serve` can find and use. |  | 
| 40 * Generated asset: An asset (possibly the output of a |  | 
| 41   [transformer](#transformer)) that's either served by `pub serve` or saved |  | 
| 42   to disk by `pub build`. |  | 
| 43 * Input asset: An asset that is the input to a transformer. An input asset |  | 
| 44   might be a source asset, or it might be the output of a transformer in a |  | 
| 45   previous phase. |  | 
| 46 * Output asset: An asset that is created by a transformer. An output asset |  | 
| 47   might be a generated asset, or it might be the input to a transformer in a |  | 
| 48   later phase. |  | 
| 49 |  | 
| 50 ### Dependency |  | 
| 51 |  | 
| 52 Another package that your package relies on. If your package wants to import |  | 
| 53 code from some other package, that package must be a dependency. Dependencies |  | 
| 54 are specified in your package's [pubspec](pubspec.html) and described |  | 
| 55 [here](dependencies.html). |  | 
| 56 |  | 
| 57 ### Entrypoint |  | 
| 58 |  | 
| 59 "Entrypoint" is used to mean two things. In the general context of Dart, it is |  | 
| 60 a Dart library that is directly invoked by a Dart implementation. When you |  | 
| 61 reference a Dart library in a `<script>` tag or pass it as a command line |  | 
| 62 argument to the standalone Dart VM, that library is the entrypoint. In other |  | 
| 63 words, it's usually the `.dart` file that contains `main()`. |  | 
| 64 |  | 
| 65 In the context of pub, an "entrypoint package" or "root package" is the root |  | 
| 66 of a dependency graph. It will usually be an application. When you run your app, |  | 
| 67 it's the entrypoint package. Every other package it depends on will not be an |  | 
| 68 entrypoint in that context. |  | 
| 69 |  | 
| 70 A package can be an entrypoint in some contexts and not in others. Lets say your |  | 
| 71 app uses a library package A. When you run your app, A is not the entrypoint |  | 
| 72 package. However, if you go over to A and execute its unit tests, in that |  | 
| 73 context, it *is* the entrypoint since your app isn't involved. |  | 
| 74 |  | 
| 75 ### Entrypoint directory |  | 
| 76 |  | 
| 77 A directory inside your package that is allowed to contain |  | 
| 78 [Dart entrypoints](#entrypoint). Pub will ensure all of these directories get |  | 
| 79 a "packages" directory, which is needed for "package:" imports to work. |  | 
| 80 |  | 
| 81 Pub has a whitelist of these directories: `benchmark`, `bin`, `example`, |  | 
| 82 `test`, `tool`, and `web`. Any subdirectories of those (except `bin`) may also |  | 
| 83 contain entrypoints. |  | 
| 84 |  | 
| 85 ### Immediate dependency |  | 
| 86 |  | 
| 87 A [dependency](#dependency) that your package directly uses itself. The |  | 
| 88 dependencies you list in your pubspec are your package's immediate dependencies. |  | 
| 89 All other dependencies are [transitive dependencies](#transitive-dependency). |  | 
| 90 |  | 
| 91 ### Library package |  | 
| 92 |  | 
| 93 A package that other packages will depend on. Library packages may have |  | 
| 94 [dependencies](#dependency) on other packages *and* may be dependencies |  | 
| 95 themselves. They may also include scripts that will be run directly. The |  | 
| 96 opposite of a library package is an [application package](#application-package). |  | 
| 97 |  | 
| 98 Library packages should not check their [lockfile](#lockfile) into source |  | 
| 99 control, since they should support a range of dependency versions. Their |  | 
| 100 [immediate dependencies](#immediate-dependency)' [version |  | 
| 101 constraints](#version-constraints) should be as wide as possible while still |  | 
| 102 ensuring that the dependencies will be compatible with the versions that were |  | 
| 103 tested against. |  | 
| 104 |  | 
| 105 Since [semantic versioning](http://semver.org) requires that libraries increment |  | 
| 106 their major version numbers for any backwards incompatible changes, library |  | 
| 107 packages will usually require their dependencies' versions to be greater than or |  | 
| 108 equal to the versions that were tested and less than the next major version. So |  | 
| 109 if your library depended on the (fictional) `transmogrify` package and you |  | 
| 110 tested it at version 1.2.1, your version constraint would be `">=1.2.1 <2.0.0"`. |  | 
| 111 |  | 
| 112 ### Lockfile |  | 
| 113 |  | 
| 114 A file named `pubspec.lock` that specifies the concrete versions and other |  | 
| 115 identifying information for every immediate and transitive dependency a package |  | 
| 116 relies on. |  | 
| 117 |  | 
| 118 Unlike the pubspec, which only lists immediate dependencies and allows version |  | 
| 119 ranges, the lock file comprehensively pins down the entire dependency graph to |  | 
| 120 specific versions of packages. A lockfile ensures that you can recreate the |  | 
| 121 exact configuration of packages used by an application. |  | 
| 122 |  | 
| 123 The lockfile is generated automatically for you by pub when you run |  | 
| 124 [`pub get`](pub-get.html) or [`pub upgrade`](pub-upgrade.html). If your |  | 
| 125 package is an application package, you will typically check this into source |  | 
| 126 control. For library packages, you usually won't. |  | 
| 127 |  | 
| 128 ### SDK constraint |  | 
| 129 |  | 
| 130 The declared versions of the Dart SDK itself that a package declares that it |  | 
| 131 supports. An SDK constraint is specified using normal |  | 
| 132 [version constraint](#version-constraint) syntax, but in a special "environment" |  | 
| 133 section [in the pubspec](pubspec.html#sdk-constraints). |  | 
| 134 |  | 
| 135 ### Source |  | 
| 136 |  | 
| 137 A kind of place that pub can get packages from. A source isn't a specific place |  | 
| 138 like pub.dartlang.org or some specific Git URL. Each source describes a general |  | 
| 139 procedure for accessing a package in some way. For example, "git" is one source. |  | 
| 140 The git source knows how to download packages given a Git URL. There are a few |  | 
| 141 different [supported sources](dependencies.html#sources). |  | 
| 142 |  | 
| 143 ### System cache |  | 
| 144 |  | 
| 145 When pub gets a remote package, it downloads it into a single "system cache" |  | 
| 146 directory maintained by pub. When it generates a "packages" directory for a |  | 
| 147 package, that only contains symlinks to the real packages in the system cache. |  | 
| 148 On Mac and Linux, this directory defaults to `~/.pub-cache`. On Windows, it |  | 
| 149 goes in `AppData\Roaming\Pub\Cache`. |  | 
| 150 |  | 
| 151 This means you only have to download a given version of a package once and can |  | 
| 152 then reuse it in as many packages as you would like. It also means you can |  | 
| 153 delete and regenerate your "packages" directory without having to access the |  | 
| 154 network. |  | 
| 155 |  | 
| 156 ### Transformer |  | 
| 157 |  | 
| 158 <div class="learn-more"> |  | 
| 159   <a href="/doc/assets-and-transformers.html"> |  | 
| 160     Learn more about transformers → |  | 
| 161   </a> |  | 
| 162 </div> |  | 
| 163 |  | 
| 164 A transformer is a Dart object that converts input [assets](#asset) (such as |  | 
| 165 Dart files or Polymer-formatted HTML) into output assets (such as JavaScript |  | 
| 166 and HTML). The [`pub build`](pub-build.html) command puts the generated assets |  | 
| 167 into files. The [`pub serve`](pub-serve.html) command, on the other hand, |  | 
| 168 doesn't produce files; its generated assets are served directly by the dev |  | 
| 169 server. |  | 
| 170 |  | 
| 171 ### Transitive dependency |  | 
| 172 |  | 
| 173 A dependency that your package indirectly uses because one of its dependencies |  | 
| 174 requires it. If your package depends on A, which in turn depends on B which |  | 
| 175 depends on C, then A is an [immediate dependency](#immediate-dependency) and B |  | 
| 176 and C are transitive ones. |  | 
| 177 |  | 
| 178 ### Uploader |  | 
| 179 |  | 
| 180 An uploader of a package is someone who has administrative permissions |  | 
| 181 for that package. They can not only upload new versions of a package, |  | 
| 182 but also [add and remove other uploaders](pub-uploader.html) for that |  | 
| 183 package. The uploader of a package is often, but not necessarily, the |  | 
| 184 same as the [author](pubspec.html#authorauthors) of a package. |  | 
| 185 |  | 
| 186 Anyone uploading a new package automatically becomes an uploader for |  | 
| 187 that package. Otherwise, to become an uploader, you need to contact an |  | 
| 188 existing uploader and ask them to add you as another uploader. |  | 
| 189 |  | 
| 190 ### Version constraint |  | 
| 191 |  | 
| 192 <div class="learn-more"> |  | 
| 193   <a href="/doc/dependencies.html#version-constraints"> |  | 
| 194     Learn more about version constaints → |  | 
| 195   </a> |  | 
| 196 </div> |  | 
| 197 |  | 
| 198 A constraint placed on each [dependency](#dependency) of a package that |  | 
| 199 specifies which versions of that dependency the package is expected to work |  | 
| 200 with. This can be a single version (e.g. `0.3.0`), a range of versions (e.g. |  | 
| 201 `">=1.2.1 <2.0.0"`), or `any` (or just empty) to specify that any version is |  | 
| 202 allowed. |  | 
| 203 |  | 
| 204 <div class="learn-more"> |  | 
| 205   <a href="/doc/versioning.html"> |  | 
| 206     Learn about pub's versioning philosophy → |  | 
| 207   </a> |  | 
| 208 </div> |  | 
| 209 |  | 
| 210 [Library packages](#library-package) should always specify version constraints |  | 
| 211 for all of their dependencies, but [application packages](#application-package) |  | 
| 212 should usually allow any version of their dependencies, since they use the |  | 
| 213 [lockfile](#lockfile) to manage their dependency versions. |  | 
| OLD | NEW | 
|---|