v0.12.24 (2014-09-30)

Bug Fixes

  • Wrap url.parse to always return an object for query property (72452e9f, closes #1182)

0.12.23 (2014-08-28)

Bug Fixes

  • file_list: Incorrect response after remove and add file (0dbc0201)
  • preprocessor: Throw error if can't open file (bb4edde9)


  • init: install coffee-script automatically (e876db63, closes #1152)

0.12.22 (2014-08-19)

Bug Fixes

  • preprocessor: treat *.tgz, *.tbz2, *.txz & *.xz as binary (7b642449)

0.12.21 (2014-08-05)

Bug Fixes

  • web-server: cache static files (eb5bd53f)

0.12.20 (2014-08-05)

Bug Fixes

  • config: #1113 Watching is not working properly on linux (c91ffbc0, closes #1113)
  • preprocessor:

0.12.19 (2014-07-26)

Bug Fixes

  • proxy: More useful proxyError log message (96640a75)

0.12.18 (2014-07-25)

Bug Fixes

  • watcher: handle paths on Windows (6164d869)

0.12.17 (2014-07-11)

Bug Fixes

  • logging: Summarize SKIPPED tests in debug.html. Before: hundreds of SKIPPING lines in con (a01100f5, closes #1111)
  • server: Force clients disconnect on Windows (28239f42, closes #1109)
  • travis_ci: converted node versions as string (25ee6fc9)


  • serve ePub as binary files (82ed0c6e)
  • preprocessor: add ‘mp3’ and ‘ogg’ as binary formats to avoid media corruption in the browser. (65a0767e)

v0.12.16 (2014-05-10)

Bug Fixes

  • launcher: cancel kill timeout when process exits cleanly (bd662744, closes #946)

v0.12.15 (2014-05-08)

Bug Fixes

  • server: don't wait for socket.io store expiration timeout (cd30a422)

v0.12.14 (2014-04-27)

Bug Fixes

  • debug.html: Added whitespace after ‘SKIPPED’ (218ee859)

v0.12.13 (2014-04-27)

Bug Fixes

  • preprocessor: serve NaCl binaries (1cc6a1e3)

v0.12.12 (2014-04-25)

Bug Fixes

  • server: properly close flash transport (de89cd33)

v0.12.11 (2014-04-25)

Bug Fixes

  • preprocessor: remove ts from binary extensions (82698523)

v0.12.10 (2014-04-23)

Bug Fixes

  • server: clear web server close timeout on clean close (34123fed)

v0.12.9 (2014-04-14)

Bug Fixes

  • web-server: strip scheme, host and port (06a0da09)

v0.12.8 (2014-04-14)

Bug Fixes

  • web-server: inline the config, when serving debug.html (1eb36430)

v0.12.7 (2014-04-14)

Bug Fixes

  • don't crash/terminate upon errors within chokidar (2c389311)
  • preprocessor: consider SVG files as text files, not binary files (ff288036, closes #1026)

v0.12.6 (2014-04-09)

v0.12.5 (2014-04-08)

Bug Fixes

  • reporters: format fix for console log (d2d1377d, closes #934)

v0.12.4 (2014-04-06)

Bug Fixes

v0.12.3 (2014-04-01)

Bug Fixes

  • web-server: implement a timeout on webServer.close() (fe3dca78, closes #952)


  • web-server: run karma using multiple emulation modes, #631 (b9a2930a, closes #936)

v0.12.2 (2014-03-30)

v0.12.1 (2014-03-16)


  • preprocessor: Adding the dat file extension as a recognised binary. (be923571)

v0.12.0 (2014-03-10)

Bug Fixes

  • serving binary files (8a30cf55, closes #864, #885)
  • config:
    • fail if client.args is set to a non array (fe4eaec0)
    • allow CoffeeScript 1.7 to be used (a1583dec)
  • runner: Karma hangs when file paths have \u in them #924 (1199fc4d, closes #924)
  • web-server:
    • detach listeners after running (3baa8e19)
    • close webserver after running (f9dee468)


  • remove dependency on coffee-script (af2d0e72)
  • config: better error when Coffee/Live Script not installed (aca84dc9)
  • init: generate test-main.(js/coffee) for RequireJS projects (85900c93)

v0.11.14 (2014-02-04)


  • preprocessor: allow preprocessor to cancel test run (4d669bf3, closes #550)
  • reporter: use spaces rather than tabs when formatting errors (112becf7)
  • web-server: include html files as (03d7b106)

v0.11.13 (2014-01-19)

Bug Fixes

  • launcher: compatibility with old launchers (df557cec)


  • support LiveScript configuration (88deebe7)

v0.11.12 (2013-12-25)

Bug Fixes

  • client: show error if an adapter is removed (a8b250cf)


v0.11.11 (2013-12-23)

Bug Fixes

  • events: resolve async events without any listener (4e4bba88)
  • launcher:
    • compatibility with Node v0.8 (6a46be96)
    • compatibility with old launchers (ffb74800)

v0.11.10 (2013-12-22)

Bug Fixes

  • completion: add missin --log-level for karma init (1e79eb55)
  • init: clean the terminal if killed (e2aa7497)


  • revert default usePolling to false (e88fbc24)
  • config:
    • remove default preprocessors (coffee, html2js) (ada74d55)
    • Add the abillity to supress the client console. This adds the client config opti (4734962d, closes #744)
    • set default host/port from env vars (0a6a0ee4)
    • Allow tests be to run in a new window instead of iframe (471e3a8a)
  • init:
    • install karma-coffee-preprocessor (29f5cf2d)
    • add nodeunit, nunit frameworks (b4da1a08)
    • install missing plugins (frameworks, launchers) (1ba70a6f)
  • launcher: log how long it took each browser to capture (8dd54369)

Breaking Changes

  • Karma does not ship with any plugin. You need to explicitly install all the plugins you need. karma init can help with this.

Removed plugins that need to be installed explicitly are:

  • karma-jasmine
  • karma-requirejs
  • karma-coffee-preprocessor
  • karma-html2js-preprocessor
  • karma-chrome-launcher
  • karma-firefox-launcher
  • karma-phantomjs-launcher
  • karma-script-launcher (e033d561)

v0.11.9 (2013-12-03)


  • browser: add browserNoActivity configuration (bca8faad)

v0.11.8 (2013-12-03)

Bug Fixes

  • reporter: remove SHAs from stack traces (d7c31f97)
  • web-server: correct caching headers for SHAs (bf27e80b)


  • web-server: disable gzip compression (5ee886bc)

v0.11.7 (2013-12-02)

Bug Fixes

  • keep all sockets in the case an old socket will survive (a5945ebc)
  • reuse browser instance when restarting disconnected browser (1f1a8ebf)
  • client: redirect to redirect_url after all messages are sent (4d05602c)


  • plugins: ignore some non-plugins package names (01776030)

v0.11.6 (2013-12-01)

Bug Fixes

  • config:
    • ignore empty string patterns (66c86a66)
    • apply CLI logger options as soon as we can (16179b08)
  • preprocess: set correct extension for the preprocessed path (c9a64d2f, closes #843)


  • add browserDisconnectTolerance config option (19590e1f)
  • make autoWatch true by default (8454898c)
  • browser: improve logging (71b542ad)
  • client: show error if no adapter is included (7213877f)
  • web-server:

Breaking Changes

  • autoWatch is true by default. If you rely on the default value being false, please set it in karma.conf.js explicitly to false. (8454898c)

v0.11.5 (2013-11-25)

Bug Fixes

  • do not execute already executing browsers (00136cf6)


  • launcher: send SIGKILL if SIGINT does not kill the browser (c0fa49aa)

v0.11.4 (2013-11-21)

Bug Fixes

  • browser: reply “start” event (4fde43de)

v0.11.3 (2013-11-20)

Bug Fixes

  • config: not append empty module if no custom launcher/rep/prep (ee15a4e4)
  • watcher: allow parentheses in a pattern (438eb8dd, closes #728)


  • remove karma binary in favor of karma-cli (c7d46270)
  • config: log if no config file is specified (ce4c5646)

Breaking Changes

  • The karma module does not export karma binary anymore. The recommended way is to have local modules (karma and all the plugins that your project needs) stored in your package.json. You can run that particular Karma by ./node_modules/karma/bin/karma. Or you can have karma-cli installed globally on your system, which enables you to use the karma command.

The global karma command (installed by karma-cli) does look for local version of Karma (including parent directories) first and fall backs to a global one.

The bin/karma binary does not look for any other instances of Karma and just runs the one that it belongs to.


v0.11.2 (2013-11-03)

Bug Fixes

  • config: use polling by default (53978c42)
  • proxy: handle proxied socket.io websocket transport upgrade (fcc2a98f)

v0.11.1 (2013-10-25)

Bug Fixes

  • launcher kill method which was throwing an error if no callback was specified bu (5439f1cb)
  • static: Use full height for the iFrame. Fix based on PR #714. (f95daf3c)
  • watcher:


  • redirect client to “return_url” if specified (6af2c897)
  • config: add usePolling config (18514d63)
  • watcher: ignore initial “add” events (dde1da4c)

v0.11.0 (2013-08-26)

Bug Fixes

  • support reconnecting for manually captured browsers (a8ac6d2d)
  • reporter: print browser stats immediately after it finishes (65202d87)


  • don't wait for all browsers and start executing immediately (8647266f, closes #57)

v0.10.2 (2013-08-21)

Bug Fixes

  • don't mark a browser captured if already being killed/timeouted (21230979, closes #88)


  • sync page unload (disconnect) (ac9b3f01)
  • buffer result messages when polling (c4ad6970)
  • allow browser to reconnect during the test run (cbe2851b, closes #82, #590)

v0.10.1 (2013-08-06)

Bug Fixes

v0.10.0 (2013-08-06)

v0.9.8 (2013-08-05)

Bug Fixes

  • init: install plugin as dev dependency (46b7a402)
  • runner: do not confuse client args with the config file (6f158aba)


  • config: default config can be karma.conf.js or karma.conf.coffee (d4a06f29)
  • runner:

v0.9.7 (2013-07-31)

Bug Fixes

  • init: trim the inputs (b72355cb, closes #663)
  • web-server: correct urlRegex in custom handlers (a641c2c1)


  • basic bash/zsh completion (9dc1cf6a)
  • runner: allow passing changed/added/removed files (b598106d)
  • watcher: make the batching delay configurable (fa139312)

v0.9.6 (2013-07-28)


  • pass command line opts through to browser (00d63d0b)
  • web-server: compress responses (gzip/deflate) (8e8a2d44)

Breaking Changes

  • runnerPort is merged with port if you are using karma run with custom --runer-port, please change that to --port. (ca4c4d88)

v0.9.5 (2013-07-21)

Bug Fixes

  • detect a full page reload, show error and recover (15d80f47, closes #27)
  • better serialization in dump/console.log (fd46365d, closes #640)
  • browsers_change event always has collection as arg (42bf787f)
  • init: generate config with the new syntax (6b27fee5)
  • reporter: prevent throwing exception when null is sent to formatter (3b49c385)
  • watcher: ignore fs.stat errors (74ccc9a8)


v0.9.4 (2013-06-28)

Bug Fixes

  • config:
    • make the config changes backwards compatible (593ad853)
    • better errors if file invalid or does not exist (74b533be)
    • allow parsing the config multiple times (78a7094e)
  • launcher: better errors when loading launchers (504e848c)
  • preprocessor:
    • do not show duplicate warnings (47c641f7)
    • better errors when loading preprocessors (3390a00b)
  • reporter: better errors when loading reporters (c645c060)


  • config: pass the config object rather than a wrapper (d2a3c854)

Breaking Changes

  • please update your karma.conf.js as follows (d2a3c854):
// before:
module.exports = function(karma) {
  karma.configure({port: 123});
  karma.defineLauncher('x', 'Chrome', {
    flags: ['--disable-web-security']
  karma.definePreprocessor('y', 'coffee', {
    bare: false
  karma.defineReporter('z', 'coverage', {
    type: 'html'

// after:
module.exports = function(config) {
    port: 123,
    customLaunchers: {
      'x': {
        base: 'Chrome',
        flags: ['--disable-web-security']
    customPreprocessors: {
      'y': {
        base: 'coffee',
        bare: false
    customReporters: {
      'z': {
        base: 'coverage',
        type: 'html'

v0.9.3 (2013-06-16)

Bug Fixes

  • capturing console.log on IE (fa4b686a, closes #329)
  • config: fix the warning when using old syntax (5e55d797)
  • init: generate correct indentation (5fc17957)
  • launcher:
    • ignore exit code when killing/timeouting (1029bf2d, closes #444)
    • handle ENOENT error, do not retry (7d790b29, closes #452)
  • logger: configure the logger as soon as possible (0607d67c)
  • preprocessor: use graceful-fs to prevent EACCESS errors (279bcab5, closes #566)
  • watcher: watch files that match watched directory (39401175, closes #521)


  • simplify loading plugins using patterns like karma-* (405a5a62)
  • client: capture all console.* log methods (683e6dcb)
  • config:
    • make socket.io transports configurable (bbd5eb86)
    • allow configurable launchers, preprocessors, reporters (76bdac16, closes #317)
    • add warning if old constants are used (7233c5fb)
    • require config as a regular module (a37fd6f7, closes #304)
  • helper: improve useragent detection (eb58768e)
  • init:
  • proxy: add https proxy support (be878dc5)

Breaking Changes

  • Update your karma.conf.js to export a config function (a37fd6f7):
module.exports = function(karma) {
    autoWatch: true,
    // ...

v0.9.2 (2013-04-16)

Bug Fixes

  • better error reporting when loading plugins (d9078a8e)
  • config:
    • Separate ENOENT error handler from others (e49dabe7)
    • ensure basePath is always resolved (2e5c5aaa)


  • allow inlined plugins (3034bcf9)
  • debug: show skipped specs and failure details in the console (42ab936b)

v0.9.1 (2013-04-04)

Bug Fixes

  • init: to not give false warning about missing requirejs (562607a1)


  • ship coffee-preprocessor and requirejs as default plugins (f34e30db)

v0.9.0 (2013-04-03)

Bug Fixes

  • global error handler should propagate errors (dec0c196, closes #368)
  • config:
    • Check if configFilePath is a string. Fixes #447. (98724b6e)
    • do not change urlRoot even if proxied (8c138b50)
  • coverage: always send a result object (62c3c679, closes #365)
  • init:
    • generate plugins and frameworks config (17798d55)
    • fix for failing “testacular init” on Windows (0b5b3853)
  • preprocessor: resolve relative patterns to basePath (c608a9e5, closes #382)
  • runner: send exit code as string (ca75aafd, closes #403)


  • display the version when starting (39617395, closes #391)
  • allow multiple preprocessors (1d17c1aa)
  • allow plugins (125ab4f8)
  • config:
    • always ignore the config file itself (103bc0f8)
    • normalize string preprocessors into an array (4dde1608)
  • web-server: allow custom file handlers and mime types (2df88287)

Breaking Changes

  • reporters, launchers, preprocessors, adapters are separate plugins now, in order to use them, you need to install the npm package (probably add it as a devDependency into your package.json) and load in the karma.conf.js with plugins = ['karma-jasmine', ...]. Karma ships with couple of default plugins (karma-jasmine, karma-chrome-launcher, karma-phantomjs-launcher).

  • frameworks (such as jasmine, mocha, qunit) are configured using frameworks = ['jasmine']; instead of prepending JASMINE_ADAPTER into files.

v0.8.0 (2013-03-18)

Breaking Changes

  • rename the project to “Karma”:
  • whenever you call the “testacular” binary, change it to “karma”, eg. testacular start becomes karma start.
  • if you rely on default name of the config file, change it to karma.conf.js.
  • if you access __testacular__ object in the client code, change it to __karma__, eg. window.__testacular__.files becomes window.__karma__.files. (026a20f7)

v0.6.1 (2013-03-18)

Bug Fixes

  • config: do not change urlRoot even if proxied (1be1ae1d)
  • coverage: always send a result object (2d210aa6, closes #365)
  • reporter.teamcity: report spec names and proper browser name (c8f6f5ea)

v0.6.0 (2013-02-22)

v0.5.11 (2013-02-21)

Bug Fixes

  • adapter.requirejs: do not configure baseUrl automatically (63f3f409, closes #291)
  • init: add missing browsers (Opera, IE) (f39e5645)
  • reporter.junit: Add browser log output to JUnit.xml (f108799a, closes #302)


  • add Teamcity reporter (03e700ae)
  • adapter.jasmine: remove only last failed specs anti-feature (435bf72c, closes #148)
  • config: allow empty config file when called programmatically (f3d77424, closes #358)

v0.5.10 (2013-02-14)

Bug Fixes

  • init: fix the logger configuration (481dc3fd, closes #340)
  • proxy: fix crashing proxy when browser hangs connection (1c78a01a)


  • set urlRoot to /karma/ when proxying the root (8b4fd64d)
  • adapter.requirejs: normalize paths before appending timestamp (94889e7d)
  • update dependencies to the latest (93f96278, e34d8834)

v0.5.9 (2013-02-06)

Bug Fixes

  • adapter.requirejs: show error if no timestamp defined for a file (59dbdbd1)
  • init: fix logger configuration (557922d7)
  • reporter: remove newline from base reporter browser dump (dfae18b6, closes #297)
  • reporter.dots: only add newline to message when needed (dbe1155c


  • add “debug” button to easily open debugging window (da85aab9)
  • config: support running on a custom hostname (b8c5fe85)
  • reporter.junit: add a ‘skipped’ tag for skipped testcases (6286406e, closes #321)


  • Fix #283
  • Suppress global leak for istanbul
  • Fix growl reporter to work with testacular run
  • Upgrade jasmine to 1.3.1
  • Fix file sorting
  • Fix #265
  • Support for more mime-types on served static files
  • Fix opening Chrome on Windows
  • Upgrade growly to 1.1.0


  • Support code coverage for qunit.
  • Rename port-runner option in cli to runner-port
  • Fix proxy handler (when no proxy defined)
  • Fix #65


  • Growl reporter !
  • Batch changes (eg. git checkout causes only single run now)
  • Handle uncaught errors and disconnect all browsers
  • Global binary prefers local versions


  • Add QUnit adapter
  • Report console.log()


  • Fix PhantomJS launcher
  • Fix html2js preprocessor
  • NG scenario adapter: show html output


  • Add code coverage !


  • Init: ask about using Require.js


  • Support for Require.js
  • Fix testacular init basePath


  • Add preprocessor for LiveScript
  • Fix JUnit reporter
  • Enable process global in config file
  • Add OS name in the browser name
  • NG scenario adapter: hide other outputs to make it faster
  • Allow config to be written in CoffeeScript
  • Allow espaced characters in served urls

v0.4.0 (stable)


  • Allow calling run() pragmatically from JS


  • Fix runner to wait for stdout, stderr
  • Make routing proxy always changeOrigin


  • Fix angular-scenario adapter + junit reporter
  • Use flash socket if web socket not available


  • Retry starting a browser if it does not capture
  • Update mocha to 1.5.0
  • Handle mocha's xit


  • Kill browsers that don't capture in captureTimeout ms
  • Abort build if any browser fails to capture
  • Allow multiple profiles of Firefox


  • Remove Travis hack
  • Fix Safari launcher


  • Remove custom launcher (constructor)
  • Launcher - use random id to allow multiple instances of the same browser
  • Fix Firefox launcher (creating profile)
  • Fix killing browsers on Linux and Windows


  • Fix opera launcher to create new prefs with disabling all pop-ups


  • Change “reporter” config to “reporters”
  • Allow multiple reporters
  • Fix angular-scenario adapter to report proper description
  • Add JUnit xml reporter
  • Fix loading files from multiple drives on Windows
  • Fix angular-scenario adapter to report total number of tests


  • Allow proxying files, not only directories


  • Disable autoWatch if singleRun
  • Add custom script browser launcher
  • Fix cleaning temp folders


  • Run tests on start (if watching enabled)
  • Add launcher for IE8, IE9


  • Change browser binaries on linux to relative
  • Add report-slower-than to CLI options
  • Fix PhantomJS binary on Travis CI

v0.2.0 (stable)


  • Launch Canary with crankshaft disabled
  • Make the captured page nicer


  • Fix jasmine memory leaks
  • support __filename and __dirname in config files


  • Report slow tests (add reportSlowerThan config option)
  • Report time in minutes if it's over 60 seconds
  • Mocha adapter: add ability to fail during beforeEach/afterEach hooks
  • Mocha adapter: add dump()
  • NG scenario adapter: failure includes step name
  • Redirect /urlRoot to /urlRoot/
  • Fix serving with urlRoot


  • Adapter for AngularJS scenario runner
  • Allow serving Testacular from a subpath
  • Fix race condition in testacular run
  • Make testacular one binary (remove testacular-run, use testacular run)
  • Add support for proxies
  • Init script for generating config files (testacular init)
  • Start Firefox without custom profile if it fails
  • Preserve order of watched paths for easier debugging
  • Change default port to 9876
  • Require node v0.8.4+


  • Fix race condition in manually triggered run
  • Fix autoWatch config


  • Mocha adapter
  • Fix watching/resolving on Windows
  • Allow glob patterns
  • Watch new files
  • Watch removed files
  • Remove unused config (autoWatchInterval)


  • Remove absolute paths from urls (fixes Windows issue with C:\)
  • Add browser launcher for PhantomJS
  • Fix some more windows issues


  • Allow require() inside config file
  • Allow custom browser launcher
  • Add browser launcher for Opera, Safari
  • Ignore signals on windows (not supported yet)


  • Single run mode (capture browsers, run tests, exit)
  • Start browser automatically (chrome, canary, firefox)
  • Allow loading external files (urls)


  • Allow console in config
  • Warning if pattern does not match any file


  • Add timing (total / net - per specs)
  • Dots reporter - wrap at 80


  • Add DOTS reporter
  • Add no-colors option for reporters
  • Fix web server to expose only specified files


  • Proper exit code for runner
  • Dynamic port asigning (if port already in use)
  • Add log-leve, log-colors cli arguments + better --help
  • Fix some IE errors (indexOf, forEach fallbacks)


  • Allow overriding configuration by cli arguments (+ --version, --help)
  • Persuade IE8 to not cache context.html
  • Exit runner if no captured browser
  • Fix delayed execution (streaming to runner)
  • Complete run if browser disconnects
  • Ignore results from previous run (after server reconnecting)
  • Server disconnects - cancel execution, clear browser info


  • Rename to Testacular


  • Better debug mode (no caching, no timestamps)
  • Make dump() a bit better
  • Disconnect browsers on SIGTERM (kill, killall default)


  • Fix memory (some :-D) leaks
  • Add dump support
  • Add runner.html


  • Progress bar reporting
  • Improve error formatting
  • Add Jasmine lib (with iit, ddescribe)
  • Reconnect client each 2sec, remove exponential growing


  • Jasmine adapter: ignore last failed filter in exclusive mode
  • Jasmine adapter: add build (no global space pollution)


  • Run only last failed tests (jasmine adapter)


  • Initial version with only very basic features