| Index: app/doc/package-layout.markdown | 
| diff --git a/app/doc/package-layout.markdown b/app/doc/package-layout.markdown | 
| deleted file mode 100644 | 
| index 85f391724f250762f70eb8a75aafcbb6e261a687..0000000000000000000000000000000000000000 | 
| --- a/app/doc/package-layout.markdown | 
| +++ /dev/null | 
| @@ -1,362 +0,0 @@ | 
| ---- | 
| -title: "Package layout conventions" | 
| ---- | 
| - | 
| -1. [The basics](#the-basics) | 
| -1. [README](#readme) | 
| -1. [Public libraries](#public-libraries) | 
| -1. [Public assets](#public-assets) | 
| -1. [Implementation files](#implementation-files) | 
| -1. [Web files](#web-files) | 
| -1. [Command-line apps](#command-line-apps) | 
| -1. [Tests and benchmarks](#tests-and-benchmarks) | 
| -1. [Documentation](#documentation) | 
| -1. [Examples](#examples) | 
| -1. [Internal tools and scripts](#internal-tools-and-scripts) | 
| -{:.toc} | 
| - | 
| -Part of a healthy code ecosystem is consistent conventions. When we all do the | 
| -same thing the same way, it makes it easier for us to learn our way around | 
| -each other's work. It also makes it easier to write tools that can automatically | 
| -do stuff for us. | 
| - | 
| -When you build a Pub package, we have a set of conventions we encourage you to | 
| -follow. They describe how you organize the files and directories within your | 
| -package, and how to name things. You don't have to have every single thing | 
| -these guidelines specify. If your package doesn't have binaries, it doesn't | 
| -need a directory for them. But if it does, you'll make everyone's life easier | 
| -if you call it `bin`. | 
| - | 
| -To give you a picture of the whole enchilada, here's what a complete package | 
| -(conveniently named `enchilada`) that uses every corner of these guidelines | 
| -would look like: | 
| - | 
| -    enchilada/ | 
| -      pubspec.yaml | 
| -      pubspec.lock * | 
| -      README.md | 
| -      LICENSE | 
| -      asset/ | 
| -        guacamole.css | 
| -      benchmark/ | 
| -        make_lunch.dart | 
| -        packages/ ** | 
| -      bin/ | 
| -        enchilada | 
| -        packages/ ** | 
| -      doc/ | 
| -        getting_started.md | 
| -      example/ | 
| -        lunch.dart | 
| -        packages/ ** | 
| -      lib/ | 
| -        enchilada.dart | 
| -        tortilla.dart | 
| -        src/ | 
| -          beans.dart | 
| -          queso.dart | 
| -      packages/ ** | 
| -      test/ | 
| -        enchilada_test.dart | 
| -        tortilla_test.dart | 
| -        packages/ ** | 
| -      tool/ | 
| -        generate_docs.dart | 
| -      web/ | 
| -        index.html | 
| -        main.dart | 
| -        style.css | 
| - | 
| -\* The `pubspec.lock` will only be in source control if the package is an | 
| -[application package](glossary.html#application-package). | 
| - | 
| -\** The `packages` directories will exist locally after you've run | 
| -`pub get`, but won't be checked into source control. | 
| - | 
| -## The basics | 
| - | 
| -    enchilada/ | 
| -      pubspec.yaml | 
| -      pubspec.lock | 
| - | 
| -<div class="learn-more"> | 
| -  <a href="/doc/pubspec.html"> | 
| -    Learn more about pubspecs → | 
| -  </a> | 
| -</div> | 
| - | 
| -Every package will have a [**pubspec**](pubspec.html), a file named | 
| -`pubspec.yaml`, in the root directory of the package. That's what *makes* it a | 
| -package. | 
| - | 
| -Once you've run [`pub get`](pub-get.html) or [`pub | 
| -upgrade`](pub-upgrade.html) on the package, you will also have a **lockfile**, | 
| -named `pubspec.lock`. If your package is an [application | 
| -package](glossary.html#application-package), this will be checked into source | 
| -control. Otherwise, it won't be. | 
| - | 
| -    enchilada/ | 
| -      packages/ | 
| -        ... | 
| - | 
| -Running pub will also generate a `packages` directory. You will *not* check | 
| -this into source control, and you won't need to worry too much about its | 
| -contents. Consider it pub magic, but not scary magic. | 
| - | 
| -The open source community has a few other files that commonly appear at the top | 
| -level of a project: `LICENSE`, `AUTHORS`, etc. If you use any of those, they can | 
| -go in the top level of the package too. | 
| - | 
| -## README | 
| - | 
| -    enchilada/ | 
| -      README.md | 
| - | 
| -One file that's very common in open source is a README file that | 
| -describes the project. This is especially important in pub. When you upload | 
| -to [pub.dartlang.org](/), your README will be shown on the page for your | 
| -package. This is the perfect place to introduce people to your code. | 
| - | 
| -If your README ends in `.md`, `.markdown`, or `.mdown`, it will be parsed as | 
| -[Markdown][] so you can make it as fancy as you like. | 
| - | 
| -[markdown]: http://daringfireball.net/projects/markdown/ | 
| - | 
| -## Public libraries | 
| - | 
| -    enchilada/ | 
| -      lib/ | 
| -        enchilada.dart | 
| -        tortilla.dart | 
| - | 
| -Many packages are [*library packages*](glossary.html#library-package): they | 
| -define Dart libraries that other packages can import and use. These public Dart | 
| -library files go inside a directory called `lib`. | 
| - | 
| -Most packages define a single library that users can import. In that case, | 
| -its name should usually be the same as the name of the package, like | 
| -`enchilada.dart` in the example here. But you can also define other libraries | 
| -with whatever names make sense for your package. | 
| - | 
| -When you do, users can import these libraries using the name of the package and | 
| -the library file, like so: | 
| - | 
| -{% highlight dart %} | 
| -import "package:enchilada/enchilada.dart"; | 
| -import "package:enchilada/tortilla.dart"; | 
| -{% endhighlight %} | 
| - | 
| -If you feel the need to organize your public libraries, you can also create | 
| -subdirectories inside `lib`. If you do that, users will specify that path when | 
| -they import it. Say you have a file hierarchy like this: | 
| - | 
| -    enchilada/ | 
| -      lib/ | 
| -        some/ | 
| -          path/ | 
| -            olives.dart | 
| - | 
| -Users will import `olives.dart` like: | 
| - | 
| -{% highlight dart %} | 
| -import "package:enchilada/some/path/olives.dart"; | 
| -{% endhighlight %} | 
| - | 
| -Note that only *libraries* should be in `lib`. *Entrypoints*—Dart scripts | 
| -with a `main()` function—cannot go in `lib`. If you place a Dart script | 
| -inside `lib`, you will discover that any `package:` imports it contains don't | 
| -resolve. Instead, your entrypoints should go in the appropriate | 
| -[entrypoint directory](glossary.html#entrypoint-directory). | 
| - | 
| -## Public assets | 
| - | 
| -    enchilada/ | 
| -      asset/ | 
| -        guacamole.css | 
| - | 
| -While most library packages exist to let you reuse Dart code, you can also | 
| -reuse other kinds of content. For example, a package for something like | 
| -[Bootstrap](http://getbootstrap.com/) might include a number of CSS files for | 
| -consumers of the package to use. | 
| - | 
| -These go in a top-level directory named `asset`. You can put any kind of file | 
| -in there and organize it with subdirectories however you like. It's effectively | 
| -a `lib` directory for stuff that isn't Dart code. | 
| - | 
| -Users can reference another package's assets using URLs that contain | 
| -`assets/<package>/<path>` where `<package>` is the name of the package | 
| -containing the asset and `<path>` is the relative path to the asset within that | 
| -package's `asset` directory. | 
| - | 
| -<aside class="alert alert-warning"> | 
| - | 
| -<p>The mechanics of referencing assets are still being implemented. URLs that | 
| -contain <tt>assets/</tt> are handled by <a href="pub-serve.html"><tt>pub | 
| -serve</tt></a>.</p> | 
| - | 
| -<p>The <a href="pub-build.html"><tt>pub build</tt></a> command also copies | 
| -assets to an <tt>assets</tt> directory, but this will <em>only</em> be in the | 
| -root directory of the output, so you must make sure that your <tt>assets/</tt> | 
| -URL correctly resolves to that directory and not a subdirectory.</p> | 
| - | 
| -<p>We don't currently have a solution for referencing assets in command-line | 
| -Dart applications.</p> | 
| - | 
| -</aside> | 
| - | 
| -Note that `assets` is plural in the URL. This is a bit like the split between | 
| -`lib` and `packages`. The former is the name of the *directory in the package*, | 
| -the latter is the *name you use to reference it*. | 
| - | 
| -For example, let's say your package wanted to use enchilada's `guacamole.css` | 
| -styles. In an HTML file in your package, you can add: | 
| - | 
| -{% highlight html %} | 
| -<link href="assets/enchilada/guacamole.css" rel="stylesheet"> | 
| -{% endhighlight %} | 
| - | 
| -When you run your application using [`pub serve`](pub-serve.html), or build it | 
| -to something deployable using [`pub build`](pub-build.html), Pub will copy over | 
| -any referenced assets that your package depends on. | 
| - | 
| -## Implementation files | 
| - | 
| -    enchilada/ | 
| -      lib/ | 
| -        src/ | 
| -          beans.dart | 
| -          queso.dart | 
| - | 
| -The libraries inside "lib" are publicly visible: other packages are free to | 
| -import them. But much of a package's code is internal implementation libraries | 
| -that should only be imported and used by the package itself. Those go inside a | 
| -subdirectory of `lib` called `src`. You can create subdirectories in there if | 
| -it helps you organize things. | 
| - | 
| -You are free to import libraries that live in `lib/src` from within other Dart | 
| -code in the *same* package (like other libraries in `lib`, scripts in `bin`, and | 
| -tests) but you should never import from another package's `lib/src` directory. | 
| -Those files are not part of the package's public API, and they might change in | 
| -ways that could break your code. | 
| - | 
| -When you use libraries from within your own package, even stuff in `src`, you | 
| -can (and should) still use `"package:"` to import them. This is perfectly | 
| -legit: | 
| - | 
| -{% highlight dart %} | 
| -import "package:enchilada/src/beans.dart"; | 
| -{% endhighlight %} | 
| - | 
| -The name you use here (in this case `enchilada`) is the name you specify for | 
| -your package in its [pubspec](pubspec.html). | 
| - | 
| -## Web files | 
| - | 
| -    enchilada/ | 
| -      web/ | 
| -        index.html | 
| -        main.dart | 
| -        style.css | 
| - | 
| -Dart is a web language, so many pub packages will be doing web stuff. That | 
| -means HTML, CSS, images, and, heck, probably even some JavaScript. All of that | 
| -goes into your package's `web` directory. You're free to organize the contents | 
| -of that to your heart's content. Go crazy with subdirectories if that makes you | 
| -happy. | 
| - | 
| -Also, and this is important, any Dart web entrypoints (in other words, Dart | 
| -scripts that are referred to in a `<script>` tag) go under `web` and not `lib`. | 
| -That ensures that there is a nearby `packages` directory so that `package:` | 
| -imports can be resolved correctly. | 
| - | 
| -(You may be asking yourself, "Self, where should I put my web-based example | 
| -programs? `example` or `web`?" Put those in `example`.) | 
| - | 
| -## Command-line apps | 
| - | 
| -    enchilada/ | 
| -      bin/ | 
| -        enchilada | 
| - | 
| -Some packages define programs that can be run directly from the command line. | 
| -These can be shell scripts or any other scripting language, including Dart. | 
| -The `pub` application itself is one example: it's a simple shell script that | 
| -invokes `pub.dart`. | 
| - | 
| -If your package defines stuff like this, put it in a directory named `bin`. | 
| - | 
| -<aside class="alert alert-note"> | 
| - | 
| -At some point, pub will support automatically adding that directory to your | 
| -system path so that these scripts can be easily invoked. | 
| - | 
| -</aside> | 
| - | 
| -## Tests and benchmarks | 
| - | 
| -    enchilada/ | 
| -      test/ | 
| -        enchilada_test.dart | 
| -        tortilla_test.dart | 
| - | 
| -Every self-respecting package should have tests. With pub, the convention is | 
| -that these go in a `test` directory (or some directory inside it if you like) | 
| -and have `_test` at the end of their file names. | 
| - | 
| -Typically, these use the [unittest](http://api.dartlang.org/unittest.html) | 
| -package but you can use whatever testing system that gets you excited. | 
| - | 
| -    enchilada/ | 
| -      benchmark/ | 
| -        make_lunch.dart | 
| - | 
| -Packages that have performance critical code may also include *benchmarks*. | 
| -These test the API not for correctness but for speed (or memory use, or maybe | 
| -other empirical metrics). | 
| - | 
| -## Documentation | 
| - | 
| -    enchilada/ | 
| -      doc/ | 
| -        getting_started.md | 
| - | 
| -If you've got code and tests, the next piece you need to maximize your karma | 
| -is good documentation. That goes inside a directory named `doc`. We don't | 
| -currently have any guidelines about format or organization within that. Use | 
| -whatever markup format you like and be happy that you're actually writing docs. | 
| - | 
| -This directory should *not* just contain docs generated automatically from your | 
| -source code using | 
| -[dartdoc](http://api.dartlang.org/docs/continuous/dartdoc.html). Since that's | 
| -pulled directly from the code already in the package, putting those docs in | 
| -here would be redundant. Instead, this is for tutorials, guides, and other | 
| -hand-authored documentation *in addition to* generated API references. | 
| - | 
| -## Examples | 
| - | 
| -    enchilada/ | 
| -      example/ | 
| -        lunch.dart | 
| - | 
| -At this point, you're going for the brass ring. Code, tests, docs, what else | 
| -could your users want? Standalone example programs that use your package, of | 
| -course! Those go inside the `example` directory. If the examples are complex | 
| -and use multiple files, consider making a directory for each example. Otherwise, | 
| -you can place each one right inside `example`. | 
| - | 
| -This is an important place to consider using `package:` to import files from | 
| -your own package. That ensures the example code in your package looks exactly | 
| -like code outside of your package would look. | 
| - | 
| -## Internal tools and scripts | 
| - | 
| -    enchilada/ | 
| -      tool/ | 
| -        generate_docs.dart | 
| - | 
| -Mature packages often have little helper scripts and programs that people | 
| -run while developing the package itself. Think things like test runners, | 
| -documentation generators, or other bits of automation. | 
| - | 
| -Unlike the scripts in `bin`, these are *not* for external users of the package. | 
| -If you have any of these, place them in a directory called `tool`. | 
|  |