Move Getting Started and Tutorial to GitHub pages

Along with some other docs.
diff --git a/packages/flutter/README.md b/packages/flutter/README.md
index a32fec9..def8a95 100644
--- a/packages/flutter/README.md
+++ b/packages/flutter/README.md
@@ -1,122 +1,9 @@
-Getting Started with Sky
-========================
+Sky
+===
 
-Sky apps are written in Dart. To get started, we need to set up Dart SDK:
+Sky is a new way to build high-performance, cross-platform mobile apps.
+Sky is optimized for today's, and tomorrow's, mobile devices. We are
+focused on low-latency input and high frame rates on Android and iOS.
 
- - Install the [Dart SDK](https://www.dartlang.org/downloads/):
-   - Mac: `brew tap dart-lang/dart && brew install dart --devel`
-   - Linux: See [https://www.dartlang.org/downloads/linux.html](https://www.dartlang.org/downloads/linux.html)
- - Ensure that `$DART_SDK` is set to the path of your Dart SDK and that the
-   `dart` and `pub` executables are on your `$PATH`.
-
-Once you have installed Dart SDK, create a new directory and add a
-[pubspec.yaml](https://www.dartlang.org/tools/pub/pubspec.html):
-
-```yaml
-name: your_app_name
-dependencies:
-  sky: any
-  sky_tools: any
-```
-
-Next, create a `lib` directory (which is where your Dart code will go) and use
-the `pub` tool to fetch the Sky package and its dependencies:
-
- - `mkdir lib`
- - `pub upgrade`
-
-Sky assumes the entry point for your application is a `main` function in
-`lib/main.dart`:
-
-```dart
-import 'package:sky/widgets.dart';
-
-class HelloWorldApp extends App {
-  Widget build() {
-    return new Center(child: new Text('Hello, world!'));
-  }
-}
-
-void main() {
-  runApp(new HelloWorldApp());
-}
-```
-
-Execution starts in `main`, which in this example runs a new instance of the `HelloWorldApp`.
-The `HelloWorldApp` builds a `Text` widget containing the traditional `Hello, world!`
-string and centers it on the screen using a `Center` widget. To learn more about
-the widget system, please see the
-[widgets tutorial](https://github.com/domokit/sky_engine/blob/master/sky/packages/sky/lib/src/widgets/README.md).
-
-Setting up your Android device
--------------------------
-
-Currently Sky requires an Android device running the Lollipop (or newer) version
-of the Android operating system.
-
- - Install the `adb` tool from the [Android SDK](https://developer.android.com/sdk/installing/index.html?pkg=tools):
-  - Mac: `brew install android-platform-tools`
-  - Linux: `sudo apt-get install android-tools-adb`
-    - If the version of `adb` provided by your Linux distribution is too old,
-      you might need to [install the Android SDK manually](https://developer.android.com/sdk/installing/index.html?pkg=tools]).
-
- - Enable developer mode on your device by visiting `Settings > About phone`
-   and tapping the `Build number` field five times.
-
- - Enable `Android debugging` in `Settings > Developer options`.
-
- - Using a USB cable, plug your phone into your computer. If prompted on your
-   device, authorize your computer to access your device.
-
-Running a Sky application
--------------------------
-
-The `sky` pub package includes a `sky_tool` script to assist in running
-Sky applications inside the `SkyShell.apk` harness.  The `sky_tool` script
-expects to be run from the root directory of your application's package (i.e.,
-the same directory that contains the `pubspec.yaml` file).
-
-To run your app with logging, run this command:
- - `./packages/sky/sky_tool start --checked && ./packages/sky/sky_tool logs`
-
-The `sky_tool start` command starts the dev server and uploads your app to the device, installing `SkyShell.apk` if needed.
-The `--checked` flag triggers checked mode, in which types are checked, asserts are run, and
-various [debugging features](https://github.com/domokit/sky_engine/blob/master/sky/packages/sky/lib/base/debug.dart) are enabled.
-The `sky_tool logs` command logs errors and Dart `print()` output from the app, automatically limiting the output to just output from Sky Dart code and the Sky Engine C++ code (which
-for historical reasons currently uses the tag `chromium`.)
-
-To avoid confusion from old log messages, you may wish to call `sky_tool logs --clear` before calling
-`sky_tool start`, to clear the log between runs.
-
-Rapid Iteration
----------------
-
-As an alternative to running `./packages/sky/sky_tool start` every time you make a change,
-you might prefer to have the SkyShell reload your app automatically for you as you edit.  To
-do this, run the following command:
-
- - `./packages/sky/sky_tool listen`
-
-This is a long-running command -- just press `ctrl-c` when you want to stop listening for
-changes to the file system and automatically reloading your app.
-
-Currently `sky_tool listen` only works for Android, but iOS device and iOS simulator support
-are coming soon.
-
-Debugging
----------
-
-Sky uses [Observatory](https://www.dartlang.org/tools/observatory/) for
-debugging and profiling. While running your Sky app using `sky_tool`, you can
-access Observatory by navigating your web browser to
-[http://localhost:8181/](http://localhost:8181/).
-
-Building a standalone APK
--------------------------
-
-Although it is possible to build a standalone APK containing your application,
-doing so right now is difficult. If you're feeling brave, you can see how we
-build the `Stocks.apk` in
-[examples/stocks](https://github.com/domokit/sky_engine/tree/master/examples/stocks).
-Eventually we plan to make this much easier and support platforms other than
-Android, but that work still in progress.
+See the [getting started guide](https://flutter.github.io/getting-started/) for
+information about using Sky.
diff --git a/packages/flutter/lib/src/rendering/README.md b/packages/flutter/lib/src/rendering/README.md
deleted file mode 100644
index 72f80d7..0000000
--- a/packages/flutter/lib/src/rendering/README.md
+++ /dev/null
@@ -1,389 +0,0 @@
-Sky Rendering
-=============
-
-The Sky render tree is a low-level layout and painting system based on a
-retained tree of objects that inherit from [`RenderObject`](object.dart). Most
-developers using Sky will not need to interact directly with the rendering tree.
-Instead, most developers should use [Sky widgets](../widgets/README.md), which
-are built using the render tree.
-
-Overview
---------
-
-### Base Model
-
-The base class for every node in the render tree is
-[`RenderObject`](object.dart), which defines the base layout model. The base
-layout mode is extremely general and can accomodate a large number of more
-concrete layout models that can co-exist in the same tree. For example, the base
-model does not commit to a fixed number of dimensions or even a cartesian
-coordinate system. In this way, a single render tree can contain render objects
-operating in three-dimensional space together with other render objects
-operating in two-dimensional space, e.g., on the face of a cube in the three-
-dimensional space. Moreover, the two-dimensional layout might be partially
-computed in cartesian coordinates and partially computed in polar coordinates.
-These distinct models can interact during layout, for example determining the
-size of the cube by the height of a block of text on the cube's face.
-
-Not entirely free-wheeling, the base model does impose some structure on the
-render tree:
-
- * Subclasses of `RenderObject` must implement a `performLayout` function that
-   takes as input a `constraints` object provided by its parent. `RenderObject`
-   has no opinion about the structure of this object and different layout models
-   use different types of constraints. However, whatever type they choose must
-   implement `operator==` in such a way that `performLayout` produces the same
-   output for two `constraints` objects that are `operator==`.
-
- * Implementations of `performLayout` are expected to call `layout` on their
-   children. When calling `layout`, a `RenderObject` must use the
-   `parentUsesSize` parameter to declare whether its `performLayout` function
-   depends on information read from the child. If the parent doesn't declare
-   that it uses the child's size, the edge from the parent to the child becomes
-   a _relayout boundary_, which means the child (and its subtree) might undergo
-   layout without the parent undergoing layout.
-
- * Subclasses of `RenderObject` must implement a `paint` function that draws a
-   visual representation of the object onto a `PaintingCanvas`. If
-   the `RenderObject` has children, the `RenderObject` is responsible for
-   painting its children using the `paintChild` function on the
-   `PaintingCanvas`.
-
- * Subclasses of `RenderObject` must call `adoptChild` whenever they add a
-   child. Similarly, they must call `dropChild` whenever they remove a child.
-
- * Most subclasses of `RenderObject` will implement a `hitTest` function that
-   lets clients query the render tree for objects that intersect with a given
-   user input location. `RenderObject` itself does not impose a particular
-   type signature on `hitTest`, but most implementations will take an argument
-   of type `HitTestResult` (or, more likely, a model-specific subclass of
-   `HitTestResult`) as well as an object that describes the location at which
-   the user provided input (e.g., a `Point` for a two-dimensional cartesian
-   model).
-
- * Finally, subclasses of `RenderObject` can override the default, do-nothing
-   implemenations of `handleEvent` and `rotate` to respond to user input and
-   screen rotation, respectively.
-
-The base model also provides two mixins for common child models:
-
- * `RenderObjectWithChildMixin` is useful for subclasses of `RenderObject` that
-   have a unique child.
-
- * `ContainerRenderObjectMixin` is useful for subclasses of `RenderObject` that
-   have a child list.
-
-Subclasses of `RenderObject` are not required to use either of these child
-models and are free to invent novel child models for their specific use cases.
-
-### Parent Data
-
-TODO(ianh): Describe the parent data concept.
-
-The `setupParentData()` method is automatically called for each child
-when the child's parent is changed. However, if you need to
-preinitialise the `parentData` member to set its values before you add
-a node to its parent, you can preemptively call that future parent's
-`setupParentData()` method with the future child as the argument.
-
-TODO(ianh): Discuss putting per-child configuration information for
-the parent on the child's parentData.
-
-If you change a child's parentData dynamically, you must also call
-markNeedsLayout() on the parent, otherwise the new information will
-not take effect until something else triggers a layout.
-
-### Box Model
-
-#### Dimensions
-
-All dimensions are expressed as logical pixel units. Font sizes are
-also in logical pixel units. Logical pixel units are approximately
-96dpi, but the precise value varies based on the hardware, in such a
-way as to optimise for performance and rendering quality while keeping
-interfaces roughly the same size across devices regardless of the
-hardware pixel density.
-
-Logical pixel units are automatically converted to device (hardware)
-pixels when painting by applying an appropriate scale factor.
-
-TODO(ianh): Define how you actually get the device pixel ratio if you
-need it, and document best practices around that.
-
-#### EdgeDims
-
-#### BoxConstraints
-
-### Bespoke Models
-
-
-Using the provided subclasses
------------------------------
-
-### render_box.dart
-#### RenderConstrainedBox
-#### RenderShrinkWrapWidth
-#### RenderOpacity
-#### RenderColorFilter
-#### RenderClipRect
-#### RenderClipOval
-#### RenderPadding
-#### RenderPositionedBox
-#### RenderImage
-#### RenderDecoratedBox
-#### RenderTransform
-#### RenderSizeObserver
-#### RenderCustomPaint
-### RenderBlock (render_block.dart)
-### RenderFlex (render_flex.dart)
-### RenderParagraph (render_paragraph.dart)
-### RenderStack (render_stack.dart)
-
-Writing new subclasses
-----------------------
-
-### The RenderObject contract
-
-If you want to define a `RenderObject` that uses a new coordinate
-system, then you should inherit straight from `RenderObject`. Examples
-of doing this can be found in [`RenderBox`](box.dart), which deals in
-rectangles in cartesian space, and in the [sector_layout.dart
-example](../../example/rendering/sector_layout.dart), which
-implements a toy model based on polar coordinates. The `RenderView`
-class, which is used internally to adapt from the host system to this
-rendering framework, is another example.
-
-A subclass of `RenderObject` must fulfill the following contract:
-
-* It must fulfill the [AbstractNode contract](../base/README.md) when
-  dealing with children. Using `RenderObjectWithChildMixin` or
-  `ContainerRenderObjectMixin` can make this easier.
-
-* Information about the child managed by the parent, e.g. typically
-  position information and configuration for the parent's layout,
-  should be stored on the `parentData` member; to this effect, a
-  ParentData subclass should be defined and the `setupParentData()`
-  method should be overriden to initialise the child's parent data
-  appropriately.
-
-* Layout constraints must be expressed in a Constraints subclass. This
-  subclass must implement `operator==` (and `hashCode`).
-
-* Whenever the layout needs updating, the `markNeedsLayout()` method
-  should be called.
-
-* Whenever the rendering needs updating without changing the layout,
-  the `markNeedsPaint()` method should be called. (Calling
-  `markNeedsLayout()` implies a call to `markNeedsPaint()`, so you
-  don't need to call both.)
-
-* The subclass must override `performLayout()` to perform layout based
-  on the constraints given in the `constraints` member. Each object is
-  responsible for sizing itself; positioning must be done by the
-  object calling `performLayout()`. Whether positioning is done before
-  or after the child's layout is a decision to be made by the class.
-  TODO(ianh): Document sizedByParent, performResize(), rotate
-
-* TODO(ianh): Document painting, hit testing, debug*
-
-#### The ParentData contract
-
-#### Using RenderObjectWithChildMixin
-
-#### Using ContainerRenderObjectMixin (and ContainerParentDataMixin)
-
-This mixin can be used for classes that have a child list, to manage
-the list. It implements the list using linked list pointers in the
-`parentData` structure.
-
-TODO(ianh): Document this mixin.
-
-Subclasses must follow the following contract, in addition to the
-contracts of any other classes they subclass:
-
-* If the constructor takes a list of children, it must call addAll()
-  with that list.
-
-TODO(ianh): Document how to walk the children.
-
-### The RenderBox contract
-
-A `RenderBox` subclass is required to implement the following contract:
-
-* It must fulfill the [AbstractNode contract](../base/README.md) when
-  dealing with children. Note that using `RenderObjectWithChildMixin`
-  or `ContainerRenderObjectMixin` takes care of this for you, assuming
-  you fulfill their contract instead.
-
-* If it has any data to store on its children, it must define a
-  BoxParentData subclass and override setupParentData() to initialise
-  the child's parent data appropriately, as in the following example.
-  (If the subclass has an opinion about what type its children must
-  be, e.g. the way that `RenderBlock` wants its children to be
-  `RenderBox` nodes, then change the `setupParentData()` signature
-  accordingly, to catch misuse of the method.)
-
-```dart
-  class FooParentData extends BoxParentData { ... }
-
-  // In RenderFoo
-  void setupParentData(RenderObject child) {
-    if (child.parentData is! FooParentData)
-      child.parentData = new FooParentData();
-  }
-```
-
-* The class must encapsulate a layout algorithm that has the following
-  features:
-
-** It uses as input a set of constraints, described by a
-   BoxConstraints object, and a set of zero or more children, as
-   determined by the class itself, and has as output a Size (which is
-   set on the object's own `size` field), and positions for each child
-   (which are set on the children's `parentData.position` field).
-
-** The algorithm can decide the Size in one of two ways: either
-   exclusively based on the given constraints (i.e. it is effectively
-   sized entirely by its parent), or based on those constraints and
-   the dimensions of the children.
-
-   In the former case, the class must have a sizedByParent getter that
-   returns true, and it must have a `performResize()` method that uses
-   the object's `constraints` member to size itself by setting the
-   `size` member. The size must be consistent, a given set of
-   constraints must always result in the same size.
-
-   In the latter case, it will inherit the default `sizedByParent`
-   getter that returns false, and it will size itself in the
-   `performLayout()` function described below.
-
-   The `sizedByParent` distinction is purely a performance
-   optimisation. It allows nodes that only set their size based on the
-   incoming constraints to skip that logic when they need to be
-   re-laid-out, and, more importantly, it allows the layout system to
-   treat the node as a _layout boundary_, which reduces the amount of
-   work that needs to happen when the node is marked as needing
-   layout.
-
-* The following methods must report numbers consistent with the output
-  of the layout algorithm used:
-
-** `double getMinIntrinsicWidth(BoxConstraints constraints)` must
-   return the width that fits within the given constraints below which
-   making the width constraint smaller would not increase the
-   resulting height, or, to put it another way, the narrowest width at
-   which the box can be rendered without failing to lay the children
-   out within itself.
-
-   For example, the minimum intrinsic width of a piece of text like "a
-   b cd e", where the text is allowed to wrap at spaces, would be the
-   width of "cd".
-
-** `double getMaxIntrinsicWidth(BoxConstraints constraints)` must
-   return the width that fits within the given constraints above which
-   making the width constraint larger would not decrease the resulting
-   height.
-
-   For example, the maximum intrinsic width of a piece of text like "a
-   b cd e", where the text is allowed to wrap at spaces, would be the
-   width of the whole "a b cd e" string, with no wrapping.
-
-** `double getMinIntrinsicHeight(BoxConstraints constraints)` must
-   return the height that fits within the given constraints below
-   which making the height constraint smaller would not increase the
-   resulting width, or, to put it another way, the shortest height at
-   which the box can be rendered without failing to lay the children
-   out within itself.
-
-   The minimum intrinsic height of a width-in-height-out algorithm,
-   like English text layout, would be the height of the text at the
-   width that would be used given the constraints. So for instance,
-   given the text "hello world", if the constraints were such that it
-   had to wrap at the space, then the minimum intrinsic height would
-   be the height of two lines (and the appropriate line spacing). If
-   the constraints were such that it all fit on one line, then it
-   would be the height of one line.
-
-** `double getMaxIntrinsicHeight(BoxConstraints constraints)` must
-   return the height that fits within the given constraints above
-   which making the height constraint larger would not decrease the
-   resulting width. If the height depends exclusively on the width,
-   and the width does not depend on the height, then
-   `getMinIntrinsicHeight()` and `getMaxIntrinsicHeight()` will return the
-   same number given the same constraints.
-
-   In the case of English text, the maximum intrinsic height is the
-   same as the minimum instrinsic height.
-
-* The box must have a `performLayout()` method that encapsulates the
-  layout algorithm that this class represents. It is responsible for
-  telling the children to lay out, positioning the children, and, if
-  sizedByParent is false, sizing the object.
-
-  Specifically, the method must walk over the object's children, if
-  any, and for each one call `child.layout()` with a BoxConstraints
-  object as the first argument, and a second argument named
-  `parentUsesSize` which is set to true if the child's resulting size
-  will in any way influence the layout, and omitted (or set to false)
-  if the child's resulting size is ignored. The children's positions
-  (`child.parentData.position`) must then be set.
-
-  (Calling `layout()` can result in the child's own `performLayout()`
-  method being called recursively, if the child also needs to be laid
-  out. If the child's constraints haven't changed and the child is not
-  marked as needing layout, however, this will be skipped.)
-
-  The parent must not set a child's `size` directly. If the parent
-  wants to influence the child's size, it must do so via the
-  constraints that it passes to the child's `layout()` method.
-
-  If an object's `sizedByParent` is false, then its `performLayout()`
-  must also size the object (by setting `size`), otherwise, the size
-  must be left untouched.
-
-* The `size` member must never be set to an infinite value.
-
-* The box must also implement `hitTestChildren()`.
-  TODO(ianh): Define this better
-
-* The box must also implement `paint()`.
-  TODO(ianh): Define this better
-
-#### Using RenderProxyBox
-
-### The Hit Testing contract
-
-
-Performance rules of thumb
---------------------------
-
-* Avoid using transforms where mere maths would be sufficient (e.g.
-  draw your rectangle at x,y rather than translating by x,y and
-  drawing it at 0,0).
-
-* Avoid using save/restore on canvases.
-
-
-Useful debugging tools
-----------------------
-
-This is a quick way to dump the entire render tree to the console every frame.
-This can be quite useful in figuring out exactly what is going on when
-working with the render tree.
-
-```dart
-import 'package:sky/animation.dart';
-import 'package:sky/rendering.dart';
-
-scheduler.addPersistentFrameCallback((_) {
-  SkyBinding.instance.debugDumpRenderTree();
-});
-```
-
-
-Dependencies
-------------
-
- * [`package:sky/animation.dart`](../../animation.dart)
- * [`package:sky/mojo`](../../mojo)
- * [`package:sky/painting.dart`](../../painting.dart)
diff --git a/packages/flutter/lib/src/rendering/box.dart b/packages/flutter/lib/src/rendering/box.dart
index ed82ff8..b92d0b7 100644
--- a/packages/flutter/lib/src/rendering/box.dart
+++ b/packages/flutter/lib/src/rendering/box.dart
@@ -360,7 +360,7 @@
     assert(constraints != null);
     assert(_size != null);
     assert(() {
-      'See https://github.com/domokit/sky_engine/blob/master/sky/packages/sky/lib/src/widgets/sizing.md#user-content-unbounded-constraints';
+      'See https://flutter.github.io/layout/#unbounded-constraints';
       return !_size.isInfinite;
     });
     bool result = constraints.isSatisfiedBy(_size);
diff --git a/packages/flutter/lib/src/rendering/flex.dart b/packages/flutter/lib/src/rendering/flex.dart
index db106ee..a7e7341 100644
--- a/packages/flutter/lib/src/rendering/flex.dart
+++ b/packages/flutter/lib/src/rendering/flex.dart
@@ -351,7 +351,7 @@
         // Flexible children can only be used when the RenderFlex box's container has a finite size.
         // When the container is infinite, for example if you are in a scrollable viewport, then
         // it wouldn't make any sense to have a flexible child.
-        assert(canFlex && 'See https://github.com/domokit/sky_engine/blob/master/sky/packages/sky/lib/src/widgets/sizing.md#user-content-flex' is String);
+        assert(canFlex && 'See https://flutter.github.io/layout/#flex' is String);
         totalFlex += child.parentData.flex;
       } else {
         BoxConstraints innerConstraints;
diff --git a/packages/flutter/lib/src/widgets/README.md b/packages/flutter/lib/src/widgets/README.md
deleted file mode 100644
index 4d7e501..0000000
--- a/packages/flutter/lib/src/widgets/README.md
+++ /dev/null
@@ -1,506 +0,0 @@
-Sky Widgets
-===========
-
-Sky widgets are built using a functional-reactive framework, which takes
-inspiration from [React](http://facebook.github.io/react/). The central idea is
-that you build your UI out of components. Components describe what their view
-should look like given their current configuration and state. When a component's
-state changes, the component rebuilds its description, which the framework diffs
-against the previous description in order to determine the minimal changes needed
-in the underlying render tree to transition from one state to the next.
-
-Hello World
------------
-
-To build an application, create a subclass of `App` and instantiate it:
-
-```dart
-import 'package:sky/widgets.dart';
-
-class HelloWorldApp extends App {
-  Widget build() {
-    return new Center(child: new Text('Hello, world!'));
-  }
-}
-
-void main() {
-  runApp(new HelloWorldApp());
-}
-```
-
-An app is comprised of (and is, itself, a) widgets. The most commonly authored
-widgets are, like `App`, subclasses of `Component`.  A component's main job is
-to implement `Widget build()` by returning newly-created instances of other
-widgets. If a component builds other components, the framework will build those
-components in turn until the process bottoms out in a collection of basic
-widgets, such as those in `sky/widgets/basic.dart`. In the case of
-`HelloWorldApp`, the `build` function simply returns a new `Text` node, which is
-a basic widget representing a string of text.
-
-Basic Widgets
--------------
-
-Sky comes with a suite of powerful basic widgets, of which the following are
-very commonly used:
-
- * `Text`: The `Text` widget lets you create a run of styled text within your
-   application.
-
- * `Row`, `Column`: These flex widgets let you create flexible layouts
-   in both the horizontal (`Row`) and vertical (`Column`) directions.
-   Its design is based on the web's flexbox layout model.
-
- * `Container`: The `Container` widget lets you create rectangular visual
-   element. A container can be decorated with a `BoxDecoration`, such as a
-   background, a border, or a shadow. A `Container` can also have margins,
-   padding, and constraints applied to its size. In addition, a `Container` can
-   be transformed in three dimensional space using a matrix.
-
- * `NetworkImage`: The `NetworkImage` widget lets you display an image, referenced
-   using a URL. The underlying image is cached, which means if several
-   `NetworkImage` widgets refer to the same URL, they'll share the underlying image
-   resource.
-
-Below is a simple toolbar example that shows how to combine these widgets:
-
-```dart
-import 'package:sky/widgets.dart';
-
-class MyToolBar extends Component {
-  Widget build() {
-    return new Container(
-      decoration: const BoxDecoration(
-        backgroundColor: const Color(0xFF00FFFF)
-      ),
-      height: 56.0,
-      padding: const EdgeDims.symmetric(horizontal: 8.0),
-      child: new Row([
-        new NetworkImage(src: 'menu.png', width: 25.0, height: 25.0),
-        new Flexible(child: new Text('My awesome toolbar')),
-        new NetworkImage(src: 'search.png', width: 25.0, height: 25.0),
-      ])
-    );
-  }
-}
-```
-
-The `MyToolBar` component creates a cyan `Container` with a height of
-56 device-independent pixels with an internal padding of 8 pixels,
-both on the left and the right. Inside the container, `MyToolBar` uses
-a `Row` layout. The middle child, the `Text` widget, is marked as
-`Flexible`, which means it expands to fill any remaining available
-space that hasn't been consumed by the inflexible children. You can
-have multiple `Flexible` children and determine the ratio in which
-they consume the available space using the `flex` argument to
-`Flexible`.
-
-To use this component, we simply create an instance of `MyToolBar` in a `build`
-function:
-
-```dart
-import 'package:sky/widgets.dart';
-
-import 'my_tool_bar.dart';
-
-class DemoApp extends App {
-  Widget build() {
-    return new Center(child: new MyToolBar());
-  }
-}
-
-void main() {
-  runApp(new DemoApp());
-}
-```
-
-Here, we've used the `Center` widget to center the toolbar within the view, both
-vertically and horizontally. If we didn't center the toolbar, it would fill the
-view, both vertically and horizontally, because the root widget is sized to fill
-the view.
-
-Listening to Events
--------------------
-
-In addition to being stunningly beautiful, most applications react to user
-input. The first step in building an interactive application is to listen for
-input events. Let's see how that works by creating a simple button:
-
-```dart
-import 'package:sky/widgets.dart';
-
-final BoxDecoration _decoration = new BoxDecoration(
-  borderRadius: 5.0,
-  gradient: new LinearGradient(
-    start: Point.origin,
-    end: const Point(0.0, 36.0),
-    colors: [ const Color(0xFFEEEEEE), const Color(0xFFCCCCCC) ]
-  )
-);
-
-class MyButton extends Component {
-  Widget build() {
-    return new Listener(
-      onGestureTap: (event) {
-        print('MyButton was tapped!');
-      },
-      child: new Container(
-        height: 36.0,
-        padding: const EdgeDims.all(8.0),
-        margin: const EdgeDims.symmetric(horizontal: 8.0),
-        decoration: _decoration,
-        child: new Center(
-          child: new Text('Engage')
-        )
-      )
-    );
-  }
-}
-```
-
-The `Listener` widget doesn't have an visual representation but instead listens
-for events bubbling through the application. When a tap gesture bubbles out from
-the `Container`, the `Listener` will call its `onGestureTap` callback, in this
-case printing a message to the console.
-
-You can use `Listener` to listen for a variety of input events, including
-low-level pointer events and higher-level gesture events, such as taps, scrolls,
-and flings.
-
-Generic Components
-------------------
-
-One of the most powerful features of components is the ability to pass around
-references to already-built widgets and reuse them in your `build` function. For
-example, we wouldn't want to define a new button component every time we wanted
-a button with a novel label:
-
-```dart
-class MyButton extends Component {
-  MyButton({ this.child, this.onPressed });
-
-  final Widget child;
-  final Function onPressed;
-
-  Widget build() {
-    return new Listener(
-      onGestureTap: (_) {
-        if (onPressed != null)
-          onPressed();
-      },
-      child: new Container(
-        height: 36.0,
-        padding: const EdgeDims.all(8.0),
-        margin: const EdgeDims.symmetric(horizontal: 8.0),
-        decoration: _decoration,
-        child: new Center(child: child)
-      )
-    );
-  }
-}
-```
-
-Rather than providing the button's label as a `String`, we've let the code that
-uses `MyButton` provide an arbitrary `Widget` to put inside the button. For
-example, we can put an elaborate layout involving text and an image inside the
-button:
-
-```dart
-  Widget build() {
-    return new MyButton(
-      child: new ShrinkWrapWidth(
-        child: new Row([
-          new NetworkImage(src: 'thumbs-up.png', width: 25.0, height: 25.0),
-          new Container(
-            padding: const EdgeDims.only(left: 10.0),
-            child: new Text('Thumbs up')
-          )
-        ])
-      )
-    );
-  }
-```
-
-State
------
-
-By default, components are stateless. Components usually receive
-arguments from their parent component in their constructor, which they typically
-store in `final` member variables. When a component is asked to `build`, it uses
-these stored values to derive new arguments for the subcomponents it creates.
-For example, the generic version of `MyButton` above follows this pattern. In
-this way, state naturally flows "down" the component hierachy.
-
-Some components, however, have mutable state that represents the transient state
-of that part of the user interface. For example, consider a dialog widget with
-a checkbox. While the dialog is open, the user might check and uncheck the
-checkbox several times before closing the dialog and committing the final value
-of the checkbox to the underlying application data model.
-
-```dart
-class MyCheckbox extends Component {
-  MyCheckbox({ this.value, this.onChanged });
-
-  final bool value;
-  final Function onChanged;
-
-  Widget build() {
-    Color color = value ? const Color(0xFF00FF00) : const Color(0xFF0000FF);
-    return new Listener(
-      onGestureTap: (_) => onChanged(!value),
-      child: new Container(
-        height: 25.0,
-        width: 25.0,
-        decoration: new BoxDecoration(backgroundColor: color)
-      )
-    );
-  }
-}
-
-class MyDialog extends StatefulComponent {
-  MyDialog({ this.onDismissed });
-
-  Function onDismissed;
-  bool _checkboxValue = false;
-
-  void _handleCheckboxValueChanged(bool value) {
-    setState(() {
-      _checkboxValue = value;
-    });
-  }
-
-  void syncConstructorArguments(MyDialog source) {
-    onDismissed = source.onDismissed;
-  }
-
-  Widget build() {
-    return new Row([
-      new MyCheckbox(
-        value: _checkboxValue,
-        onChanged: _handleCheckboxValueChanged
-      ),
-      new MyButton(
-        onPressed: () => onDismissed(_checkboxValue),
-        child: new Text("Save")
-      ),
-    ],
-    justifyContent: FlexJustifyContent.center);
-  }
-}
-```
-
-The `MyCheckbox` component follows the pattern for stateless components. It
-stores the values it receives in its constructor in `final` member variables,
-which it then uses during its `build` function. Notice that when the user taps
-on the checkbox, the checkbox itself doesn't use `value`. Instead, the checkbox
-calls a function it received from its parent component. This pattern lets you
-store state higher in the component hierarchy, which causes the state to persist
-for longer periods of time. In the extreme, the state stored on the `App`
-component persists for the lifetime of the application.
-
-The `MyDialog` component is more complicated because it is a stateful component.
-Let's walk through the differences in `MyDialog` caused by its being stateful:
-
- * `MyDialog` extends StatefulComponent instead of Component.
-
- * `MyDialog` has non-`final` member variables. Over the lifetime of the dialog,
-   we'll need to modify the values of these member variables, which means we
-   cannot mark them `final`.
-
- * `MyDialog` has private member variables. By convention, components store
-   values they receive from their parent in public member variables and store
-   their own internal, transient state in private member variables. There's no
-   requirement to follow this convention, but we've found that it helps keep us
-   organized.
-
- * Whenever `MyDialog` modifies its transient state, the dialog does so inside
-   a `setState` callback. Using `setState` is important because it marks the
-   component as dirty and schedules it to be rebuilt. If a component modifies
-   its transient state outside of a `setState` callback, the framework won't
-   know that the component has changed state and might not call the component's
-   `build` function, which means the user interface might not update to reflect
-   the changed state.
-
- * `MyDialog` implements the `syncConstructorArguments` member function. To
-   understand `syncConstructorArguments`, we'll need to dive a bit deeper into
-   how the `build` function is used by the framework.
-
-   A component's `build` function returns a tree of widgets that represent a
-   "virtual" description of its appearance. The first time the framework calls
-   `build`, the framework walks this description and creates a "physical" tree
-   of `RenderObjects` that matches the description. When the framework calls
-   `build` again, the component still returns a fresh description of its
-   appearence, but this time the framework compares the new description with the
-   previous description and makes the minimal modifications to the underlying
-   `RenderObjects` to make them match the new description.
-
-   In this process, old stateless components are discarded and the new stateless
-   components created by the parent component are retained in the widget
-   hierchy. Old _stateful_ components, however, cannot simply be discarded
-   because they contain state that needs to be preserved. Instead, the old
-   stateful components are retained in the widget hierarchy and asked to
-   `syncConstructorArguments` with the new instance of the component created by
-   the parent in its `build` function.
-
-   Without `syncConstructorArguments`, the new values the parent component
-   passed to the `MyDialog` constructor in the parent's `build` function would
-   be lost because they would be stored only as member variables on the new
-   instance of the component, which is not retained in the component hiearchy.
-   Therefore, the `syncConstructorArguments` function in a component should
-   update `this` to account for the new values the parent passed to `source`
-   because `source` is the authorative source of those values.
-
-   By convention, components typically store the values they receive from their
-   parents in public member variables and their own internal state in private
-   member variables. Therefore, a typical `syncConstructorArguments`
-   implementation will copy the public, but not the private, member variables
-   from `source`. When following this convention, there is no need to copy over
-   the private member variables because those represent the internal state of
-   the object and `this` is the authoritative source of that state.
-
-   When implementing a `StatefulComponent`, make sure to call
-   `super.syncConstructorArguments(source)` from within your
-   `syncConstructorArguments()` method, unless you are extending
-   `StatefulComponent` directly.
-
-Finally, when the user taps on the "Save" button, `MyDialog` follows the same
-pattern as `MyCheckbox` and calls a function passed in by its parent component
-to return the final value of the checkbox up the hierarchy.
-
-didMount and didUnmount
------------------------
-
-When a component is inserted into the widget tree, the framework calls the
-`didMount` function on the component. When a component is removed from the
-widget tree, the framework calls the `didUnmount` function on the component.
-In some situations, a component that has been unmounted might again be mounted.
-For example, a stateful component might receive a pre-built component from its
-parent (similar to `child` from the `MyButton` example above) that the stateful
-component might incorporate, then not incorporate, and then later incorporate
-again in the widget tree it builds, according to its changing state.
-
-Typically, a stateful component will override `didMount` to initialize any
-non-trivial internal state. Initializing internal state in `didMount` is more
-efficient (and less error-prone) than initializing that state during the
-component's constructor because parent executes the component's constructor each
-time the parent rebuilds even though the framework mounts only the first
-instance into the widget hierarchy. (Instead of mounting later instances, the
-framework passes them to the original instance in `syncConstructorArguments` so
-that the first instance of the component can incorporate the values passed by
-the parent to the component's constructor.)
-
-Components often override `didUnmount` to release resources or to cancel
-subscriptions to event streams from outside the widget hierachy. When overriding
-either `didMount` or `didUnmount`, a component should call its superclass's
-`didMount` or `didUnmount` function.
-
-initState
----------
-
-The framework calls the `initState` function on stateful components before
-building them. The default implementation of initState does nothing. If your
-component requires non-trivial work to initialize its state, you should
-override initState and do it there rather than doing it in the stateful
-component's constructor. If the component doesn't need to be built (for
-example, if it was constructed just to have its fields synchronized with
-an existing stateful component) you'll avoid unnecessary work. Also, some
-operations that involve interacting with the widget hierarchy cannot be
-done in a component's constructor.
-
-When overriding `initState`, a component should call its superclass's
-`initState` function.
-
-Keys
-----
-
-If a component requires fine-grained control over which widgets sync with each
-other, the component can assign keys to the widgets it builds. Without keys, the
-framework matches widgets in the current and previous build according to their
-`runtimeType` and the order in which they appear. With keys, the framework
-requires that the two widgets have the same `key` as well as the same
-`runtimeType`.
-
-Keys are most useful in components that build many instances of the same type of
-widget. For example, consider an infinite list component that builds just enough
-copies of a particular widget to fill its visible region:
-
- * Without keys, the first entry in the current build would always sync with the
-   first entry in the previous build, even if, semantically, the first entry in
-   the list just scrolled off screen and is no longer visible in the viewport.
-
- * By assigning each entry in the list a "semantic" key, the infinite list can
-   be more efficient because the framework will sync entries with matching
-   semantic keys and therefore similiar (or identical) visual appearances.
-   Moreover, syncing the entries semantically means that state retained in
-   stateful subcomponents will remain attached to the same semantic entry rather
-   than the entry in the same numerical position in the viewport.
-
-Widgets for Applications
-------------------------
-
-There are some widgets that do not correspond to on-screen pixels but that are
-nonetheless useful for building applications.
-
-* `Theme`: Takes a [ThemeData](../theme/README.md) object in its `data` argument, to configure the Material Design theme of the rest of the application (as given in the `child` argument).
-* `TaskDescription`: Takes a `label` that names the application for the purpose of the Android task switcher. The colour of the application as used in the system UI is taken from the current `Theme`.
-* `Navigator`: Takes a single argument, which must be a long-lived instance of `NavigatorState`. This object choreographs how the application goes from screen to screen (e.g. from the main screen to a settings screen), as well as modal dialogs, drawer state, and anything else that responds to the system "back" button. By convention the `NavigatorState` object is a private member variable of the class that inherits from `App`, initialized in the `initState()` function. The `NavigatorState` constructor takes a list of `Route` objects, each of which takes a `name` argument giving a path to identify the window (e.g. "/" for the home screen, "/settings" for the settings screen, etc), and a `builder` argument that takes a method which itself takes a `navigator` argument and a `route` argument and returns a `Widget` representing that screen.
-
-Putting this together, a basic application becomes:
-```
-dart
-import 'package:sky/widgets.dart';
-
-class DemoApp extends App {
-
-  NavigationState _state;
-  void initState() {
-    _state = new NavigationState([
-      new Route(
-        name: '/',
-        builder: (navigator, route) {
-          return new Center(child: new Text('Hello Slightly More Elaborate World'));
-        }
-      )
-    ]);
-    super.initState();
-  }
-
-  Widget build() {
-    return new Theme(
-      data: new ThemeData(
-        brightness: ThemeBrightness.light
-      ),
-      child: new TaskDescription(
-        label: 'Sky Demo',
-        child: new Navigator(_state)
-      )
-    );
-  }
-
-}
-
-void main() {
-  runApp(new DemoApp());
-}
-```
-
-
-Useful debugging tools
-----------------------
-
-This is a quick way to dump the entire widget tree to the console.
-This can be quite useful in figuring out exactly what is going on when
-working with the widgets system. For this to work, you have to have
-launched your app with `runApp()`.
-
-```dart
-debugDumpApp();
-```
-
-Dependencies
-------------
-
- * `package:vector_math`
- * [`package:sky/animation.dart`](../../animation.dart)
- * [`package:sky/painting.dart`](../../painting.dart)
- * [`package:sky/rendering.dart`](../../rendering.dart)
- * [`package:sky/theme`](../../theme)
diff --git a/packages/flutter/lib/src/widgets/sizing.md b/packages/flutter/lib/src/widgets/sizing.md
deleted file mode 100644
index e0924c8..0000000
--- a/packages/flutter/lib/src/widgets/sizing.md
+++ /dev/null
@@ -1,90 +0,0 @@
-Sizing in Sky
-=============
-
-Background
-----------
-
-In Sky, widgets are rendered by render boxes. Render boxes are given
-constraints by their parent, and size themselves within those
-constraints. Constraints consist of minimum and maximum widths and
-heights; sizes consist of a specific width and height.
-
-Generally, there are three kinds of boxes, in terms of how they handle
-their constraints:
-
-- Those that try to be as big as possible.
-  For example, the boxes used by `Center` and `Block`.
-- Those that try to be the same size as their children.
-  For example, the boxes used by `Transform` and `Opacity`.
-- Those that try to be a particular size.
-  For example, the boxes used by `Image` and `Text`.
-
-Some widgets, for example `Container`, vary from type to type based on
-their constructor arguments. In the case of `Container`, it defaults
-to trying to be as big as possible, but if you give it a `width`, for
-instance, it tries to honor that and be that particular size.
-
-Others, for example `Row` and `Column` (flex boxes) vary based on the
-constraints they are given, as described below in the "Flex" section.
-
-The constraints are sometimes "tight", meaning that they leave no room
-for the render box to decide on a size (e.g. if the minimum and
-maximum width are the same, it is said to have a tight width). The
-main example of this is the `App` widget, which is contained by the
-`RenderView` class: the box used by the child returned by the
-application's `build` function is given a constraint that forces it to
-exactly fill the application's content area (typically, the entire
-screen). Many of the boxes in Sky, especially those that just take a
-single child, will pass their constraint on to their children. This
-means that if you nest a bunch of boxes inside each other at the root
-of your application's render tree, they'll all exactly fit in each
-other, forced by these tight constraints.
-
-Some boxes _loosen_ the constraints, meaning the maximum is maintained
-but the minimum is removed. For example, `Center`.
-
-Unbounded constraints
----------------------
-
-In certain situations, the constraint that is given to a box will be
-_unbounded_, or infinite. This means that either the maximum width or
-the maximum height is set to `double.INFINITY`.
-
-A box that tries to be as big as possible won't function usefully when
-given an unbounded constraint, and in checked mode, will assert with a
-message saying `!_size.isInfinite` and a string that points to this
-file.
-
-The most common cases where a render box finds itself with unbounded
-constraints are within flex boxes (`Row` and `Column`), and **within
-scrollable regions** (mainly `Block`, `ScollableList<T>`, and
-`ScrollableMixedWidgetList`).
-
-In particular, `Block` tries to expand to fit the space available in
-its cross-direction (i.e. if it's a vertically-scrolling block, it
-will try to be as wide as its parent). If you nest a vertically
-scrolling `Block` inside a horizontally scrolling `Block`, the inner
-one will try to be as wide as possible, which is infinitely wide,
-since the outer one is scrollable in that direction.
-
-Flex
-----
-
-Flex boxes themselves (`Row` and `Column`) behave differently based on
-whether they are in a bounded constraints or unbounded constraints in
-their given direction.
-
-In bounded constraints, they try to be as big as possible in that
-direction.
-
-In unbounded constraints, they try to fit their children in that
-direction. In this case, you cannot set `flex` on the children to
-anything other than 0 (the default). In the widget hierarchy, this
-means that you cannot use `Flexible` when the flex box is inside
-another flex box or inside a scrollable. If you do, you'll get an
-assert that `canFlex` is not true, pointing you at this section.
-
-In the _cross_ direction, i.e. in their width for `Column` (vertical
-flex) and in their height for `Row` (horizontal flex), they must never
-be unbounded, otherwise they would not be able to reasonably align
-their children.
diff --git a/packages/flutter/lib/src/widgets/widgets.md b/packages/flutter/lib/src/widgets/widgets.md
deleted file mode 100644
index 872c8f7..0000000
--- a/packages/flutter/lib/src/widgets/widgets.md
+++ /dev/null
@@ -1,145 +0,0 @@
-Sky Widgets: Basic
-==================
-
-This document describes the basic widgets available in Sky. These widgets are
-general-purpose and don't offer an opinion about the visual style of your app.
-
-Container
----------
-
-`Container` is a general-purpose widget that combines several basic widgets in
-order to make them easier to use.
-
- - `BoxDecoration decoration` Draw the given decoration around this container.
- - `double width` Forces the container to have the given width.
- - `double height` Force the container to have the given height.
- - `EdgeDims margin` Surrounds the container (i.e., outside the container's
-    decoration) on the top, right, bottom, and left with the given amount of
-    space.
- - `EdgeDims padding` Surrounds the container's child (i.e., inside the
-    container's decoration) on the top, right, bottom, and left with the given
-    amount of space.
- - `Matrix4 transform` Apply the given matrix before painting the container.
- - `BoxConstraints constraints` Force the width and height of the container to
-    respect the given constraints.
-
-Layout models
--------------
-
-There are two _flex_ layout models:
-
- - `Row`: Layout a list of child widgets in the horizontal direction.
-
- - `Column': Layout a list of child widgets in the vertical direction.
-
-The direction along which the widgets are laid out is called the
-*main* direction and the other axis is called the *cross* direction.
-These flex widgets size themselves to the maximum size permitted by
-its parent, unless that would be infinite size, in which case they
-shrink-wrap their children. For details, see [flex.md](flex.md).
-
-Each child of a flex widget is either *flexible* or *inflexible*.
-The flex first lays out its inflexible children and subtracts their
-total length along the main direction to determine how much free space
-is available. The flex then divides this free space among the flexible
-children in a ratio determined by their `flex` properties.
-
-The `alignItems` property determines how children are positioned in
-the cross direction. The `justifyContent` property determines how the
-remaining free space (if any) in the main direction is allocated.
-
- - `Flexible`: Mark this child as being flexible with the given `flex` ratio.
-
-There is also a stacking layout model:
-
- - `Stack`: Layout a list of child widgets on top of each other from back to
-   front. Each child of a `Stack` widget is either *positioned* or
-   *non-positioned*. The stack sizes itself to the contain all the
-   non-positioned children, which are located at the top-left corner of the
-   stack. The *positioned* children are then located relative to the stack
-   according to their `top`, `right`, `bottom`, and `left` properties.
-
-    - `Positioned`: Mark this child as *positioned*. If the `top` property is
-      non-null, the top edge of this child will be positioned `top` layout units
-      from the top of the stack widget. The `right`, `bottom`, and `right`
-      properties work analogously. Note that if the both the `top` and `bottom`
-      properties are non-null, then the child will be forced to have exactly the
-      height required to satisfy both constraints. Similarly, setting the
-      `right` and `left` properties to non-null values will force the child to
-      have a particular width.
-
-Positioning and sizing
-----------------------
-
- - `Padding` Surround the child with empty space on the top, right, bottom, and
-   left according to the given `EdgeDims`.
-
- - `Center` Center the child widget within the space occupied by this widget.
-
- - `SizedBox` Force the child widget to have a particular `width` or `height`
-   (or both).
-
- - `ConstrainedBox` Apply the given `BoxConstraints` to the child widget as
-   additional constraints during layout. This widget is a generalization of
-   `SizedBox`.
-
- - `AspectRatio` Force the child widget's width and height to have the given
-   `aspectRatio`, expressed as a ratio of width to height.
-
- - `Transform` Apply the given matrix to the child before painting the child.
-   This widget is useful for adjusting the visual size and position of a widget
-   without affecting layout.
-
- - `Viewport` Layout the child widget at a larger size than fits in this widget
-   and render only the portion of the child that is visually contained by this
-   widget. When rendering, add `offset` to the child's vertical position to
-   control which part of the child is visible through the viewport.
-   TODO(abarth): Add support for horizontal viewporting.
-
- - `SizeObserver` Whenever the child widget changes size, this widget calls the
-   `callback`. Warning: If the callback changes state that affects the size of
-   the child widget, it is possible to create an infinite loop.
-
- - `ShrinkWrapWidth` Force the child widget to have a width equal to its max
-   intrinsic width. TODO(abarth): Add a link to the definition of max intrinsic
-   width. Optionally, round up the child widget's width or height (or both) to
-   a multiple of `stepWidth` or `stepHeight`, respectively. Note: The layout
-   performed by `ShrinkWrapWidth` is relatively expensive and should be used
-   sparingly.
-
- - `Baseline` If the child widget has a `TextBaseline` of the given
-   `baselineType`, position the child such that its baseline is at `baseline`
-   layout units from the top of this widget.
-
-Painting effects
-----------------
-
- - `Opacity` Adjusts the opacity of the child widget, making the child partially
-   transparent. The amount of transparency is controlled by `opacity`, with 0.0
-   0.0 is fully transparent and 1.0 is fully opaque.
-
- - `ClipRect` Apply a rectangular clip to the child widget. The dimensions of
-   the clip match the dimensions of the child.
-
- - `ClipRRect` Apply a rounded-rect clip the child widget. The bounds of the
-   clip match the bounds of the child widget with `xRadius` and `yRadius`
-   controlling the x and y radius of the rounded corner, respectively.
-
- - `ClipOval` Apply an oval clip to the child widget. The oval will be
-   axis-aligned, with its horizontal and vertical bounds matching the bounds of
-   the child widget.
-
- - `DecoratedBox` Draw the given `BoxDecoration` surrounding the child widget.
-
- - `ColorFilter` Applies a color filter to the child widget, for example to
-   tint the child a given color.
-
- - `CustomPaint` Calls `callback` during the paint phase with the current
-   `Canvas` and `Size`. The widget occupies the region of the canvas starting at
-   the origin (i.e., `x = 0.0` and `y = 0.0`) and of the given size (i.e.,
-   `x = size.width` and `y = size.height`).
-
-   Use the `token` to invalidate the painting. As long as the any new `token`
-   is `operator==` the current `token`, the `CustomPaint` widget is permitted
-   to retain a recording of the painting produced by the previous `callback`
-   call.