atpl.js: completed my twig implementation for #nodejs #twig

Mar 03 2013

![](/images/2013/twig_thumb2.png) Today I have completed my project atpl.js. atpl.js (Advanced TemPLates) tried to implement completely the `Twig template system`, but implementing it in Node.JS instead of PHP. I know a couple of projects that tried to do the same thing: `swig` and `twig.js`. *History:* I started this project something like a year ago, but I decided to give some time to swig and twig.js projects so they could evolve and maybe implementing twig good enough for me. By mid-December 2012, with TypeScript just out, and after checking that swig and twig.js didn’t was mature enough, I decided to resume the work, but this time in TypeScript. And after sometime working on it intermittently since that moment until now, I have been implementing all the Twig functionalities I have constancy of. *Performance:* atpl.js is fast, very fast. It uses dynamic javascript generation, so the template code ends being converted into native code using javascript V8 engine that uses node. So the performance is excellent and almost imperceptible in comparison of not using templates at all. Furthermore, I have implemented variable scopes using javascript prototyping, so variable access and blocks is extremely fast. *Implementation:* atpl.js implements all the twig base, starting from conditional multiple-level inheritance, to variable interpolation inside strings, including all operators, macros, horizontal block reusal, all the filters, functions, tests and tags. *Development:* atpl.js is being developed completely using TDD (Test Driven Development), using `travis-ci` to do continuous testing. All the features supported by atpl.js include a unittest that verifies that it is working properly, and every tests is being executed by travis in each commit and release. *Integration:* atpl.js works with `express2 and express3` supports `consolidate`, and allows to run without additional dependencies. *Status:* Right now I’m using atpl.js in several online projects and wip projects without any stability issues. Right now last version is 0.7.1 that will be 1.0.0 after I end documenting and cleaning up the code and fixing all the possible minor bugs that people would report. *Opinions:*`[1]`* *“just a remarkable job… thanks! Finally now I can say that NodeJS have a great templating engine! I’m gonna update `my article on my blog`! Thanks!” *Usage:* In order to use atpl.js the only thing you need to install it in your project like any other nodejs module:_npm install atpl_ Project website: `https://github.com/soywiz/atpl.js`
![](/images/2013/twig_thumb2.png) Hoy he terminado mi proyecto atpl.js. atpl.js (Advanced TemPLates) tenía como intención implementar completamente el proyecto de sistema de templates [Twig](http://twig.sensiolabs.org/), pero en vez de para PHP, para Node.JS. Tengo constancia de un par de proyectos que pretendían/pretenden hacer eso mismo: [swig](https://github.com/paularmstrong/swig) y [twig.js](https://github.com/justjohn/twig.js). **Historia:** El proyecto lo empecé hará cosa de un año, pero decidí dejar algo de tiempo a los proyectos swig y twig.js para ver si maduraban e implementaban twig de una forma correcta. Para mediados de diciembre de 2012, con TypeScript recién salido del horno, y viendo que swig y twig.js no habían madurado lo suficiente, decidí retomarlo en TypeScript. Y tras haber trabajando en el proyecto de forma intermitente desde entonces hasta día de hoy, he implementado todas las funcionalidades de Twig de las que tengo constancia. **Rendimiento:** atpl.js es rápido, muy rápido. Hace uso de generación dinámica de código javascript, de forma que el código de los templates acaba convirtiéndose en código nativo con el motor V8 que usa node. Así que el rendimiento es excelente y prácticamente imperceptible con respecto a no usar un sistema de templates. Además de eso, los ámbitos de nombres tanto de bloques como de variables lo he implementado mediante el prototipado de javascript, de esta forma el acceso a variables y bloques es extremadamente rápido. **Implementación:** atpl.js implementa toda la base de twig, desde la herencia múltiple y condicional de varios niveles, hasta la interpolación de variables en cadenas, pasando por todos los operadores, macros, reutilización horizontal de bloques, todos los filtros, functions, tests y tags. **Desarrollo:** atpl.js está desarrollado completamente mediante TDD (Test Driven Developement), usando [travis-ci](https://travis-ci.org/soywiz/atpl.js/builds) para hacer una integración contínua. Todas las características soportadas por atpl.js tienen su test unitario que comprueba su correcto funcionamiento y cada test se ejecuta mediante travis en cada commit y cada release. **Integración:** atpl.js funciona con [express2 y express3](http://expressjs.com/) y soporta [consolidate](https://github.com/visionmedia/consolidate.js/), además de poder usarse de forma autónoma. **Estado:** Actualmente estoy usando atpl.js en varios proyectos online y proyectos en curso sin problemas de estabilidad. Actualmente la versión online es la 0.7.1 que pasará a la 1.0.0 cuando termine de documentar y limpiar código y corregir los posibles bugs menores que reportase la gente. **Opiniones de la gente:** **[[1]](https://github.com/soywiz/atpl.js/issues/18#issuecomment-14388199) **"just a remarkable job... thanks! Finally now I can say that NodeJS have a great templating engine! I'm gonna update [my article on my blog](http://www.panosru.com/template-engines-for-node-js)! Thanks!" **Modo de uso:** Para usar atpl.js únicamente tienes que instalar el módulo en tu proyecto mediante npm como con cualquier otro módulo: **`npm install atpl`** Página del proyecto: [https://github.com/soywiz/atpl.js](https://github.com/soywiz/atpl.js)