Comparison of web template engines
{{Short description|none}}
{{Dynamic a-list}}
{{More citations needed|date=September 2018}}
The following table lists the various web template engines used in Web template systems and a brief rundown of their features.
{{sort-under}}
class="sortable wikitable sort-under" | |||||||||||||
Engine (implementation){{efn|name=Engi}} || Languages{{efn|name=Lang}}|| License{{efn|name=Lice}}|| {{verth|Variables{{efn|name=Vari}}}}|| {{verth|Functions{{efn|name=Func}}}}|| {{verth|Includes{{efn|name=Incl}}}}|| {{verth|Conditional inclusion{{efn|name=Cond}}}}|| Looping{{efn|name=Loop}}|| Evaluation (language){{efn|name=Eval}} || {{verth|Assignment{{efn|name=Assi}}}}|| {{verth|Errors and exceptions{{efn|name=Erro}}}}|| {{verth|i18n{{efn|name=i18n}}}} || {{verth|Natural templates{{efn|name=Natu}}}}|| {{verth|Inheritance{{efn|name=Inhe}}}} | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Apache Velocity | Java, C# | {{Free|Apache}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{No}} |
ASP.NET (Microsoft) | C#, VB.NET | {{Proprietary}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Dunno}} | {{Dunno}} | {{Dunno}} |
ASP.NET (Mono) | C# | {{Free|LGPL}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Dunno}} | {{Dunno}} | {{Dunno}} |
Laravel Blade | PHP | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} |
CheetahTemplate | Python | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} |
CodeCharge Studio | Classic ASP, C#, VB.NET, PHP, Perl, Java/JSP, ColdFusion | {{Proprietary}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{Dunno}} |
ColdFusion | CFML, CFScript | {{Proprietary}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
CTPP | C, C++, Perl, PHP, Python | {{Free|BSD-like}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} |
Django | Python | {{Free|BSD-like}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes }} | {{No}} | {{Yes}} |
[https://eclipse.org/epsilon/doc/egl Epsilon Generation Language] | Java | {{Free|Eclipse Public License}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} |
EJS | JavaScript | {{varies|Various}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
eRuby | Ruby | {{Free|GNU GPL / Ruby License}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
FreeMarker | Java | {{Free|Apache}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} |
Genshi | Python | {{Free|BSD-like}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Python) | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
Go templates | Go | {{Free|BSD}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
Haml | Ruby, PHP (WIP) | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Ruby) | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} |
Hamlets | Java | {{Free|BSD}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{Dunno}} | {{Dunno}} | {{Dunno}} |
JavaServer Pages | Java | {{Free|CDDL + GNU GPL[http://jsp.java.net/ JavaServer(TM) Pages Implementation]}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Dunno}} | {{Yes}} | {{Dunno}} |
Jinja | Python | {{Free|BSD}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Python) | {{Yes}} | {{No}} | {{Yes}} | {{No}} | {{Yes}} |
Jinja2 | Python | {{Free|BSD}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Python) | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} |
[https://keats.github.io/tera/ Tera] | Rust | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{No}} |
Kid | Python | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Python) | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{No}} |
Lucee | CFML | {{Free|LGPL}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (CFML) | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
Mako | Python | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Python) | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} |
Mustache | {{varies|30+ languages}} | {{Free|MIT}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} ({{mono|foreach}}) | {{No}} | {{No}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
Open Power Template | PHP 5 | {{Free|BSD-like}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (PHP) | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} |
PHP | PHP | {{Free|PHP License}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
[https://pugjs.org Pug] | JavaScript | {{Free|MIT}}{{Cite web|title=pugjs/pug|url=https://github.com/pugjs/pug|access-date=2021-05-17|website=GitHub|language=en}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (JavaScript) | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} |
Razor | C#, F#, VB.NET | {{Free|Apache}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
Smarty | PHP | {{Free|LGPL}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (PHP) | {{Yes}} | {{Yes}}? | {{Yes}} | {{No}} | {{Yes}} |
[https://slim-template.github.io/ Slim] | Ruby | {{Free|MIT}}{{Cite web|title=slim-template/slim|url=https://github.com/slim-template/slim/blob/master/LICENSE|access-date=2021-05-17|website=Github|language=en}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} |
Template Attribute Language | {{varies|Various}} | {{free|open source}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Dunno}} |
Template Toolkit | Perl, Python | {{free|Perl}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} (Perl) | {{Yes}} | {{Yes}} | {{No}} | {{No}} | {{Yes}} |
Thymeleaf | Java | {{Free|Apache}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} |
Twig | PHP | {{Free|BSD}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} | {{Yes}} | {{Yes}} | {{No}} | {{Yes}} |
web2py | Python | {{Free|LGPL3}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} |
WebMacro | Java | {{Free|Apache, GNU GPL}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Yes}} | {{Dunno}} | {{Dunno}} | {{Dunno}} |
Engine (implementation){{efn|name=Engi}} || Languages{{efn|name=Lang}}|| License{{efn|name=Lice}}|| {{verth|Variables{{efn|name=Vari}}}}|| {{verth|Functions{{efn|name=Func}}}}|| {{verth|Includes{{efn|name=Incl}}}}|| {{verth|Conditional inclusion{{efn|name=Cond}}}}|| Looping{{efn|name=Loop}}|| Evaluation (language){{efn|name=Eval}} || {{verth|Assignment{{efn|name=Assi}}}}|| {{verth|Errors and exceptions{{efn|name=Erro}}}}|| {{verth|i18n{{efn|name=i18n}}}} || {{verth|Natural templates{{efn|name=Natu}}}}|| {{verth|Inheritance{{efn|name=Inhe}}}} |
See also
- Template processor
- Web template system
- JavaScript templating
- :Category:Template engines
- [https://ozkanpakdil.github.io/spring-comparing-template-engines/ Java template engine performance report in spring boot]
Notes
{{notelist|refs=
{{efn|name=Engi|Engine (implementation) : engine name}}
{{efn|name=Lang|Languages : implementation language of the engine (not the template script language)}}
{{efn|name=Lice|License : Software license agreement}}
{{efn|name=Vari|Variables : script language power to use variables}}
{{efn|name=Func|Functions : script language power to use functions}}
{{efn|name=Incl|Includes : script language power include external files}}
{{efn|name=Cond|Conditional inclusion : script language power to conditional includes}}
{{efn|name=Loop|Looping : script language power to do loops (for, while) or recursion}}
{{efn|name=Eval|Evaluation (language) : script language power to do "eval command" (to the implementation language)}}
{{efn|name=Assi|Assignment : set names and references to sub-templates (?)}}
{{efn|name=Erro|Errors and exceptions : engine output script errors.}}
{{efn|name=i18n|i18n : Internationalization and localization feature}}
{{efn|name=Natu|Natural templates : the template can be a document as valid as the final result, the engine syntax doesn't break the document's structure}}
{{efn|name=Inhe|Inheritance : Supports the ability to inherit a layout from a parent template, separately overriding arbitrary sections of the parent template's content.}}
}}
References
{{reflist|30em}}
{{DEFAULTSORT:Web template engines}}