Drupal Console is a new shiny thing in Drupal - a Command Line Interface (CLI) built for Drupal 8, similar to Drush, used to do tasks like rebuild caches, install modules, and generate boilerplate code for module development. It's the latter that I'm focusing on at the moment while I learn Drupal 8.
Create a custom module
So to create my first generated module I need to do the following command:
drupal generate:module
This takes me through a few questions to answer before generating the files and then I'm left with my new module folder and the files:
- module_name.info.yml
- module_name.module
Next I need to install the module with the command:
drupal module:install module_name
Create a custom page
Drupal 8 uses routes and controllers to display custom pages. That means you need to have a routing.yml file that handles routing (this replaces hook_menu() used in Drupal 7), and a controller class that handles the code to display the page (this replaces the page callback function used in Drupal 7). The controller class uses the PSR-4 naming standard so it needs to be inside a specific directory structure. Drupal Console handles all of this for us automagically. So to create a 'hello' page we do the command:
drupal generate:controller
Again I'm asked a series of questions:
Enter the module name: module_name
Enter the Controller class name: HelloController
Enter the Controller method title (leave empty and press enter when done): Hello Controller
Enter the action method name: hello
Enter the route path: /hello
Enter the Controller method title (leave empty and press enter when done): (empty)
Do you want to generate a unit test class (yes/no): no
Do you want to load services from the container (yes/no): no
Do you confirm generation? (yes/no): yes
And in my module I can now see the module_name.routing.yml file with the controller class generated in the correct directory structure

Although I'm just scratching the surface of Drupal Console, I can already see that this is going to save me a lot of time when developing in Drupal 8.
Note: Sometimes I'd have a problem using Drupal Console and get the error Call to undefined method escapeTrailingBackslash(). The fix is here.
Drupal Console Commands
| Drupal Console Command | Details |
|---|---|
| about | Display basic information about Drupal Console project |
| chain | Chain command execution |
| check | System requirement checker |
| help | Displays help for a command |
| init | Copy configuration files to user home directory. |
| list | Lists all available commands |
| self-update | Update project to the latest version. |
| server | Runs PHP built-in web server |
| breakpoints | |
| breakpoints:debug | Displays breakpoints available in application |
| cache | |
| cache:context:debug | Displays current cache context for the application. |
| cache:rebuild | Rebuild and clear all site caches. |
| chain | |
| chain:debug | List available chain files. |
| config | |
| config:debug | Show the current configuration. |
| config:delete | Delete configuration |
| config:diff | Ouput configuration items that are different in active configuration compared with a directory. |
| config:edit | Edit the selected configuration. |
| config:export | Export current application configuration. |
| config:export:content:type | Export a specific content type and their fields. |
| config:export:view | Export a view in YAML format inside a provided module to reuse in other website. |
| config:import | Import configuration to current application. |
| config:import:single | Import the selected configuration. |
| config:override | Override config value in active configuration. |
| config:settings:debug | Displays current key:value on settings file. |
| container | |
| container:debug | Displays current services for an application. |
| create | |
| create:comments | Create dummy comments for your Drupal 8 application. |
| create:nodes | Create dummy nodes for your Drupal 8 application. |
| create:terms | Create dummy terms for your Drupal 8 application. |
| create:users | Create dummy users for your Drupal 8 application. |
| create:vocabularies | Create dummy vocabularies for your Drupal 8 application. |
| cron | |
| cron:debug | List of modules implementing a cron |
| cron:execute | Execute cron implementations by module or execute all crons |
| cron:release | Release cron system lock to run cron again |
| database | |
| database:client | Launch a DB client if it's available |
| database:connect | Shows DB connection |
| database:drop | Drop all tables in a given database. |
| database:dump | Dump structure and contents of a database |
| database:log:clear | Remove events from DBLog table, filters are available |
| database:log:debug | Display current log events for the application |
| database:restore | Restore structure and contents of a database. |
| database:table:debug | Show all tables in a given database. |
| devel | |
| devel:dumper | Change the devel dumper plugin |
| event | |
| event:debug | Display current events |
| generate | |
| generate:authentication:provider | Generate an Authentication Provider |
| generate:breakpoint | Generate breakpoint |
| generate:command | Generate commands for the console. |
| generate:controller | Generate & Register a controller |
| generate:doc:cheatsheet | Generate a printable cheatsheet for Commands |
| generate:doc:dash | Generate the DrupalConsole.docset package for Dash |
| generate:doc:data | Generate documentations for Commands. |
| generate:doc:gitbook | Generate documentations for Commands |
| generate:entity:bundle | Generate a new content type (node / entity bundle) |
| generate:entity:config | Generate a new config entity |
| generate:entity:content | Generate a new content entity |
| generate:event:subscriber | Generate an event subscriber |
| generate:form | Generate a new "FormBase" |
| generate:form:alter | Generate an implementation of hook_form_alter() or hook_form_FORM_ID_alter |
| generate:form:config | Generate a new "ConfigFormBase" |
| generate:help | Generate an implementation of hook_help() |
| generate:module | Generate a module. |
| generate:module:file | Generate a .module file |
| generate:permissions | Generate module permissions |
| generate:plugin:block | Generate a plugin block |
| generate:plugin:ckeditorbutton | Generate CKEditor button plugin. |
| generate:plugin:condition | Generate a plugin condition. |
| generate:plugin:field | Generate field type, widget and formatter plugins. |
| generate:plugin:fieldformatter | Generate field formatter plugin. |
| generate:plugin:fieldtype | Generate field type plugin. |
| generate:plugin:fieldwidget | Generate field widget plugin. |
| generate:plugin:imageeffect | Generate image effect plugin. |
| generate:plugin:imageformatter | Generate image formatter plugin. |
| generate:plugin:mail | Generate a plugin mail |
| generate:plugin:rest:resource | Generate plugin rest resource |
| generate:plugin:rulesaction | Generate a plugin rule action |
| generate:plugin:skeleton | Generate an implementation of a skeleton plugin for those plugins Drupal Console do not have a specific generator |
| generate:plugin:type:annotation | Generate a plugin type with annotation discovery |
| generate:plugin:type:yaml | Generate a plugin type with Yaml discovery |
| generate:plugin:views:field | Generate a custom plugin view field. |
| generate:post:update | commands.generate.post:update.description |
| generate:profile | Generate a profile. |
| generate:routesubscriber | Generate a RouteSubscriber |
| generate:service | Generate service |
| generate:theme | Generate a theme. |
| generate:twig:extension | Generate a Twig extension. |
| generate:update | Generate an implementation of hook_update_N() |
| image | |
| image:styles:debug | List image styles on the site |
| image:styles:flush | Execute flush function by image style or execute all flush images styles |
| libraries | |
| libraries:debug | Displays libraries available in application |
| locale | |
| locale:language:add | Add a language to be supported by your site |
| locale:language:delete | Delete a language to be supported by your site |
| locale:translation:status | List available translation updates |
| migrate | |
| migrate:debug | Display current migration available for the application |
| migrate:execute | Execute a migration available for application |
| module | |
| module:debug | Display current modules available for application |
| module:download | Download module or modules in application |
| module:install | Install module or modules in the application |
| module:path | Returns the relative path to the module (or absolute path) |
| module:uninstall | Uninstall module or modules in the application |
| module:update | Update core, module or modules in the application |
| multisite | |
| multisite:debug | List all multisites available in system |
| multisite:new | Sets up the files for a new multisite install. |
| node | |
| node:access:rebuild | Rebuild node access permissions. Rebuilding will remove all privileges to content and replace them with permissions based on the current modules and settings. |
| plugin | |
| plugin:debug | Display all plugin types, plugin instances of a specific type, or the definition for a specific plugin. |
| queue | |
| queue:debug | Display the queues of your application |
| queue:run | Process the selected queue. |
| rest | |
| rest:debug | Display current rest resource for the application |
| rest:disable | Disable a rest resource for the application |
| rest:enable | Enable a rest resource for the application |
| router | |
| router:debug | Displays current routes for the application |
| router:rebuild | Rebuild routes for the application |
| settings | |
| settings:debug | List user Drupal Console settings. |
| settings:set | Change a specific setting value in DrupalConsole config file |
| site | |
| site:debug | List all known local and remote sites. |
| site:import:local | Import/Configure an existing local Drupal project |
| site:install | Install a Drupal project |
| site:maintenance | Switch site into maintenance mode |
| site:mode | Switch system performance configuration |
| site:new | Create a new Drupal project |
| site:statistics | Show the current statistics of website. |
| site:status | View current Drupal Installation status |
| state | |
| state:debug | Show the current State keys. |
| state:delete | Delete State |
| state:override | Override a State key. |
| test | |
| test:debug | List Test Units available for the application. |
| test:run | Run Test unit from tests available for application |
| theme | |
| theme:debug | Displays current themes for the application |
| theme:download | Download theme in application |
| theme:install | Install theme or themes in the application |
| theme:path | Returns the relative path to the theme (or absolute path) |
| theme:uninstall | Uninstall theme or themes in the application |
| translation | |
| translation:cleanup | Clean up translation files |
| translation:pending | Determine pending translation string in a language or a specific file in a language |
| translation:stats | Generate translate stats |
| translation:sync | Sync translation files |
| update | |
| update:debug | Display current updates available for the application |
| update:entities | Applying Entity Updates |
| update:execute | Execute a specific Update N function in a module, or execute all |
| user | |
| user:debug | Displays current users for the application |
| user:delete | Delete users for the application |
| user:login:clear:attempts | Clear failed login attempts for an account. |
| user:login:url | Returns a one-time user login url. |
| user:password:hash | Generate a hash from a plaintext password. |
| user:password:reset | Reset password for a specific user. |
| user:role | Adds/removes a role for a given user |
| views | |
| views:debug | Display current views resources for the application |
| views:disable | Disable a View |
| views:enable | Enable a View |
| views:plugins:debug | Display current views plugins for the application |
| yaml | |
| yaml:diff | Compare two YAML files in order to find differences between them. |
| yaml:merge | Merge two or more YAML files in a new YAML file. Latest values are preserved. |
| yaml:split | Split a YAML file using indent as separator criteria |
| yaml:update:key | Replace a YAML key in a YAML file. |
| yaml:update:value | Update a value for a specific key in a YAML file. |