Index: abp/filters/diff_script.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/abp/filters/diff_script.py
@@ -0,0 +1,62 @@
+# This file is part of Adblock Plus <https://adblockplus.org/>,
+# Copyright (C) 2006-present eyeo GmbH
+#
+# Adblock Plus is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License version 3 as
+# published by the Free Software Foundation.
+#
+# Adblock Plus is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with Adblock Plus.  If not, see <http://www.gnu.org/licenses/>.
+
+"""Command line script for rendering Adblock Plus filter list diffs."""
+
+import argparse
+import io
+import sys
+
+from collections import namedtuple
+
+from .sources import NotFound
+from .renderer import render_diff
+__all__ = ['main']
+
+
+def parse_args():
+    parser = argparse.ArgumentParser(description='Render a filter list diff.')
+    parser.add_argument(
+        'base', help='the older filter list that needs to be updated',
+        default='-', nargs='?')
+    parser.add_argument(
+        'latest', help='the most recent version of the filter list',
+        default='-', nargs='?')
+    parser.add_argument(
+        'outfile', help='output file for filter list diff',
+        default='-', nargs='?')
+    return parser.parse_args()
+
+
+def main(args_in=None):
+    """Entry point for the diff rendering script (diffrender)."""
+    if args_in:
+        Parse = namedtuple('Test', 'base, latest, outfile')
+        args = Parse(args_in['base'], args_in['latest'], args_in['outfile'])
+    else:
+        args = parse_args()
+
+    with io.open(args.base, 'r') as base, io.open(args.latest, 'r') as latest:
+        try:
+            lines = render_diff(base, latest)
+            if args.outfile == '-':
+                for line in lines:
+                    sys.stdout.write(line + '\n')
+            else:
+                with io.open(args.outfile, 'w', encoding='utf-8') as out_fp:
+                    for line in lines:
+                        out_fp.write(line + '\n')
+        except NotFound as exc:
+            sys.exit(exc)
