Drupal - Is hook_init() still used? If it is not anymore used, how do I convert code implementing hook_init()?

Perhaps this has changed since this question was last answered. But I think the preferred approach to replacing what is going on in hook_init is to create an event subscriber, and adding to the 'request'. Here is how you do that for those that may find it useful.

Example services.yml

    class:   Drupal\mymodule\EventSubscriber\MyModuleSubscriber
    arguments: ['@current_user'] // <- optional args
      - {name: event_subscriber} // <- Required Tag

Then you would implement the EventSubscriberInterface (new file in the src/EventSubscriber directory) and in the implemented method getSubscribedEvents you can do something like...

 * {@inheritdoc}
public static function getSubscribedEvents() {
  $events[KernelEvents::REQUEST][] = array('initializeMyModule');
  return $events;

And add the method accordingly

 * MyModule
 * @param \Symfony\Component\HttpKernel\Event\GetResponseEvent $event
 *   The event to process.
public function initializeMyModule(GetResponseEvent $event) {
  $request = $event->getRequest();   

Yes, hook_init() is not used in Drupal 8. If you need drupal_add_js() or drupal_add_css() you can use hook_page_build() instead (note: this hook was removed in Drupal 8.0.0-beta3 see change record), which is also useful for that in Drupal 7.

For example, CSS styles and JavaScript code can be added to hook_page_build() using $page['#attached'].

 $path = drupal_get_path('module', 'MY_MODULE');
 $page['#attached']['js'][$path . '/my_module.js'] = array('scope' => 'footer');
 $page['#attached']['css'][$path . '/my_module.base.css'] = array('every_page' => TRUE);

If you need to do more complex listening on the request/response there, you can define a Drupal 8 style kernel event listener as documented on hook_init() removed.

hook_page_build() has been deprecated in favor of hook_page_attachments() change record here.


function MYMODULE_page_attachments(array &$attachments) {
  $attachments ['#attached']['library'][] = 'modulename/libraryname';

libraryname is the name of the library, defined in your module's mymodule.libraries.yml