2.0 (21-02-2016)

Splash 2.0 uses Qt 5.5.1 instead of Qt 4; it means the rendering engine now supports more HTML5 features and is more modern overall. Also, the official Docker image now uses Python 3 instead of Python 2. This work is largely done by Tarashish Mishra as a Google Summer of Code 2015 project.

Splash 2.0 release introduces other cool new features:

  • many Splash HTTP UI improvements;
  • better support for binary data;
  • built-in json and base64 libraries;
  • more control for result serialization (support for JSON arrays and raw bytes);
  • it is now possible to turn Private mode OFF at startup using command-line option or at runtime using splash.private_mode_enabled attribute;
  • _ping endpoint is added;
  • cookie handling is fixed;
  • downloader efficiency is improved;
  • request processing is stopped when client disconnects;
  • logging inside callbacks now uses proper verbosity;
  • sandbox memory limit for user objects is increased to 50MB;
  • some sandboxing issues are fixed;
  • splash:evaljs and splash:jsfunc results are sanitized better;
  • it is possible to pass arguments when starting Splash-Jupyter - it means now you can get a browser window for splash-jupyter when it is executed from docker;
  • proxy authentication is fixed;
  • logging improvements: logs now contain request arguments in JSON format; errors are logged;

There are backwards-incompatible changes to Splash Scripting: previously, different Splash methods were returning/receiving inconsistent response and request objects. For example, splash:http_get response was not in the same format as response received by splash:on_response callbacks. Splash 2.0 uses Request and Response objects consistently. Unfortunately this requires changes to existing user scripts:

  • replace resp = splash:http_get(...) and resp = splash:http_post(...) with resp = splash:http_get(...).info and resp = splash:http_post(...).info. Client code also may need to be changed: the default encoding of info['content']['text'] is now base64. If you used resp.content.text consider switching to response.body.
  • response object received by splash:on_response_headers and splash:on_response callbacks is changed: instead of response.request write

Serialization of JS objects in splash:jsfunc, splash:evaljs and splash:wait_for_resume is changed: circular objects are no longer returned, Splash doesn’t try to serialize DOM elements, and error messages are changed.

Splash no longer supports QT-based disk cache; it was disable by default and it usage was discouraged since Splash 1.0, in Splash 2.0 --cache command-line option is removed. For HTTP cache there are better options like Squid.

Another backwards-incompatible change is that Splash-as-a-proxy feature is removed. Please use regular HTTP API instead of this proxy interface. Of course, Splash will still support using proxies to make requests, these are two different features.

1.8 (2015-09-29)

New features:

Bug fixes and improvements:

  • fixed an issue: proxies were not applied for POST requests;
  • improved argument validation for various methods;
  • more detailed logs;
  • it is now possible to load a combatibility shim for window.localStorage;
  • code coverage integration;
  • improved Splash-Jupyter tests;
  • Splash-Jupyter is upgraded to Jupyter 4.0.

1.7 (2015-08-06)

New features:

Other changes:

  • HTTP error detection is improved;
  • MS fonts are added to the Docker image for better rendering quality;
  • Chinese fonts are added to the Docker image to enable rendering of Chinese websites;
  • validation of timeout and wait arguments is improved;
  • documentation: grammar is fixed in the tutorial;
  • assorted documentation improvements and code cleanups;
  • splash:set_images_enabled method is deprecated.

1.6 (2015-05-15)

The main new feature in Splash 1.6 is splash:on_request function which allows to process individual outgoing requests: log, abort, change them.

Other improvements:

  • a new _gc endpoint which allows to clear QWebKit caches;
  • Docker images are updated with more recent package versions;
  • HTTP arguments validation is improved;
  • serving Splash UI under HTTPS is fixed.
  • documentation improvements and typo fixes.

1.5 (2015-03-03)

In this release we introduce Splash-Jupyter - a web-based IDE for Splash Lua scripts with syntax highlighting, autocompletion and a connected live browser window. It is implemented as a kernel for Jupyter (IPython).

Docker images for Splash 1.5 are optimized - download size is much smaller than in previous releases.

Other changes:

  • splash:go() returned incorrect result after an unsuccessful splash:go() call - this is fixed;
  • Lua main function can now return multiple results;
  • there are testing improvements and internal cleanups.

1.4 (2015-02-10)

This release provides faster and more robust screenshot rendering, many improvements in Splash scripting engine and other improvements like better cookie handling.

From version 1.4 Splash requires Pillow (built with PNG support) to work.

There are backwards-incompatible changes in Splash scripts:

To upgrade check all splash:runjs() usages: if the returned result is used then replace splash:runjs() with splash:evaljs().

viewport=full argument is deprecated; use render_all=1.

New scripting features:

Other improvements:

  • –max-timeout option can be passed to Splash at startup to increase or decrease maximum allowed timeout value;
  • cookies are no longer shared between requests;
  • PNG rendering becomes more efficient: less CPU is spent on compression. The downside is that the returned PNG images become 10-15% larger;
  • there is an option (scale_method=vector) to resize images while painting to avoid pixel-based resize step - it can make taking a screenshot much faster on image-light webpages (up to several times faster);
  • when ‘height’ is set and image is downscaled the rendering is more efficient because Splash now avoids rendering unnecessary parts;
  • /debug endpoint tracks more objects;
  • testing setup improvements;
  • application/json POST requests handle invalid JSON better;
  • undocumented splash:go_and_wait() and splash:_wait_restart_on_redirects() methods are removed (they are moved to tests);
  • Lua sandbox is cleaned up;
  • long log messages from Lua are truncated in logs;
  • more detailed error info is logged;
  • example script in Splash UI is simplified;
  • stress tests now include PNG rendering benchmark.

Bug fixes:

  • default viewport size and window geometry are now set to 1024x768; this fixes PNG screenshots with viewport=full;
  • PNG rendering is fixed for huge viewports;
  • splash:go() argument validation is improved;
  • timer is properly deleted when an exception is raised in an errback;
  • redirects handling for baseurl requests is fixed;
  • reply is deleted only once when baseurl is used.

1.3.1 (2014-12-13)

This release fixes packaging issues with Splash 1.3.

1.3 (2014-12-04)

This release introduces an experimental scripting support.

Other changes:

  • manhole is disabled by default in Debian package;
  • more objects are tracked in /debug endpoint;
  • “history” in render.json now includes “queryString” keys; it makes the output compatible with HAR entry format;
  • logging improvements;
  • improved timer cancellation.

1.2.1 (2014-10-16)

  • Dockerfile base image is downgraded to Ubuntu 12.04 to fix random crashes;
  • Debian/buildbot config is fixed to make Splash UI available when deployed from deb;
  • Qt / PyQt / sip / WebKit / Twisted version numbers are logged at startup.

1.2 (2014-10-14)

  • All Splash rendering endpoints now accept Content-Type: application/json POST requests with JSON-encoded rendering options as an alternative to using GET parameters;
  • headers parameter allows to set HTTP headers (including user-agent) for all endpoints - previously it was possible only in proxy mode;
  • js_source parameter allows to execute JS in page context without application/javascript POST requests;
  • testing suite is switched to pytest, test running can now be parallelized;
  • viewport size changes are logged;
  • /debug endpoint provides leak info for more classes;
  • Content-Type header parsing is less strict;
  • documentation improvements;
  • various internal code cleanups.

1.1 (2014-10-10)

  • An UI is added - it allows to quickly check Splash features.
  • Splash can now return requests/responses information in HAR format. See render.har endpoint and har argument of render.json endpoint. A simpler history argument is also available. With HAR support it is possible to get timings for various events, HTTP status code of the responses, HTTP headers, redirect chains, etc.
  • Processing of related resources is stopped earlier and more robustly in case of timeouts.
  • wait parameter changed its meaning: waiting now restarts after each redirect.
  • Dockerfile is improved: image is updated to Ubuntu 14.04; logs are shown immediately; it becomes possible to pass additional options to Splash and customize proxy/js/filter profiles; adblock filters are supported in Docker; versions of Python dependencies are pinned; Splash is started directly (without supervisord).
  • Splash now tries to start Xvfb automatically - no need for xvfb-run. This feature requires xvfbwrapper Python package to be installed.
  • Debian package improvements: Xvfb viewport matches default Splash viewport, it is possible to change Splash option using SPLASH_OPTS environment variable.
  • Documentation is improved: finally, there are some install instructions.
  • Logging: verbosity level of several logging events are changed; data-uris are truncated in logs.
  • Various cleanups and testing improvements.

1.0 (2014-07-28)

Initial release.