diff --git a/README.md b/README.md
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/README.md
diff --git a/examples/todos/.gitignore b/examples/todos/.gitignore
new file mode 100644
index 0000000..dd20bb4
--- /dev/null
+++ b/examples/todos/.gitignore
@@ -0,0 +1,8 @@
+.DS_Store
+.atom/
+.idea
+.packages
+.pub/
+build/
+packages
+pubspec.lock
diff --git a/examples/todos/README.md b/examples/todos/README.md
new file mode 100644
index 0000000..1e1caa6
--- /dev/null
+++ b/examples/todos/README.md
@@ -0,0 +1,6 @@
+# todos
+
+Details coming soon.
+
+    pub get
+    flutter start && flutter logs
diff --git a/examples/todos/apk/AndroidManifest.xml b/examples/todos/apk/AndroidManifest.xml
new file mode 100644
index 0000000..91febc0
--- /dev/null
+++ b/examples/todos/apk/AndroidManifest.xml
@@ -0,0 +1,19 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.todos">
+
+    <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" />
+    <uses-permission android:name="android.permission.INTERNET"/>
+
+    <application android:name="org.domokit.sky.shell.SkyApplication" android:label="todos">
+        <activity android:name="org.domokit.sky.shell.SkyActivity"
+                  android:launchMode="singleTask"
+                  android:theme="@android:style/Theme.Black.NoTitleBar"
+                  android:configChanges="orientation|keyboardHidden|keyboard|screenSize"
+                  android:hardwareAccelerated="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+    </application>
+</manifest>
diff --git a/examples/todos/flutter.yaml b/examples/todos/flutter.yaml
new file mode 100644
index 0000000..5f2e40e
--- /dev/null
+++ b/examples/todos/flutter.yaml
@@ -0,0 +1,3 @@
+name: todos
+material-design-icons:
+  - name: content/add
diff --git a/examples/todos/lib/main.dart b/examples/todos/lib/main.dart
new file mode 100644
index 0000000..e0cf583
--- /dev/null
+++ b/examples/todos/lib/main.dart
@@ -0,0 +1,117 @@
+// Copyright 2015 The Vanadium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+import 'package:flutter/material.dart';
+
+/// Start the Todo application.
+///
+/// Use the Flutter `runApp` function render this application's widget tree
+/// to the screen.
+void main() {
+  runApp(new App());
+}
+
+/// Subclass `StatelessComponent` to build the top-level component.
+///
+/// The `App` component composes other, lower-level components in it's
+/// `build` function. This top-level component, `App` does not need to hold
+/// any state since that is managed by components lower down in the tree like
+/// `TodoList`. Because this component is stateless, and only manages
+/// composition of the widget tree it can inherit from `StatelessComponent`.
+class App extends StatelessComponent {
+  final ThemeData theme = new ThemeData(
+    brightness: ThemeBrightness.light,
+    primarySwatch: Colors.indigo,
+    accentColor: Colors.pinkAccent[200]
+  );
+
+  /// Build a `MaterialApp` widget.
+  ///
+  /// The `MaterialApp` widget allows the inheritance of theme data. For now
+  /// only an empty Todo List is rendered as the single, default route.
+  Widget build(BuildContext context) {
+    return new MaterialApp(
+      title: 'TODO',
+      theme: theme,
+      routes: {'/': (RouteArguments args) => new TodoList()}
+    );
+  }
+}
+
+/// `TodoList` is a `StatefulComponent` component.
+///
+/// This component is responsible for holding a list of `Todo` items and
+/// rendering the list appropriately. A Todo list fills the whole screen
+/// and is composed of a tool bar, a list view, and the floating
+/// action button for adding a new Todo item.
+class TodoList extends StatefulComponent {
+  TodoListState createState() => new TodoListState();
+}
+
+class TodoListState extends State<TodoList> {
+  List<Todo> todos = new List<Todo>();
+
+  void addTodo() {
+    // Use `setState(fn)` to signal to the framework that some internal state
+    // has been changed and a needs to be rebuilt. If the state update is not
+    // wrapped in a `setState` call the change will not be displayed to the
+    // screen.
+    setState(() {
+      todos.add(new Todo(title: 'FAB Item #${todos.length}.'));
+    });
+  }
+
+  Widget build(BuildContext context) {
+    return new Scaffold(
+      toolBar: new ToolBar(
+        center: new Text('TODO List')
+      ),
+      body: new MaterialList(
+        type: MaterialListType.oneLine,
+        children: todos
+      ),
+      floatingActionButton: new FloatingActionButton(
+          child: new Icon(icon: 'content/add'),
+          onPressed: addTodo
+      )
+    );
+  }
+}
+
+class Todo extends StatefulComponent {
+  Todo({Key key, this.title, this.completed: false}) : super(key: key);
+
+  final String title;
+  final bool completed;
+
+  TodoState createState() => new TodoState();
+}
+
+class TodoState extends State<Todo> {
+  bool completed;
+
+  /// Override `initState()`.
+  ///
+  /// Initialize internal state value `completed` with the value passed into
+  /// the parent `Todo` constructor. The `config` property allows the state
+  /// instance to access the properties of the `Todo` component.
+  @override
+  void initState() {
+    super.initState();
+    completed = config.completed;
+  }
+
+  void toggle() {
+    setState(() {
+      completed = !completed;
+    });
+  }
+
+  Widget build(BuildContext context) {
+    return new ListItem(
+      center: new Text('${config.title} - done: $completed'),
+      onTap: toggle
+    );
+  }
+}
diff --git a/examples/todos/pubspec.yaml b/examples/todos/pubspec.yaml
new file mode 100644
index 0000000..dc298bd
--- /dev/null
+++ b/examples/todos/pubspec.yaml
@@ -0,0 +1,5 @@
+name: todos
+description: A minimal Flutter project.
+dependencies:
+  flutter:
+    path: ../../../../../../flutter/packages/flutter
