Summary
Squirrelly is a modern, configurable, and blazing fast template engine implemented in JavaScript. It works out of the box with ExpressJS and the full version weighs only ~3.3KB gzipped.
This is version 8 - a new, more powerful rewrite of Squirrelly. It adds multiple features (like filter parameters, whitespace control, partials, and template inheritance) to bring you a template engine with the power of Nunjucks, the simplicity of EJS, and the small bundle size of its earlier versions.
Version 8 is still in beta. Squirrelly v7 will continue to be maintained, and can be found at https://github.com/squirrellyjs/squirrelly/tree/v7. Since the API of v8 isn't fully documented yet, most people should probably use v7 for the next few weeks.
Looking for a lightweight, faster, and more reliable alternative to EJS? Check out Squirrelly's cousin, Eta.
Simply put, Squirrelly is super lightweight, super fast, super powerful, and super simple.
- 🔧 Helpers, filters
- 🔧 Great error reporting
- 📦 0 dependencies
- 🔨 Conditionals
- 🔧 Better quotes/comments support
- ex.
{{someval + "name }}" }}
compiles correctly, while it fails with DoT or EJS
- ex.
- ⚡️ Exports ES Modules as well as UMD
- 🔨 Loops
- 🔧 Custom delimeters
- 📝 Easy template syntax
- 🔧 Precompilation
- 🔨 Partials
- 🔧 Inline JavaScript
- 🔨 Comments
- 🔧 Caching
- 🚀 Super Fast
- Squirrelly has been benchmarked against Marko, Pug, doT, Swig, Handlebars, Mustache, and Nunjucks. In each test, Squirrelly was fastest.
- ⚡️ Async support: async filters, helpers, partials
- 🔧 Template inheritance
We know nobody reads through the long and boring documentation in the ReadMe anyway, so head over to the documentation website:
var myTemplate = "<p>My favorite kind of cake is: {{it.favoriteCake}}</p>"
Sqrl.render(myTemplate, {favoriteCake: 'Chocolate!'})
// Returns: '<p>My favorite kind of cake is: Chocolate!</p>
{{~if(it.somevalue === 1)}}
Display this
{{#else}}
Display this
{{/if}}
{{~each(it.somearray) => val, index}}
Display this
The current array element is {{val}}
The current index is {{index}}
{{/each}}
Tests can be run with npm test
. Multiple tests check that parsing, rendering, and compiling return expected results, formatting follows guidelines, and code coverage is at the expected level.
To be added
[Waiting for permissions]
Made with ❤ by @nebrelbug and all these wonderful contributors (emoji key):
Ben Gubler 💻 💬 📖 |
Clite Tailor 🤔 💻 |
Ioan CHIRIAC 💻 🤔 |
This project follows the all-contributors specification. Contributions of any kind are welcome!
- Async support and file handling were added based on code from EJS, which is licensed under the Apache-2.0 license. Code was modified to throw a Squirrelly Error.