diff --git a/.travis.yml b/.travis.yml
index 980160f..4a65230 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -3,8 +3,6 @@
 
 dart:
   - dev
-  - stable
-
 dart_task:
   - test: --platform vm,firefox
 
@@ -12,7 +10,7 @@
 # them against each Dart version.
 matrix:
   include:
-  - dart: stable
+  - dart: dev
     dart_task: dartfmt
   - dart: dev
     dart_task: dartanalyzer
diff --git a/lib/http.dart b/lib/http.dart
index ddf2711..1a9ee2a 100644
--- a/lib/http.dart
+++ b/lib/http.dart
@@ -62,7 +62,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
@@ -87,7 +87,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
@@ -112,7 +112,7 @@
 /// content-type of the request will be set to
 /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
 ///
-/// [encoding] defaults to [UTF8].
+/// [encoding] defaults to [utf8].
 ///
 /// This automatically initializes a new [Client] and closes that client once
 /// the request is complete. If you're planning on making multiple requests to
diff --git a/lib/src/body.dart b/lib/src/body.dart
index ed3412f..30f5ff7 100644
--- a/lib/src/body.dart
+++ b/lib/src/body.dart
@@ -40,16 +40,16 @@
     if (body is Body) return body;
     if (body == null) return new Body._(const Stream.empty(), encoding, 0);
 
-    if (body is Map) body = mapToQuery(body, encoding ?? UTF8);
+    if (body is Map) body = mapToQuery(body, encoding ?? utf8);
 
     Stream<List<int>> stream;
     int contentLength;
     if (body is String) {
       if (encoding == null) {
-        var encoded = UTF8.encode(body);
+        var encoded = utf8.encode(body);
         // If the text is plain ASCII, don't modify the encoding. This means
         // that an encoding of "text/plain" will stay put.
-        if (!_isPlainAscii(encoded, body.length)) encoding = UTF8;
+        if (!_isPlainAscii(encoded, body.length)) encoding = utf8;
         contentLength = encoded.length;
         stream = new Stream.fromIterable([encoded]);
       } else {
diff --git a/lib/src/client.dart b/lib/src/client.dart
index 8ce424d..6b5a2e5 100644
--- a/lib/src/client.dart
+++ b/lib/src/client.dart
@@ -66,7 +66,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> post(url, body,
@@ -87,7 +87,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> put(url, body,
@@ -108,7 +108,7 @@
   /// content-type of the request will be set to
   /// `"application/x-www-form-urlencoded"`; this cannot be overridden.
   ///
-  /// [encoding] defaults to [UTF8].
+  /// [encoding] defaults to [utf8].
   ///
   /// For more fine-grained control over the request, use [send] instead.
   Future<Response> patch(url, body,
diff --git a/lib/src/message.dart b/lib/src/message.dart
index 6273915..bf50634 100644
--- a/lib/src/message.dart
+++ b/lib/src/message.dart
@@ -154,7 +154,7 @@
   /// Throws a [StateError] if [read] or [readAsBytes] or [readAsString] has
   /// already been called.
   Future<String> readAsString([Encoding encoding]) {
-    encoding ??= this.encoding ?? UTF8;
+    encoding ??= this.encoding ?? utf8;
     return encoding.decodeStream(read());
   }
 
diff --git a/lib/src/multipart_body.dart b/lib/src/multipart_body.dart
index 63fd25b..d3e4915 100644
--- a/lib/src/multipart_body.dart
+++ b/lib/src/multipart_body.dart
@@ -39,7 +39,7 @@
     }
 
     void writeUtf8(String string) {
-      buffer.addAll(UTF8.encode(string));
+      buffer.addAll(utf8.encode(string));
     }
 
     void writeLine() {
@@ -65,7 +65,7 @@
     for (var file in fileList) {
       var header = <int>[]
         ..addAll('--$boundary\r\n'.codeUnits)
-        ..addAll(UTF8.encode(_headerForFile(file)));
+        ..addAll(utf8.encode(_headerForFile(file)));
 
       fileContentsLength += header.length + file.length + 2;
       fileHeaders.add(header);
diff --git a/lib/src/multipart_file.dart b/lib/src/multipart_file.dart
index 42a8689..e404241 100644
--- a/lib/src/multipart_file.dart
+++ b/lib/src/multipart_file.dart
@@ -38,7 +38,7 @@
   /// [value] can be either a [String] or a [List<int>].
   ///
   /// For a String [value] the content will be encoded using [encoding] which
-  /// defaults to [UTF8]. The `charset` from [contentType] is ignored when
+  /// defaults to [utf8]. The `charset` from [contentType] is ignored when
   /// encoding the String.
   ///
   /// [contentType] if not specified will attempt to be looked up from the
@@ -51,7 +51,7 @@
     var defaultMediaType;
 
     if (value is String) {
-      encoding ??= UTF8;
+      encoding ??= utf8;
       bytes = encoding.encode(value);
       defaultMediaType = new MediaType('text', 'plain');
     } else if (value is List<int>) {
diff --git a/pubspec.yaml b/pubspec.yaml
index 3708099..03ba584 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: http
-version: 0.12.0-dev
+version: 0.12.0
 author: "Dart Team <misc@dartlang.org>"
 homepage: https://github.com/dart-lang/http
 description: A composable, Future-based API for making HTTP requests.
@@ -16,4 +16,4 @@
 dependency_overrides:
   package_resolver: '^1.0.0'
 environment:
-  sdk: ">=1.24.0 <2.0.0"
+  sdk: ">=2.0.0-dev.17.0 <2.0.0"
diff --git a/test/client_test.dart b/test/client_test.dart
index 15ee380..6647b9f 100644
--- a/test/client_test.dart
+++ b/test/client_test.dart
@@ -72,13 +72,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('post with string and encoding', () async {
       var response = await platformClient()
-          .post(serverUrl, 'request body', encoding: UTF8, headers: {
+          .post(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -104,7 +104,7 @@
 
     test('post with bytes', () async {
       var response = await platformClient()
-          .post(serverUrl, ASCII.encode('hello'), headers: {
+          .post(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -123,7 +123,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -151,7 +151,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
@@ -176,13 +176,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('put with string and encoding', () async {
       var response = await platformClient()
-          .put(serverUrl, 'request body', encoding: UTF8, headers: {
+          .put(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -208,7 +208,7 @@
 
     test('put with bytes', () async {
       var response = await platformClient()
-          .put(serverUrl, ASCII.encode('hello'), headers: {
+          .put(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -227,7 +227,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -255,7 +255,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
@@ -280,13 +280,13 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('request body')
+            'body': ascii.encode('request body')
           })));
     });
 
     test('patch with string and encoding', () async {
       var response = await platformClient()
-          .patch(serverUrl, 'request body', encoding: UTF8, headers: {
+          .patch(serverUrl, 'request body', encoding: utf8, headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -312,7 +312,7 @@
 
     test('patch with bytes', () async {
       var response = await platformClient()
-          .patch(serverUrl, ASCII.encode('hello'), headers: {
+          .patch(serverUrl, ascii.encode('hello'), headers: {
         'X-Random-Header': 'Value',
         'X-Other-Header': 'Other Value',
         'User-Agent': userAgent()
@@ -331,7 +331,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('hello')
+            'body': ascii.encode('hello')
           })));
     });
 
@@ -359,7 +359,7 @@
               'x-random-header': 'Value',
               'x-other-header': 'Other Value'
             },
-            'body': ASCII.encode('some-field=value&other-field=other+value')
+            'body': ascii.encode('some-field=value&other-field=other+value')
           })));
     });
 
diff --git a/test/hybrid/server.dart b/test/hybrid/server.dart
index c873d4b..e813918 100644
--- a/test/hybrid/server.dart
+++ b/test/hybrid/server.dart
@@ -65,7 +65,7 @@
 
     if (request.url.path == 'no-content-length') {
       return new shelf.Response.ok(
-          new Stream.fromIterable([ASCII.encode('body')]));
+          new Stream.fromIterable([ascii.encode('body')]));
     }
 
     var requestBody;
@@ -90,9 +90,9 @@
 
     var encodingName = request.url.queryParameters['response-encoding'];
     var outputEncoding =
-        encodingName == null ? ASCII : Encoding.getByName(encodingName);
+        encodingName == null ? ascii : Encoding.getByName(encodingName);
 
-    return new shelf.Response.ok(JSON.encode(content), headers: {
+    return new shelf.Response.ok(jsonEncode(content), headers: {
       "content-type": "application/json; charset=${outputEncoding.name}",
 
       // CORS headers for browser testing
diff --git a/test/message_change_test.dart b/test/message_change_test.dart
index 8c5942d..18dc123 100644
--- a/test/message_change_test.dart
+++ b/test/message_change_test.dart
@@ -47,7 +47,7 @@
       var request = factory(body: 'Hello, world');
       var copy = request.change(
           body: new Stream.fromIterable(['Goodbye, world'])
-              .transform(UTF8.encoder));
+              .transform(utf8.encoder));
 
       var newBody = await copy.readAsString();
 
diff --git a/test/message_test.dart b/test/message_test.dart
index d24b764..5cb2434 100644
--- a/test/message_test.dart
+++ b/test/message_test.dart
@@ -13,16 +13,16 @@
 final _nonAscii = "föøbãr";
 
 /// The UTF-8 encoding of [_nonAscii].
-final _utf8Bytes = UTF8.encode(_nonAscii);
+final _utf8Bytes = utf8.encode(_nonAscii);
 
 /// The Latin-1 encoding of [_nonAscii].
-final _latin1Bytes = LATIN1.encode(_nonAscii);
+final _latin1Bytes = latin1.encode(_nonAscii);
 
 /// The ASCII bytes in the string "hello,".
-final _helloBytes = ASCII.encode("hello,");
+final _helloBytes = ascii.encode("hello,");
 
 /// The ASCII bytes in the string " world".
-final _worldBytes = ASCII.encode(" world");
+final _worldBytes = ascii.encode(" world");
 
 class _TestMessage extends Message {
   _TestMessage(Map<String, String> headers, Map<String, Object> context, body,
@@ -191,7 +191,7 @@
       expect(message.contentLength, 9);
       expect(message.isEmpty, isFalse);
 
-      message = _createMessage(body: 'fööbär', encoding: LATIN1);
+      message = _createMessage(body: 'fööbär', encoding: latin1);
       expect(message.contentLength, 6);
       expect(message.isEmpty, isFalse);
     });
@@ -316,7 +316,7 @@
     group('defaults to UTF-8 with a non-ASCII body and', () {
       test('no content-type header', () {
         var message = _createMessage(body: _nonAscii);
-        expect(message.encoding, equals(UTF8));
+        expect(message.encoding, equals(utf8));
         expect(
             message.headers,
             containsPair(
@@ -328,7 +328,7 @@
         var message = _createMessage(
             body: _nonAscii,
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding, equals(UTF8));
+        expect(message.encoding, equals(utf8));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=utf-8'));
         expect(message.readAsBytes(), completion(equals(_utf8Bytes)));
@@ -338,8 +338,8 @@
     group('uses the encoding parameter with', () {
       group('no content-type header and', () {
         test('no body', () {
-          var message = _createMessage(encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -347,8 +347,8 @@
         });
 
         test('a plain ASCII body', () {
-          var message = _createMessage(body: "foo", encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(body: "foo", encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -356,8 +356,8 @@
         });
 
         test('a non-ASCII body', () {
-          var message = _createMessage(body: _nonAscii, encoding: LATIN1);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(body: _nonAscii, encoding: latin1);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -366,8 +366,8 @@
         });
 
         test('body bytes', () {
-          var message = _createMessage(encoding: LATIN1, body: _latin1Bytes);
-          expect(message.encoding, equals(LATIN1));
+          var message = _createMessage(encoding: latin1, body: _latin1Bytes);
+          expect(message.encoding, equals(latin1));
           expect(
               message.headers,
               containsPair('content-type',
@@ -378,7 +378,7 @@
 
       test('a content-type header without a charset', () {
         var message = _createMessage(
-            encoding: LATIN1, headers: {'Content-Type': 'text/plain'});
+            encoding: latin1, headers: {'Content-Type': 'text/plain'});
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -386,9 +386,9 @@
       group('a content-type header and', () {
         test('no body', () {
           var message = _createMessage(
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         });
@@ -396,9 +396,9 @@
         test('a plain ASCII body', () {
           var message = _createMessage(
               body: "foo",
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         });
@@ -406,9 +406,9 @@
         test('a non-ASCII body', () {
           var message = _createMessage(
               body: _nonAscii,
-              encoding: LATIN1,
+              encoding: latin1,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
           expect(message.readAsBytes(), completion(equals(_latin1Bytes)));
@@ -416,10 +416,10 @@
 
         test('body bytes', () {
           var message = _createMessage(
-              encoding: LATIN1,
+              encoding: latin1,
               body: _latin1Bytes,
               headers: {'Content-Type': 'text/plain; charset=utf-8'});
-          expect(message.encoding, equals(LATIN1));
+          expect(message.encoding, equals(latin1));
           expect(message.headers,
               containsPair('content-type', 'text/plain; charset=iso-8859-1'));
           expect(message.readAsString(), completion(equals(_nonAscii)));
@@ -431,7 +431,7 @@
       test('no body', () {
         var message = _createMessage(
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -440,7 +440,7 @@
         var message = _createMessage(
             body: "foo",
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
       });
@@ -449,7 +449,7 @@
         var message = _createMessage(
             body: _latin1Bytes,
             headers: {'Content-Type': 'text/plain; charset=iso-8859-1'});
-        expect(message.encoding.name, equals(LATIN1.name));
+        expect(message.encoding.name, equals(latin1.name));
         expect(message.headers,
             containsPair('content-type', 'text/plain; charset=iso-8859-1'));
         expect(message.readAsString(), completion(equals(_nonAscii)));
diff --git a/test/multipart_test.dart b/test/multipart_test.dart
index bf0d22b..65213ad 100644
--- a/test/multipart_test.dart
+++ b/test/multipart_test.dart
@@ -180,7 +180,7 @@
     // "Ã¥" encoded as ISO-8859-1 and then read as UTF-8 results in "å".
     var files = [
       new http.MultipartFile('file', 'non-ascii: "Ã¥"',
-          encoding: LATIN1, contentType: new MediaType('text', 'plain'))
+          encoding: latin1, contentType: new MediaType('text', 'plain'))
     ];
     var request = new http.Request.multipart(dummyUrl, files: files);
 
diff --git a/test/utils.dart b/test/utils.dart
index db93d78..2e9909b 100644
--- a/test/utils.dart
+++ b/test/utils.dart
@@ -52,7 +52,7 @@
 
     var parsed;
     try {
-      parsed = JSON.decode(item);
+      parsed = jsonDecode(item);
     } catch (e) {
       return false;
     }
@@ -81,7 +81,7 @@
     if (item is! http.Request) return false;
 
     var future = item.readAsBytes().then((bodyBytes) {
-      var body = UTF8.decode(bodyBytes);
+      var body = utf8.decode(bodyBytes);
       var contentType = new MediaType.parse(item.headers['content-type']);
       var boundary = contentType.parameters['boundary'];
       var expected = cleanUpLiteral(_pattern)
