Compile Pug templates into Twig templates

1.2.0 2021-05-02 17:13 UTC

This package is auto-updated.

Last update: 2023-12-08 01:05:09 UTC


Latest Stable Version Build Status Test Coverage StyleCI

This package can convert basic pug codes into Twig code. Caution, this package should not be used to handle Pug templates in Symfony, the right way to do it is to use pug-symfony and to either polyfill Twig expressions only or delegate expression handle to the Twig code parser.

This package can help you moving from Pug to Twig by generating equivalent code or can be used to create a Pug input interface to insert Twig templates in an existing application. These are the only kind of business you should handle with this package.

For a full-featured Pug template engine in Symfony pug-symfony is what you need. If you miss a feature, ask in the issues, there probably already exists a way to do the same, else we'll try to add it.


First install composer if you have not: https://getcomposer.org/

Then run the following command:

composer require pug/twig

Or if you installed composer locally:

php composer.phar require pug/twig

Extension for Phug/Pug-php to output Twig (PHP pug to twig converter)


  - for user in users
      // comment
      = user.name
      | Email: #{user.email}
      a(href=user.url) Home page


include 'vendor/autoload.php';

echo PugToTwig::convert(file_get_contents('my-pug-input.pug'));

Will output:

<ul id="users">
  {% for user in users %}
    <li class="user">
      {#  comment #}
      {{ user.name | e }}
      Email: {{ user.email | e }}
      <a href="{{ user.url | e }}">Home page</a>
  {% endfor %}

(indentation not guaranteed).

Some features such as mixins could output PHP that you would need to evaluate:

$html = eval('?>' . PugToTwig::convert($pugCode));

Warning: you should be sure you don't let user input appears between <?php and ?>. It should not happen easily because expressions and codes are turned into Twig code that the PHP eval will just ignore, but be careful.

Not supported features:

  • Mixins with dynamic names
  • Mixins arguments: de facto, argument display will become Twig interpolation and Twig can't handle pug mixins, so mixins are evaluated before Twig will evaluate code/expressions.