squirrelly
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 ~2.2KB gzipped.
Notice: Squirrelly v8 was released in beta! Learn more about v8
All future development of Squirrelly 7 will be happening on the v7
branch.
Why Squirrelly?
Simply put, Squirrelly is super lightweight, super fast, simple, and gets the job done.
🌟 Features
- 🔧 Custom helpers
- 🔧 Custom filters
- 📦 0 dependencies
- 🔨 Conditionals
- ⚡️ Exports ES Modules as well as UMD
- 🔨 Loops
- 🔧 Custom delimeters
- ✏️ Easy template syntax
- 🔧 Precompilation
- 🔨 Partials
- 🔧 Inline JavaScript
- 🔨 Comments
- 🔧 Caching
- 🚀 SUPER fast (look at the performance benchmarks here)
📜 Docs
We know nobody reads through the long and boring documentation in the ReadMe anyway, so head over to the documentation website:
📓 Examples
Simple Template
var myTemplate = "<p>My favorite kind of cake is: {{favoriteCake}}</p>"
Sqrl.Render(myTemplate, {favoriteCake: 'Chocolate!'})
// Returns: '<p>My favorite kind of cake is: Chocolate!</p>
Conditionals
{{if(options.somevalue === 1)}}
Display this
{{#else}}
Display this
{{/if}}
Loops
{{each(options.somearray)}}
Display this
The current array element is {{@this}}
The current index is {{@index}}
{{/each}}
✔️ Tests
The default test can be run with npm test
, and it just checks that compiling and rendering a simple template results in the correct string.
🤝 Contributing
We love contributions from the community! Contributions are accepted using GitHub pull requests; for more information, see GitHub documentation - Creating a pull request.
For a good pull request, we ask you provide the following:
- Include a clear description of your pull request in the description with the basic "what" and "why" for the request.
- The test should pass.
- The pull request should include tests for the change. A new feature should have tests for the new feature and bug fixes should include a test that fails without the corresponding code change and passes after they are applied.
- If the pull request is a new feature, please include appropriate documentation in the
README.md
file as well. - Keep a consistent coding style.
Contributors
Ben Gubler 💻 💬 📖 ⚠️ |
Mark Evans 💻 |
donpedro 💬 |
This project exists thanks to all the people who contribute. We welcome contributions! Learn how to contribute here.
🔥 Version 8
Some of you may have been wondering about the lack of activity on this repository over the last few months. The answer is that, for quite a while, I've been working on a brand-new version of Squirrelly. You can read about it on GitHub, but here's a quick overview:
✨ Low-Level Changes
- New, more reliable parser -- see a draft here
- AST generation before compiled-function generation
- Partials will be referenced instead of inlined
- Bundling with Rollup for smaller code size
✨ New Features
- Layouts
- Async support
- Helpers will be prefixed with
~
, so{{~if(options.stuff}}
- 'Interpolate syntax':
{{=4+3}}
- Native Code: what was previously
{{js(var x = 0)/}}
will become:{{!var x = 0}}
- Filter parameters, ex.
{{somearray | join(",") }}
- Save the cache and load it later
- Plugins
🐛 Bug Fixes
Filter chaining will work once more(this was fixed in 7.5.0)
License
Squirrelly is licensed under the MIT license.