Skip to content



Drush 11 and prior required generators to define a file. This is no longer used with Drush 12+ generators. See create() method for injecting dependencies.

Generators jump start your coding by building all the boring boilerplate code for you. After running the generate command, you have a guide for where to insert your custom logic.

Drush's generators reuse classes provided by the excellent Drupal Code Generator project. See its Commands directory for inspiration.

Writing Custom Generators

Drupal modules may supply their own Generators, just like they can supply Commands.

See Woot module, which Drush uses for testing. Specifically,

  1. Write a class similar to ExampleGenerator. Implement your custom logic in the generate() method. Typically this class is placed under the src/Generators directory.
  2. Add a .twig file to the same directory. This template specifies what gets output from the generator.

Auto-discovered Generators (PSR4)

Generators that don't ship inside Drupal modules are called global generators. For example see CustomDrushGenerator. In general, it is better to use modules to carry your generators. If you still prefer using a global generator, please note:

  1. The generator class should be PSR4 auto-loadable.
  2. The generator class namespace, relative to base namespace, should be Drush\Generators. For instance, if a Drush generator provider third party library maps this PSR4 autoload entry:
    "autoload": {
      "psr-4": {
        "My\\Custom\\Library\\": "src"
    then the Drush global generator class namespace should be My\Custom\Library\Drush\Generators and the class file should be located under the src/Drush/Generators directory.
  3. The filename must have a name like FooGenerator.php. The prefix Foo can be whatever string you want. The file must end in Generator.php.

Site-wide Generators

Sitewide generators (as opposed to auto-discovered PSR4) have a namespace that starts with \Drush\Generators, the directory above Generators must be one of: 1. A Folder listed in the --include option. include may be provided via config or via CLI. 1. ../drush, /drush or /sites/all/drush. These paths are relative to Drupal root.

Last update: June 2, 2023