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:

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.
