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 Version 8 is released! Learn More. 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
- :wrench: Custom helpers
- :wrench: Custom filters
- :package: 0 dependencies
- :hammer: Conditionals
- :zap: Exports ES Modules as well as UMD
- :hammer: Loops
- :wrench: Custom delimeters
- :pencil2: Easy template syntax
- :wrench: Precompilation
- :hammer: Partials
- :wrench: Inline JavaScript
- :hammer: Comments
- :wrench: Caching
- :rocket: SUPER fast (look at the performance benchmarks here)
:scroll: Docs
We know nobody reads through the long and boring documentation in the ReadMe anyway, so head over to the documentation website:
:pencil: https://squirrelly.js.org
:notebook: 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}}
:heavy_check_mark: 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.
:handshake: 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
This project exists thanks to all the people who contribute. We welcome contributions! Learn how to contribute here.
:fire: 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:
:sparkles: 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
:sparkles: 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: Bug Fixes
Filter chaining will work once more (this was fixed in 7.5.0)
License
Squirrelly is licensed under the MIT license.