Here are informations about how you can write plugins.



When you want to extend the runner, but you don't want to add a dependency to your dub.json file, you can write a plugin. This is a way of extending the test run with external libraries that are published on

To attach a plugin to your run, run:

trial -p plugin1,plugin2,plugin3...

Example plugin

module trialcustom.plugin;

import trial.interfaces;

/// Add your listeners to the Trial lifecycle
static this() {
  LifeCycleListeners.instance.add(new TrialCustomPlugin());

/// Implement your listeners
class RazerReporter : ITestCaseLifecycleListener, ILifecycleListener {

If you want to see a complete list of the listeners that you can implement, check the interfaces api page.

Module names

Your plugin can have - and : in the name. The : will add as a dependency a subpackage. In order to have your module initialized, Trial will import your module in the generated main file. For example:

trial -p my-plugin:core

will download the core subpackage from my-plugin package, and it will import myplugin.core in the main file.