diff --git a/CHANGELOG.md b/CHANGELOG.md
index df9123c..beac1ec 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+## 0.12.0
+
+* Top-level methods in `parser.dart` now take `PreprocessorOptions` instead of
+  `List<String>`.
+
+* `PreprocessorOptions.inputFile` is now final.
+
 ## 0.11.0+4
 
 * Cleanup some ambiguous and some incorrect type signatures.
diff --git a/example/call_parser.dart b/example/call_parser.dart
index 3248f7f..7179a17 100644
--- a/example/call_parser.dart
+++ b/example/call_parser.dart
@@ -4,17 +4,22 @@
 import 'package:csslib/parser.dart' as css;
 import 'package:csslib/visitor.dart';
 
+const _default = const css.PreprocessorOptions(
+    useColors: false,
+    checked: true,
+    warningsAsErrors: true,
+    inputFile: 'memory');
+
 /**
  * Spin-up CSS parser in checked mode to detect any problematic CSS.  Normally,
  * CSS will allow any property/value pairs regardless of validity; all of our
  * tests (by default) will ensure that the CSS is really valid.
  */
-StyleSheet parseCss(String cssInput, {List errors, List opts}) => css.parse(
-    cssInput,
-    errors: errors,
-    options: opts == null
-        ? ['--no-colors', '--checked', '--warnings_as_errors', 'memory']
-        : opts);
+StyleSheet parseCss(String cssInput,
+    {List errors, css.PreprocessorOptions opts}) {
+  return css.parse(cssInput,
+      errors: errors, options: opts == null ? _default : opts);
+}
 
 // Pretty printer for CSS.
 var emitCss = new CssPrinter();
diff --git a/lib/parser.dart b/lib/parser.dart
index 25c329d..9d27e97 100644
--- a/lib/parser.dart
+++ b/lib/parser.dart
@@ -12,6 +12,8 @@
 import 'src/messages.dart';
 import 'src/options.dart';
 
+export 'src/options.dart';
+
 part 'src/analyzer.dart';
 part 'src/polyfill.dart';
 part 'src/property.dart';
@@ -30,14 +32,14 @@
 }
 
 // TODO(jmesserly): this should not be global
-void _createMessages({List<Message> errors, List<String> options}) {
+void _createMessages({List<Message> errors, PreprocessorOptions options}) {
   if (errors == null) errors = [];
 
   if (options == null) {
-    options = ['--no-colors', 'memory'];
+    options = new PreprocessorOptions(useColors: false, inputFile: 'memory');
   }
-  var opt = PreprocessorOptions.parse(options);
-  messages = new Messages(options: opt, printHandler: errors.add);
+
+  messages = new Messages(options: options, printHandler: errors.add);
 }
 
 /** CSS checked mode enabled. */
@@ -45,7 +47,7 @@
 
 // TODO(terry): Remove nested name parameter.
 /** Parse and analyze the CSS file. */
-StyleSheet compile(input, {List<Message> errors, List<String> options,
+StyleSheet compile(input, {List<Message> errors, PreprocessorOptions options,
     bool nested: true, bool polyfill: false, List<StyleSheet> includes: null}) {
   if (includes == null) {
     includes = [];
@@ -71,7 +73,7 @@
 
 /** Analyze the CSS file. */
 void analyze(List<StyleSheet> styleSheets,
-    {List<Message> errors, List<String> options}) {
+    {List<Message> errors, PreprocessorOptions options}) {
   _createMessages(errors: errors, options: options);
   new Analyzer(styleSheets, messages).run();
 }
@@ -81,7 +83,7 @@
  * or [List<int>] of bytes and returns a [StyleSheet] AST.  The optional
  * [errors] list will contain each error/warning as a [Message].
  */
-StyleSheet parse(input, {List<Message> errors, List<String> options}) {
+StyleSheet parse(input, {List<Message> errors, PreprocessorOptions options}) {
   var source = _inputAsString(input);
 
   _createMessages(errors: errors, options: options);
diff --git a/lib/src/messages.dart b/lib/src/messages.dart
index d8abcab..595bf6c 100644
--- a/lib/src/messages.dart
+++ b/lib/src/messages.dart
@@ -124,10 +124,7 @@
   void mergeMessages(Messages newMessages) {
     messages.addAll(newMessages.messages);
     newMessages.messages
-        .where(
-            (message) => message.level.value == Level.SEVERE || options.verbose)
-        .forEach((message) {
-      printHandler(message);
-    });
+        .where((message) => message.level == Level.SEVERE || options.verbose)
+        .forEach(printHandler);
   }
 }
diff --git a/lib/src/options.dart b/lib/src/options.dart
index 0ebb5b4..95e8a2f 100644
--- a/lib/src/options.dart
+++ b/lib/src/options.dart
@@ -38,10 +38,12 @@
   final bool useColors;
 
   /** File to process by the compiler. */
-  String inputFile;
+  final String inputFile;
 
-  // We could make this faster, if it ever matters.
-  factory PreprocessorOptions() => parse(['']);
+  const PreprocessorOptions({this.verbose: false, this.checked: false,
+      this.lessSupport: true, this.warningsAsErrors: false,
+      this.throwOnErrors: false, this.throwOnWarnings: false,
+      this.useColors: true, this.polyfill: false, this.inputFile});
 
   PreprocessorOptions.fromArgs(ArgResults args)
       : warningsAsErrors = args['warnings_as_errors'],
diff --git a/pubspec.yaml b/pubspec.yaml
index b168432..5ef264a 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,15 +1,15 @@
 name: csslib
-version: 0.11.1-dev
+version: 0.12.0
 author: Polymer.dart Team <web-ui-dev@dartlang.org>
 description: A library for parsing CSS.
 homepage: https://github.com/dart-lang/csslib
 environment:
   sdk: '>=1.1.0 <2.0.0'
 dependencies:
-  args: '>=0.9.0 <0.13.0'
+  args: '>=0.9.0 <0.14.0'
   logging: '>=0.9.0 <0.10.0'
   path: '>=0.9.0 <2.0.0'
   source_span: '>=1.0.0 <2.0.0'
 dev_dependencies:
-  browser: '>=0.9.0 <0.10.0'
-  unittest: '>=0.9.0 <0.10.0'
+  browser: '>=0.9.0 <0.11.0'
+  unittest: '>=0.9.0 <0.12.0'
diff --git a/test/big_1_test.dart b/test/big_1_test.dart
index ed1c271..5f38ba0 100644
--- a/test/big_1_test.dart
+++ b/test/big_1_test.dart
@@ -7,8 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-var options = ['--warnings_as_errors', '--no-colors', 'memory'];
-
 compilePolyfillAndValidate(String input, String generated) {
   var errors = [];
   var stylesheet = polyFillCompileCss(input, errors: errors, opts: options);
diff --git a/test/compiler_test.dart b/test/compiler_test.dart
index a7cdf4a..5d5dcf5 100644
--- a/test/compiler_test.dart
+++ b/test/compiler_test.dart
@@ -584,8 +584,7 @@
 div:nth-child(2n) { color : red; }
 ''';
 
-  var stylesheet =
-      parseCss(input, errors: errors, opts: ['--no-colors', 'memory']);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -655,8 +654,7 @@
       '*:hover { font-weight: bold; }'
       ':nth-child(odd) { color: blue; }'
       '}';
-  var stylesheet =
-      parseCss(input, errors: errors, opts: ['--no-colors', 'memory']);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
diff --git a/test/declaration_test.dart b/test/declaration_test.dart
index 0cf012c..f01b804 100644
--- a/test/declaration_test.dart
+++ b/test/declaration_test.dart
@@ -7,9 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-/** CSS compiler options no checks in in memory style sheet. */
-List options = ['--no-colors', 'memory'];
-
 void testSimpleTerms() {
   var errors = [];
   final String input = r'''
@@ -236,7 +233,7 @@
   transform: rotatez(20turn);
 }''';
 
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -339,7 +336,7 @@
 }
 }''';
 
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
   expect(prettyPrint(stylesheet), generated);
@@ -384,7 +381,7 @@
 }
 }''';
 
-  stylesheet = parseCss(input, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -401,7 +398,7 @@
       'AND (min-device-height:2000px), screen (another:100px) {\n'
       'html {\n  font-size: 10em;\n}\n}';
 
-  stylesheet = parseCss(input, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -418,7 +415,7 @@
       '(min-device-height:2000px), screen (another:100px) {\n'
       'html {\n  font-size: 10em;\n}\n}';
 
-  stylesheet = parseCss(input, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -429,7 +426,7 @@
   generated =
       '@import "test.css" ONLY screen, NOT print (min-device-width:4000px);';
 
-  stylesheet = parseCss(input, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -450,7 +447,7 @@
   src: url("fonts/BBCBengali.ttf") format("opentype");
   unicode-range: U+0A-FF, U+980-9FF, U+????, U+3???;
 }''';
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -468,7 +465,7 @@
   src: url("http://example.com/fonts/Gentium.ttf");
 }''';
 
-  stylesheet = parseCss(input1, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input1, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -485,7 +482,7 @@
       'format("woff"), url("basic-sans-serif.ttf") '
       'format("opentype"), local(Gentium Bold);\n}';
 
-  stylesheet = parseCss(input2, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -504,7 +501,7 @@
   font-weight: bold;
 }''';
 
-  stylesheet = parseCss(input3, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -521,7 +518,7 @@
   src: local(STIXGeneral), url("/stixfonts/STIXGeneral.otf");
   unicode-range: U+000-49F, U+2000-27FF, U+2900-2BFF, U+1D400-1D7FF;
 }''';
-  stylesheet = parseCss(input4, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input4, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -703,7 +700,7 @@
   color: #00f;
 }''';
 
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -721,7 +718,7 @@
       "(GradientType=0,StartColorStr='#9d8b83', EndColorStr='#847670');\n"
       "}";
 
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -739,7 +736,7 @@
       "         progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);\n"
       "}";
 
-  stylesheet = parseCss(input2, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input2, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -769,7 +766,7 @@
       '      FinishX=0, FinishY=0)  Wave(Add=0, Freq=5, LightStrength=20, \n'
       '      Phase=220, Strength=10);\n}';
 
-  stylesheet = parseCss(input3, errors: errors..clear(), opts: options);
+  stylesheet = parseCss(input3, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -946,19 +943,18 @@
   }
 }''';
 
-  var stylesheet = parseCss(input, errors: errors, opts: options);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
   expect(prettyPrint(stylesheet), generated);
 }
 
 void testHangs() {
-  final optionErrors = ['--no-colors', '--warnings_as_errors', 'memory'];
   var errors = [];
 
   // Bad hexvalue had caused a hang in processTerm.
   final input = r'''#a { color: #ebebeburl(0/IE8+9+); }''';
-  var stylesheet = parseCss(input, errors: errors, opts: optionErrors);
+  var stylesheet = parseCss(input, errors: errors, opts: options);
 
   expect(stylesheet != null, true);
   expect(errors.length, 3, reason: errors.toString());
@@ -994,7 +990,7 @@
   }
 ''';
 
-  stylesheet = parseCss(input2, errors: errors..clear(), opts: optionErrors);
+  stylesheet = parseCss(input2, errors: errors..clear(), opts: options);
 
   expect(stylesheet != null, true);
 
diff --git a/test/extend_test.dart b/test/extend_test.dart
index ed24b35..94d9e7b 100644
--- a/test/extend_test.dart
+++ b/test/extend_test.dart
@@ -7,8 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-var options = ['--warnings_as_errors', '--no-colors', 'memory'];
-
 compileAndValidate(String input, String generated) {
   var errors = [];
   var stylesheet = compileCss(input, errors: errors, opts: options);
diff --git a/test/mixin_test.dart b/test/mixin_test.dart
index 5c5a0fc..937ed44 100644
--- a/test/mixin_test.dart
+++ b/test/mixin_test.dart
@@ -7,8 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-final options = ['--warnings_as_errors', '--no-colors', 'memory'];
-
 compileAndValidate(String input, String generated) {
   var errors = [];
   var stylesheet = compileCss(input, errors: errors, opts: options);
diff --git a/test/nested_test.dart b/test/nested_test.dart
index 2a46da7..db25679 100644
--- a/test/nested_test.dart
+++ b/test/nested_test.dart
@@ -7,11 +7,9 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-List optionsCss = ['--no-colors', 'memory'];
-
 compileAndValidate(String input, String generated) {
   var errors = [];
-  var stylesheet = compileCss(input, errors: errors, opts: optionsCss);
+  var stylesheet = compileCss(input, errors: errors, opts: simpleOptions);
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
   expect(prettyPrint(stylesheet), generated);
diff --git a/test/testing.dart b/test/testing.dart
index b9a6738..df65532 100644
--- a/test/testing.dart
+++ b/test/testing.dart
@@ -8,6 +8,21 @@
 import 'package:csslib/parser.dart';
 import 'package:csslib/visitor.dart';
 import 'package:csslib/src/messages.dart';
+import 'package:csslib/src/options.dart';
+
+export 'package:csslib/src/options.dart';
+
+const simpleOptionsWithCheckedAndWarningsAsErrors = const PreprocessorOptions(
+    useColors: false,
+    checked: true,
+    warningsAsErrors: true,
+    inputFile: 'memory');
+
+const simpleOptions =
+    const PreprocessorOptions(useColors: false, inputFile: 'memory');
+
+const options = const PreprocessorOptions(
+    useColors: false, warningsAsErrors: true, inputFile: 'memory');
 
 void useMockMessages() {
   messages = new Messages(printHandler: (message) {});
@@ -19,10 +34,10 @@
  * tests (by default) will ensure that the CSS is really valid.
  */
 StyleSheet parseCss(String cssInput,
-    {List<Message> errors, List<String> opts}) => parse(cssInput,
+    {List<Message> errors, PreprocessorOptions opts}) => parse(cssInput,
         errors: errors,
         options: opts == null
-            ? ['--no-colors', '--checked', '--warnings_as_errors', 'memory']
+            ? simpleOptionsWithCheckedAndWarningsAsErrors
             : opts);
 
 /**
@@ -30,17 +45,18 @@
  * CSS will allow any property/value pairs regardless of validity; all of our
  * tests (by default) will ensure that the CSS is really valid.
  */
-StyleSheet compileCss(String cssInput, {List<Message> errors, List<String> opts,
-    bool polyfill: false, List<StyleSheet> includes: null}) => compile(cssInput,
+StyleSheet compileCss(String cssInput, {List<Message> errors,
+    PreprocessorOptions opts, bool polyfill: false,
+    List<StyleSheet> includes: null}) => compile(cssInput,
         errors: errors,
         options: opts == null
-            ? ['--no-colors', '--checked', '--warnings_as_errors', 'memory']
+            ? simpleOptionsWithCheckedAndWarningsAsErrors
             : opts,
         polyfill: polyfill,
         includes: includes);
 
 StyleSheet polyFillCompileCss(input,
-        {List<Message> errors, List<String> opts}) =>
+        {List<Message> errors, PreprocessorOptions opts}) =>
     compileCss(input, errors: errors, polyfill: true, opts: opts);
 
 /** CSS emitter walks the style sheet tree and emits readable CSS. */
diff --git a/test/var_test.dart b/test/var_test.dart
index 17349b8..657459d 100644
--- a/test/var_test.dart
+++ b/test/var_test.dart
@@ -7,8 +7,6 @@
 import 'package:unittest/unittest.dart';
 import 'testing.dart';
 
-List options = ['--no-colors', '--warnings_as_errors', 'memory'];
-
 compileAndValidate(String input, String generated) {
   var errors = [];
   var stylesheet = compileCss(input, errors: errors, opts: options);
@@ -644,8 +642,7 @@
   color: var(color-foreground);
 }''';
 
-  var stylesheet =
-      parseCss(input, errors: errors, opts: ['--no-colors', 'memory']);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -670,8 +667,7 @@
   color: var(color-foreground);
 }''';
 
-  stylesheet =
-      parseCss(input, errors: errors..clear(), opts: ['--no-colors', 'memory']);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -699,8 +695,7 @@
   color: var(color-foreground);
 }''';
 
-  var stylesheet =
-      parseCss(input, errors: errors, opts: ['--no-colors', 'memory']);
+  var stylesheet = parseCss(input, errors: errors, opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
@@ -725,8 +720,7 @@
   color: var(color-foreground);
 }''';
 
-  stylesheet =
-      parseCss(input, errors: errors..clear(), opts: ['--no-colors', 'memory']);
+  stylesheet = parseCss(input, errors: errors..clear(), opts: simpleOptions);
 
   expect(stylesheet != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
diff --git a/test/visitor_test.dart b/test/visitor_test.dart
index 1777748..e7102de 100644
--- a/test/visitor_test.dart
+++ b/test/visitor_test.dart
@@ -49,7 +49,7 @@
       div.hello { font: arial; }
     ''';
 
-  s = parseCss(in1, errors: errors..clear(), opts: ['--no-colors', 'memory']);
+  s = parseCss(in1, errors: errors..clear(), opts: simpleOptions);
 
   expect(s != null, true);
   expect(errors.isEmpty, true, reason: errors.toString());
