This is the repository of the Dart programming language and its associated
tools, libraries, and samples.

For license information, please see LICENSE.

You can find more about Dart online at http://dartlang.org or
http://code.google.com/p/dart.

Here's a brief guide to what's in here:

compiler/      Dart static analyzer.
editor/        Eclipse-based standalone Dart IDE.
lib/           Libraries that ship with the Dart runtime (core, html, etc.).
pkg/           Packages that are not shipped with the core runtime.
runtime/       Dart VM and code for running it as a standalone app.
samples/       Sample Dart programs. 
tests/         Automated tests.
third_party/   External dependencies.
tools/         Build scripts, text editor support files, etc.
utils/         Utilities for Dart applications.
