diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2372584..85a3c27 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+## 0.2.8
+
+* Update SDK constraint to `>=2.0.0-dev.61 <3.0.0`.
+
+* Directory listings are now sorted.
+
 ## 0.2.7+1
 
 * Updated SDK version to 2.0.0-dev.17.0
diff --git a/analysis_options.yaml b/analysis_options.yaml
deleted file mode 100644
index a10d4c5..0000000
--- a/analysis_options.yaml
+++ /dev/null
@@ -1,2 +0,0 @@
-analyzer:
-  strong-mode: true
diff --git a/lib/src/directory_listing.dart b/lib/src/directory_listing.dart
index 3e9e877..a598243 100644
--- a/lib/src/directory_listing.dart
+++ b/lib/src/directory_listing.dart
@@ -94,5 +94,6 @@
   });
 
   return new Response.ok(controller.stream,
-      encoding: encoding, headers: {HttpHeaders.CONTENT_TYPE: 'text/html'});
+      encoding: encoding,
+      headers: {HttpHeaders.contentTypeHeader: 'text/html'});
 }
diff --git a/lib/src/static_handler.dart b/lib/src/static_handler.dart
index afd42c8..b6131ea 100644
--- a/lib/src/static_handler.dart
+++ b/lib/src/static_handler.dart
@@ -189,12 +189,12 @@
   }
 
   var headers = {
-    HttpHeaders.CONTENT_LENGTH: stat.size.toString(),
-    HttpHeaders.LAST_MODIFIED: formatHttpDate(stat.changed)
+    HttpHeaders.contentLengthHeader: stat.size.toString(),
+    HttpHeaders.lastModifiedHeader: formatHttpDate(stat.changed)
   };
 
   var contentType = await getContentType();
-  if (contentType != null) headers[HttpHeaders.CONTENT_TYPE] = contentType;
+  if (contentType != null) headers[HttpHeaders.contentTypeHeader] = contentType;
 
   return new Response.ok(file.openRead(), headers: headers);
 }
diff --git a/pubspec.yaml b/pubspec.yaml
index 8a8ec3b..b105264 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,10 +1,10 @@
 name: shelf_static
-version: 0.2.7+1
+version: 0.2.8
 author: Dart Team <misc@dartlang.org>
 description: Static file server support for Shelf
 homepage: https://github.com/dart-lang/shelf_static
 environment:
-  sdk: '>=2.0.0-dev.55.0 <2.0.0'
+  sdk: '>=2.0.0-dev.61.0 <3.0.0'
 dependencies:
   convert: '>=1.0.0 <3.0.0'
   http_parser: '>=0.0.2+2 <4.0.0'
@@ -13,6 +13,6 @@
   shelf: '>=0.5.7 <0.8.0'
 dev_dependencies:
   args: '^1.0.0'
-  test: '>=0.12.0 <0.13.0'
+  test: '^1.2.0'
   test_descriptor: '^1.0.0'
 
diff --git a/test/alternative_root_test.dart b/test/alternative_root_test.dart
index a1095a1..5f882aa 100644
--- a/test/alternative_root_test.dart
+++ b/test/alternative_root_test.dart
@@ -23,7 +23,7 @@
 
     var response =
         await makeRequest(handler, '/static/root.txt', handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 8);
     expect(response.readAsString(), completion('root txt'));
   });
@@ -33,7 +33,7 @@
 
     var response = await makeRequest(handler, '/static/files/with%20space.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -43,7 +43,7 @@
 
     var response = await makeRequest(handler, '/static/files/with%20space.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -53,7 +53,7 @@
 
     var response = await makeRequest(handler, '/static/files/test.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 16);
     expect(response.readAsString(), completion('test txt content'));
   });
@@ -63,6 +63,6 @@
 
     var response = await makeRequest(handler, '/static/not_here.txt',
         handlerPath: 'static');
-    expect(response.statusCode, HttpStatus.NOT_FOUND);
+    expect(response.statusCode, HttpStatus.notFound);
   });
 }
diff --git a/test/basic_file_test.dart b/test/basic_file_test.dart
index 6b5e005..2b31dd6 100644
--- a/test/basic_file_test.dart
+++ b/test/basic_file_test.dart
@@ -43,7 +43,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/root.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 8);
     expect(response.readAsString(), completion('root txt'));
   });
@@ -52,7 +52,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/with%20space.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -61,7 +61,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/with%20space.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 18);
     expect(response.readAsString(), completion('with space content'));
   });
@@ -70,7 +70,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/files/test.txt');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.contentLength, 16);
     expect(response.readAsString(), completion('test txt content'));
   });
@@ -79,7 +79,7 @@
     var handler = createStaticHandler(d.sandbox);
 
     var response = await makeRequest(handler, '/not_here.txt');
-    expect(response.statusCode, HttpStatus.NOT_FOUND);
+    expect(response.statusCode, HttpStatus.notFound);
   });
 
   test('last modified', () async {
@@ -99,10 +99,12 @@
       var rootPath = p.join(d.sandbox, 'root.txt');
       var modified = new File(rootPath).statSync().changed.toUtc();
 
-      var headers = {HttpHeaders.IF_MODIFIED_SINCE: formatHttpDate(modified)};
+      var headers = {
+        HttpHeaders.ifModifiedSinceHeader: formatHttpDate(modified)
+      };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.statusCode, HttpStatus.notModified);
       expect(response.contentLength, 0);
     });
 
@@ -113,12 +115,12 @@
       var modified = new File(rootPath).statSync().changed.toUtc();
 
       var headers = {
-        HttpHeaders.IF_MODIFIED_SINCE:
+        HttpHeaders.ifModifiedSinceHeader:
             formatHttpDate(modified.subtract(const Duration(seconds: 1)))
       };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.lastModified, atSameTimeToSecond(modified));
     });
 
@@ -129,12 +131,12 @@
       var modified = new File(rootPath).statSync().changed.toUtc();
 
       var headers = {
-        HttpHeaders.IF_MODIFIED_SINCE:
+        HttpHeaders.ifModifiedSinceHeader:
             formatHttpDate(modified.add(const Duration(seconds: 1)))
       };
 
       var response = await makeRequest(handler, '/root.txt', headers: headers);
-      expect(response.statusCode, HttpStatus.NOT_MODIFIED);
+      expect(response.statusCode, HttpStatus.notModified);
       expect(response.contentLength, 0);
     });
   });
diff --git a/test/create_file_handler_test.dart b/test/create_file_handler_test.dart
index 26a6da9..251f08f 100644
--- a/test/create_file_handler_test.dart
+++ b/test/create_file_handler_test.dart
@@ -20,7 +20,7 @@
   test('serves the file contents', () async {
     var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
     var response = await makeRequest(handler, '/file.txt');
-    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.statusCode, equals(HttpStatus.ok));
     expect(response.contentLength, equals(8));
     expect(response.readAsString(), completion(equals('contents')));
   });
@@ -28,14 +28,14 @@
   test('serves a 404 for a non-matching URL', () async {
     var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
     var response = await makeRequest(handler, '/foo/file.txt');
-    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
+    expect(response.statusCode, equals(HttpStatus.notFound));
   });
 
   test('serves the file contents under a custom URL', () async {
     var handler =
         createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
     var response = await makeRequest(handler, '/foo/bar');
-    expect(response.statusCode, equals(HttpStatus.OK));
+    expect(response.statusCode, equals(HttpStatus.ok));
     expect(response.contentLength, equals(8));
     expect(response.readAsString(), completion(equals('contents')));
   });
@@ -44,21 +44,21 @@
     var handler =
         createFileHandler(p.join(d.sandbox, 'file.txt'), url: 'foo/bar');
     var response = await makeRequest(handler, '/file.txt');
-    expect(response.statusCode, equals(HttpStatus.NOT_FOUND));
+    expect(response.statusCode, equals(HttpStatus.notFound));
   });
 
   group('the content type header', () {
     test('is inferred from the file path', () async {
       var handler = createFileHandler(p.join(d.sandbox, 'file.txt'));
       var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, equals('text/plain'));
     });
 
     test("is omitted if it can't be inferred", () async {
       var handler = createFileHandler(p.join(d.sandbox, 'random.unknown'));
       var response = await makeRequest(handler, '/random.unknown');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, isNull);
     });
 
@@ -66,7 +66,7 @@
       var handler = createFileHandler(p.join(d.sandbox, 'file.txt'),
           contentType: 'something/weird');
       var response = await makeRequest(handler, '/file.txt');
-      expect(response.statusCode, equals(HttpStatus.OK));
+      expect(response.statusCode, equals(HttpStatus.ok));
       expect(response.mimeType, equals('something/weird'));
     });
   });
diff --git a/test/default_document_test.dart b/test/default_document_test.dart
index d7e2906..b7382d8 100644
--- a/test/default_document_test.dart
+++ b/test/default_document_test.dart
@@ -43,7 +43,7 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -52,21 +52,21 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
 
     test('access "/files"', () async {
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/files');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
 
     test('access "/files/" dir', () async {
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/files/');
-      expect(response.statusCode, HttpStatus.NOT_FOUND);
+      expect(response.statusCode, HttpStatus.notFound);
     });
   });
 
@@ -76,7 +76,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
       expect(response.mimeType, 'text/html');
@@ -87,7 +87,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
       expect(response.mimeType, 'text/html');
@@ -98,9 +98,9 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/files');
-      expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+      expect(response.statusCode, HttpStatus.movedPermanently);
       expect(response.headers,
-          containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
+          containsPair(HttpHeaders.locationHeader, 'http://localhost/files/'));
     });
 
     test('access "/files/" dir', () async {
@@ -108,7 +108,7 @@
           createStaticHandler(d.sandbox, defaultDocument: 'index.html');
 
       var response = await makeRequest(handler, '/files/');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 31);
       expect(response.readAsString(),
           completion('<html><body>files</body></html>'));
diff --git a/test/directory_listing_test.dart b/test/directory_listing_test.dart
index c939c5f..2d1956b 100644
--- a/test/directory_listing_test.dart
+++ b/test/directory_listing_test.dart
@@ -25,7 +25,7 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 
@@ -33,16 +33,16 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files');
-    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(response.statusCode, HttpStatus.movedPermanently);
     expect(response.headers,
-        containsPair(HttpHeaders.LOCATION, 'http://localhost/files/'));
+        containsPair(HttpHeaders.locationHeader, 'http://localhost/files/'));
   });
 
   test('access "/files/"', () async {
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 
@@ -50,18 +50,18 @@
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/empty subfolder');
-    expect(response.statusCode, HttpStatus.MOVED_PERMANENTLY);
+    expect(response.statusCode, HttpStatus.movedPermanently);
     expect(
         response.headers,
-        containsPair(
-            HttpHeaders.LOCATION, 'http://localhost/files/empty%20subfolder/'));
+        containsPair(HttpHeaders.locationHeader,
+            'http://localhost/files/empty%20subfolder/'));
   });
 
   test('access "/files/empty subfolder/"', () async {
     var handler = createStaticHandler(d.sandbox, listDirectories: true);
 
     var response = await makeRequest(handler, '/files/empty subfolder/');
-    expect(response.statusCode, HttpStatus.OK);
+    expect(response.statusCode, HttpStatus.ok);
     expect(response.readAsString(), completes);
   });
 }
diff --git a/test/symbolic_link_test.dart b/test/symbolic_link_test.dart
index 8a95288..4b9d81d 100644
--- a/test/symbolic_link_test.dart
+++ b/test/symbolic_link_test.dart
@@ -37,7 +37,7 @@
       var handler = createStaticHandler(d.sandbox);
 
       var response = await makeRequest(handler, '/originals/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -47,7 +47,7 @@
         var handler = createStaticHandler(d.sandbox);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -56,7 +56,7 @@
         var handler = createStaticHandler(d.sandbox);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -67,14 +67,14 @@
         var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
+        expect(response.statusCode, HttpStatus.notFound);
       });
 
       test('access file in sym linked dir', () async {
         var handler = createStaticHandler(p.join(d.sandbox, 'alt_root'));
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.NOT_FOUND);
+        expect(response.statusCode, HttpStatus.notFound);
       });
     });
   });
@@ -84,7 +84,7 @@
       var handler = createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
       var response = await makeRequest(handler, '/originals/index.html');
-      expect(response.statusCode, HttpStatus.OK);
+      expect(response.statusCode, HttpStatus.ok);
       expect(response.contentLength, 13);
       expect(response.readAsString(), completion('<html></html>'));
     });
@@ -95,7 +95,7 @@
             createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -105,7 +105,7 @@
             createStaticHandler(d.sandbox, serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -117,7 +117,7 @@
             serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
@@ -127,7 +127,7 @@
             serveFilesOutsidePath: true);
 
         var response = await makeRequest(handler, '/link_dir/index.html');
-        expect(response.statusCode, HttpStatus.OK);
+        expect(response.statusCode, HttpStatus.ok);
         expect(response.contentLength, 13);
         expect(response.readAsString(), completion('<html></html>'));
       });
