/liquidjs

A shopify compatible Liquid template engine in pure JavaScript.

Primary LanguageTypeScriptMIT LicenseMIT

liquidjs

npm version downloads Build Status Coveralls dependencies All Contributors semantic-release GitHub issues GitHub contributors David David Dev DUB license Commitizen friendly open collective

A shopify compatible Liquid template engine in pure JavaScript. The purpose of this repo is to provide a standard Liquid implementation for the JavaScript community. All features, filters and tags in shopify/liquid are supposed to be built in LiquidJS, though there are still some differences and limitations (see below).

Donate to our collective if you like liquidjs.

Get Started

Install via npm:

npm install --save liquidjs
var Liquid = require('liquidjs');
var engine = new Liquid();

engine
    .parseAndRender('{{name | capitalize}}', {name: 'alice'})
    .then(console.log);     // outputs 'Alice'

Or include the UMD build (You may need a Promise polyfill for Node.js < 4 and ES5 browsers like IE and Android UC):

<script src="//unpkg.com/liquidjs/dist/liquid.min.js"></script>     <!--for production-->
<script src="//unpkg.com/liquidjs/dist/liquid.js"></script>         <!--for development-->

Also available from CLI:

echo '{{"hello" | capitalize}}' | npx liquidjs

Differences and Limitations

  • Dynamic file locating (enabled by default), that means layout/partial names are treated as variables in liquidjs. See #51.
  • Truthy and Falsy. All values except undefined, null, false are truthy, whereas in Ruby Liquid all except nil and false are truthy. See #26.
  • Number. In JavaScript we cannot distinguish or convert between float and integer, see #59. And when applied size filter, numbers always return 0, which is 8 for integer in ruby, cause they do not have a length property.
  • .to_liquid() is replaced by .toLiquid()
  • .to_s() is replaced by JavaScript .toString()

Features that available on shopify website but not on shopify/liquid repo will not be implemented in this repo, but there're some plugins available (feel free to add yours):

Contributors ✨

This project follows the all-contributors specification. Contributions of any kind are welcome! Thanks goes to these wonderful people:

Jun Yang
Jun Yang

🚧 πŸ’»
chenos
chenos

πŸ’»
Zach Leatherman
Zach Leatherman

πŸ›
Tim Hardy
Tim Hardy

πŸ’»
Paul Robert Lloyd
Paul Robert Lloyd

πŸ’» πŸ›
Alec Larson
Alec Larson

πŸ’»
Patrick Malouin
Patrick Malouin

πŸ’» πŸ“–
jaswrks
jaswrks

πŸ’»
δΈ‰δΈ‰
δΈ‰δΈ‰

πŸ’» πŸ€”
ssendev
ssendev

πŸ’» πŸ“–
wojtask9
wojtask9

πŸ’»
Andrew Barclay
Andrew Barclay

πŸ’»
Cory Mawhorter
Cory Mawhorter

πŸ’»
Mehdi Jaffery
Mehdi Jaffery

πŸ’»
Robin Bijlani
Robin Bijlani

πŸ’» πŸ›
Ryan Kennedy
Ryan Kennedy

πŸ’»
Sami Kukkonen
Sami Kukkonen

πŸ’»
Scott Santucci
Scott Santucci

πŸ’»
Steven
Steven

πŸ’‘ πŸ’»
azu
azu

πŸ“–

donate to liquidjs collective