Basic live editor
diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md
index 2c03a83..2deea9e 100644
--- a/pkgs/markdown/CHANGELOG.md
+++ b/pkgs/markdown/CHANGELOG.md
@@ -1,4 +1,4 @@
-## 0.11.0-dev
+## 0.11.0
 
 * Parse HTML blocks more accurately, according to
   [CommonMark](http://spec.commonmark.org/0.24/#html-blocks).
diff --git a/pkgs/markdown/example/app.dart b/pkgs/markdown/example/app.dart
new file mode 100644
index 0000000..015a267
--- /dev/null
+++ b/pkgs/markdown/example/app.dart
@@ -0,0 +1,56 @@
+import 'dart:async';
+import 'dart:html';
+import 'package:markdown/markdown.dart' as md;
+
+final markdownInput = querySelector('#markdown') as TextAreaElement;
+final htmlDiv = querySelector('#html') as DivElement;
+final nullSanitizer = new NullTreeSanitizer();
+const typing = const Duration(milliseconds: 150);
+final introText = r'''Markdown is the **best**!
+
+* It has lists.
+* It has [links](http://dartlang.org).
+* It has _so much more_...''';
+
+void main() {
+  markdownInput.onKeyUp.listen(_renderMarkdown);
+
+  String savedMarkdown = window.localStorage['markdown'];
+
+  if (savedMarkdown != null &&
+      savedMarkdown.isNotEmpty &&
+      savedMarkdown != introText) {
+    markdownInput.value = savedMarkdown;
+    _renderMarkdown();
+  } else {
+    _typeItOut(introText, 82);
+  }
+}
+
+void _renderMarkdown([Event event]) {
+  var markdown = markdownInput.value;
+  htmlDiv.setInnerHtml(md.markdownToHtml(markdown),
+      treeSanitizer: nullSanitizer);
+  if (event != null) {
+    // Not simulated typing. Store it.
+    window.localStorage['markdown'] = markdown;
+  }
+}
+
+void _typeItOut(String msg, int pos) {
+  addCharacter() {
+    if (pos > msg.length) {
+      return;
+    }
+    markdownInput.value = msg.substring(0, pos);
+    markdownInput.focus();
+    _renderMarkdown();
+    pos++;
+    new Timer(typing, addCharacter);
+  }
+  new Timer(typing, addCharacter);
+}
+
+class NullTreeSanitizer implements NodeTreeSanitizer {
+  void sanitizeTree(Node node) {}
+}
diff --git a/pkgs/markdown/example/index.html b/pkgs/markdown/example/index.html
new file mode 100644
index 0000000..adb95cd
--- /dev/null
+++ b/pkgs/markdown/example/index.html
@@ -0,0 +1,42 @@
+<html>
+  <head>
+    <link rel="stylesheet" href="style.css"></link>
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,500,700,400italic">
+    <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto+Mono:400">
+    <script type="application/dart" src="app.dart"></script>
+    <script src="packages/browser/dart.js"></script>
+    <title>Dart Markdown Live Editor</title>
+  </head>
+  <body>
+    <div class="container">
+    <header>
+      <div class="toolbar">
+        <h2>Dart Markdown Live Editor</h2>
+        <span style="display: flex; flex: 1;"></span>
+        <a class="" href="https://github.com/dart-lang/markdown">
+          <svg class="octicon" height="32" version="1.1" viewBox="0 0 16 16" width="32">
+            <path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path>
+          </svg>
+        </a>
+      </div>
+    </header>
+    <div class="main">
+      <div class="card">
+        <div class="toolbar">
+          <h2>Markdown</h2>
+        </div>
+        <div style="padding: 8px; display: flex; height: 100%;">
+          <textarea rows="16" id="markdown">
+          </textarea>
+        </div>
+      </div>
+      <div class="card">
+        <div class="toolbar">
+          <h2>HTML</h2>
+        </div>
+        <div style="padding: 8px;" id="html"></div>
+      </div>
+    </div>
+    </div>
+  </body>
+</html>
diff --git a/pkgs/markdown/example/style.css b/pkgs/markdown/example/style.css
new file mode 100644
index 0000000..069ff97
--- /dev/null
+++ b/pkgs/markdown/example/style.css
@@ -0,0 +1,104 @@
+html, body {
+  background-color: rgb(250, 250, 250);
+  font-family: Roboto,"Helvetica Neue",sans-serif;
+  font-size: 16px;
+  margin: 0;
+}
+
+.container {
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+  width: 100%;
+}
+
+.main {
+  align-items: stretch;
+  box-sizing: border-box;
+  display: flex;
+  flex-direction: row;
+  height: 100%;
+  margin: 32px;
+}
+
+.card {
+  /* Styled like Material Cards. */
+  color: rgba(0, 0, 0, 0.87);
+  background-color: white;
+  border-radius: 2px;
+  box-sizing: border-box;
+  box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .2),
+              0 1px 1px 0 rgba(0, 0, 0, .14),
+              0 2px 1px -1px rgba(0, 0, 0, .12);
+  margin: 8px;
+
+  /* Positioned next to each other. */
+  display: flex;
+  flex: 1 1 50%;
+  flex-direction: column;
+  max-height: 100%;
+  max-width: 50%;
+  min-height: 400px;
+}
+
+.toolbar {
+  /* Styled like Material Toolbar. */
+  align-items: center;
+  background-color: #22d3c5; /* Taken from webdev.dartlang.org. */
+  box-sizing: border-box;
+  color: rgba(0, 0, 0, 0.87);
+  display: flex;
+  font-size: 20px;
+  line-height: 1.4;
+  margin: 0;
+  min-height: 64px;
+  padding: 0 16px;
+  position: relative;
+  width: 100%;
+}
+
+.toolbar h2 {
+  font-size: inherit;
+  font-weight: inherit;
+  margin: inherit;
+}
+
+.toolbar a:link,
+.toolbar a:visited {
+  color: rgba(0, 0, 0, 0.87);
+}
+
+.toolbar svg {
+  fill: currentColor;
+}
+
+.card .toolbar {
+  border-radius: 3px 3px 0 0;
+}
+
+.textarea-container {
+  display: flex;
+  height: 100%;
+  padding: 8px;
+}
+
+textarea {
+  border-color: rgba(0, 0, 0, 0.12);
+  border-width: 0 0 1px;
+  box-sizing: border-box;
+  color: rgba(0, 0, 0, 0.87);
+  font-family: "Roboto Mono",monospace;
+  font-size: 100%;
+  line-height: 26px;
+  overflow: hidden;
+  padding: 2px 2px 1px;
+  width: 100%;
+}
+
+textarea:focus {
+  border-color: #22d3c5; /* Taken from webdev.dartlang.org. */
+  border-width: 0 0 2px;
+  outline: 0;
+  padding-bottom: 0;
+}
diff --git a/pkgs/markdown/pubspec.yaml b/pkgs/markdown/pubspec.yaml
index 3f13a21..1bd960e 100644
--- a/pkgs/markdown/pubspec.yaml
+++ b/pkgs/markdown/pubspec.yaml
@@ -1,5 +1,5 @@
 name: markdown
-version: 0.11.0-dev
+version: 0.11.0
 author: Dart Team <misc@dartlang.org>
 description: A library for converting markdown to HTML.
 homepage: https://github.com/dart-lang/markdown
@@ -7,6 +7,8 @@
   sdk: '>=1.12.0 <2.0.0'
 dev_dependencies:
   args: '^0.13.3+1'
+  # Only for example/app.dart.
+  browser: any
   collection: ^1.2.0
   html: '^0.12.2'
   path: '^1.3.1'