Defining TwigExtension globals in Craft 3 A long time ago I asked how I could utilise the getGlobal method in Craft 2.x. 

I'd like to know how best to do this in Craft 3?
There are two ways to achieve this:

Option 1

Add this in your plugin/module main init function:

      $twig = Craft::$app-&gt;view-&gt;getTwig(null, ['safe_mode' =&gt; false]);
      $twig-&gt;addGlobal('foo', 'bar');


That's it. You can call 'foo' in your template like this {{ foo }} // Output 'bar'

Option 2 (best)

In the root of your plugin/module directory, create a folder called 'twigextensions' if you don't already have one. Create a new file where you're going to define your globals. MyGlobals.php for example.

At the very top of your main plugin/module file, you need to add this:

use modules\myawesomemodile\twigextensions\MyGlobals;


... remembering to amend the plugin/module name, and the name of the file you created. 

Then add the following to the same file. Only this needs to be inside your main init function: 

Craft::$app-&gt;view-&gt;registerTwigExtension(new MyGlobals());


Lastly, in your new MyGlobals.php file. Add the following. Again changning the plugin/module names where appropriate. 

namespace modules\myawesomemodule\twigextensions;

use modules\myawesomemodule\MyAwesomeModule;

use Craft;

class MyGlobals extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
{

    public function getGlobals()
    {
        return array(
            'foo' =&gt; 'bar',
        );
    }
}


That's it. Like before, you can call 'foo' in your template like this {{ foo }} // Output 'bar'

Now I don't understand the technical reasons as to why one is better than the other. I prefer Option 2 because it permits me to add multiple globals. However, my old post was answered by Mats Mikkel Rummelhoff; who goes into this in a little more detail.