Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

pug

pugjs6.6mMIT3.0.3TypeScript support: definitely-typed

A clean, whitespace-sensitive template language for writing HTML

html, jade, pug, template

readme

Pug

Full documentation is at pugjs.org

Pug is a high performance template engine heavily influenced by Haml and implemented with JavaScript for Node.js and browsers. For bug reports, feature requests and questions, open an issue. For discussion join the chat room.

You can test drive Pug online here.

Build Status Coverage Status Dependency Status DevDependencies Status NPM version Join Gitter Chat

Rename from "Jade"

This project was formerly known as "Jade." However, it has been revealed to us that "Jade" is a registered trademark, and as a result a rename is needed. After some discussion among the maintainers, "Pug" has been chosen as the new name for this project. The next major version will carry "pug" as the package name.

If your package or app currently uses jade, don't worry: we have secured permissions to continue to occupy that package name, although all new versions will be released under pug.

Before the renaming, we had already begun working on an incompatible Jade 2.0.0. We have then made it so that this new major version bump will coincide with the rename to Pug. Therefore, upgrading from Jade to Pug will be the same process as upgrading any other package with a major version bump. Currently, Pug 2.0.0 is still under beta stage, and there are several syntactic differences we have deprecated and removed. Such differences are documented at #2305.

The website and documentation for Pug are still being updated, but if you are new to Pug, you should get started with the new syntax and install the Pug package on npm.

Installation

Package

via npm:

$ npm install pug

Command Line

After installing the latest version of Node.js, install with:

$ npm install pug-cli -g

and run with

$ pug --help

Syntax

Pug is a clean, whitespace sensitive syntax for writing html. Here is a simple example:

doctype html
html(lang="en")
  head
    title= pageTitle
    script(type='text/javascript').
      if (foo) bar(1 + 5)
  body
    h1 Pug - node template engine
    #container.col
      if youAreUsingPug
        p You are amazing
      else
        p Get on it!
      p.
        Pug is a terse and simple templating language with a
        strong focus on performance and powerful features.

becomes

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>Pug</title>
    <script type="text/javascript">
      if (foo) bar(1 + 5)
    </script>
  </head>
  <body>
    <h1>Pug - node template engine</h1>
    <div id="container" class="col">
      <p>You are amazing</p>
      <p>Pug is a terse and simple templating language with a strong focus on performance and powerful features.</p>
    </div>
  </body>
</html>

API

For full API, see pugjs.org/api/reference.html

var pug = require('pug');

// compile
var fn = pug.compile('string of pug', options);
var html = fn(locals);

// render
var html = pug.render('string of pug', merge(options, locals));

// renderFile
var html = pug.renderFile('filename.pug', merge(options, locals));

Options

  • filename Used in exceptions, and required when using includes
  • compileDebug When false no debug instrumentation is compiled
  • pretty Add pretty-indentation whitespace to output (false by default)

Browser Support

The latest version of pug can be download for the browser in standalone form from here. It only supports the very latest browsers though, and is a large file. It is recommended that you pre-compile your pug templates to JavaScript.

To compile a template for use on the client using the command line, do:

$ pug --client --no-debug filename.pug

which will produce filename.js containing the compiled template.

Additional Resources

Tutorials:

Implementations in other languages:

Other:

License

MIT

changelog

1.11.0 / 2015-06-12

1.10.0 / 2015-05-25

  • Now supports jstransformers, which allows improved handling of embedded languages such as Coffee-Script, and deprecated Transformers support in filters - to be removed in 2.0.0 (@ForbesLindesay)
  • CLI: added a flag to keep directory hierarchy when a directory is specified - this behavior will be the default in 2.0.0 (@TimothyGu)
  • disabled 'compileDebug' flag by default when used with express in production mode (Andreas Lubbe)
  • Fixed a memory leak on modern versions of Chrome as well as node 0.12 and iojs (Andreas Lubbe)
  • update website (@GarthDB)

1.9.2 / 2015-01-18

1.9.1 / 2015-01-17

  • Clean up path/fs functions in CLI as we no longer support node@0.6 (@TimothyGu)
  • Update commander (@TimothyGu)
  • Document cache and parser options (@TimothyGu)
  • Fix bug in 1.9.0 where we read the file if cache was enabled, even if a string was provided (@TimothyGu)
  • Fix year in changelog (@tomByrer)

1.9.0 / 2015-01-13

1.8.2 / 2014-12-16

1.8.1 / 2014-11-30

  • Fix corner case when the pretty option was passed a non-string truthy value (@TimothyGu)
  • Warn when lexer is given as an option (@TimothyGu)
  • Update dependencies (@TimothyGu)

1.8.0 / 2014-11-28

1.7.0 / 2014-09-17

1.6.0 / 2014-08-31

  • Allow optional white space after + when calling a mixin (@char101)
  • Use void-elements module to replace internal self-closing list (@hemanth)
  • Fix a warning that eroniously warned for un-used blocks if in an extending template from an include (Reported by @Dissimulazione)
  • Fix mixins not working at end of file (@ForbesLindesay)
  • Fix error reporting when mixin block was followed by blank lines (@ForbesLindesay)

1.5.0 / 2014-07-23

  • Added compileFile API (@ForbesLindesay)
  • Fix line number in un-used blocks warning (@ForbesLindesay)
  • Fix a warning that eroniously warned for un-used blocks if they were under another block (Reported by @pesho)

1.4.2 / 2014-07-16

  • Fix a warning that eroniously warned for un-used blocks if they were under a "Code" element (Reported by @narirou)

1.4.1 / 2014-07-16

  • Fix an error that sometimes resulted in 'unexpected token "pipless-text"' being erroniously thrown (Reported by @Artazor and @thenitai)

1.4.0 / 2014-07-15

1.3.1 / 2014-04-04

  • Fix error with tags in xml that are self-closing in html (@ForbesLindesay)
  • Fix error message for inline tags with content (@hiddentao)

1.3.0 / 2014-03-02

  • Fix a bug where sometimes mixins were removed by an optimisation even though they were being called (@ForbesLindesay, reported by @leider)
  • Updated with to support automatically detecting when a value is "global" and removed redundant options.globals option (@ForbesLindesay)
  • Improve warnings for tags with multiple attributes (@ForbesLindesay)
  • Deprecate (with a warning) node.clone, block.replace, attrs.removeAttribute, attrs.getAttribute - these are all internal APIs for the AST (@ForbesLindesay)

1.2.0 / 2014-02-26

  • Use variables instead of properties of pug, improving performance and reliability with nested templates (@ForbesLindesay)
  • Support compiling templates from stdin via a user typing (@yorkie)
  • Lazily add mixins (@ForbesLindesay)
  • Fix case fall-through (@ForbesLindesay)
  • Earlier errors for when without case and else without if (@ForbesLindesay)
  • Allow if/else etc. to not have a block.
  • Remove lib-cov legacy to make browserify work better (@silver83)
  • Add and improve test coverage using istanbul (@ForbesLindesay)

1.1.5 / 2014-01-19

  • Add filename to and fix line numbers for missing space before text warning (@ijin82)
  • Fix filenames for some error reporting in extends/includes (@doublerebel)
  • Fix a corner case where a mixin was called with &attributes but no other attributes and a block that was supposed to be fixed in 1.1.4 (@ForbesLindesay)

1.1.4 / 2014-01-09

  • Fix a corner case where a mixin was called with &attributes but no other attributes and a block (@ForbesLindesay)

1.1.3 / 2014-01-09

  • Fix failure of npm prepublish not running

1.1.2 / 2014-01-09

  • Fix same interaction of &attributes with false null or undefined but combined with dynamic attributes (@ForbesLindesay)

1.1.1 / 2014-01-09

  • Fix a bug when &attributes is combined with static attributes that evaluate to false or null or undefined (@ForbesLindesay)

1.1.0 / 2014-01-07

  • Fix class merging to work as documented (@ForbesLindesay)
  • Throw an error when the same attribute is duplicated multiple times (@ForbesLindesay)
  • Move more errors into the parser/lexer so they have more info about line numbers (@ForbesLindesay)
  • Support mixin blocks at the end of files (@ForbesLindesay)

1.0.2 / 2013-12-31

  • Fix a bug when &attributes is combined with dynamic attributes (@ForbesLindesay)

1.0.1 / 2013-12-29

  • Allow self closing tags to contian whitespace (@ForbesLindesay)
  • Allow tags to have a single white space after them (@ForbesLindesay)
  • Support text bodies of tags that begin with // rather than treating them as comments (@ForbesLindesay)

1.0.0 / 2013-12-22

0.35.0 / 2013-08-21

  • Add support for space separated attributes (thanks to @ForbesLindesay)
  • Add earlier errors for invalid JavaScript expressions (thanks to @ForbesLindesay)
  • Fix parsing files with UTF8 BOMs when they are includes or parent/layout templates (thanks to @kiinoo)

0.34.1 / 2013-07-26

  • fix render file not working when called with callback (reported by @xieren58)

0.34.0 / 2013-07-26

  • callbacks only called once for async methods even if they throw (reported by @davidcornu)
  • HTML comments are pretty printed better (thanks to @eddiemonge)
  • callbacks are optional and leaving them out results in synchronous operation (thanks to @ForbesLindesay)
  • empty filter nodes are now permitted (thanks to @coderanger)
  • overhaul website and documentation (thanks to @ForbesLindesay), much more of this to come.

0.33.0 / 2013-07-12

  • Hugely more powerful error reporting (especially with compileDebug set explicitly to true)
  • Add a warning for tags with multiple attributes
  • be strict about requiring newlines after tags to fix some odd corner cases
  • fix escaping of class to allow it to be unescaped (thanks to @christiangenco)

0.32.0 / 2013-06-28

  • remove pug.version and fix pug --version
  • add file name and line number to deprecation warnings
  • use constantinople for better constant detection
  • update with for a massive performance upgrade at compile time

0.31.2 / 2013-06-07

  • fix overzealous deprecation warnings

0.31.1 / 2013-05-31

  • fix line endings for executable command
  • fix locals variable being undefined
  • fix an obscure bug that could occur if multiple mixins interact badly (see substack/lexical-scope#13)

0.31.0 / 2013-05-30

  • deprecate implicit text-only script and style tags
  • make with at compile time using lexical-scope
  • add options.parser that behaves exactly like options.compiler
  • add "component.json" for component (runtime) support
  • removed hasOwnProperty check in each loops
  • removed .min files from the repository (people can just generate these themselves)
  • use browserify to compile client side libraries
  • fix buggy block extending should now be fixed
  • fix preserve case of custom doctypes
  • fix regexps in attributes sometimes not being accepted
  • fix allow $ sign in each loop variable names
  • fix mixins with buffered code on the same line
  • fix separate class names by rather than , (was sometimes incorrect)

0.30.0 / 2013-04-25

  • add support for 'include' and 'extends' to use paths relative to basedir
  • fix accidental calling of functions in iteration block. Closes #986
  • fix: skip rethrow on client
  • fix each/else prefixed with -
  • fix multi-block prepend/append
  • swap -o and -O, set -o to --out

0.29.0 / 2013-04-16

  • add "monocle" for watcher that actually works...
  • fix interpolation in blocks of text
  • fix attribute interpolation
  • move filters to an external library
  • fix JavaScript escaping corner cases

0.28.2 / 2013-03-04

  • wtf coffeescript is not a dep

0.28.1 / 2013-01-10

  • add passing of filename to include filters
  • fix wrong new lines for include filters

0.28.0 / 2013-01-08

  • add .css and .js "filters". re #438
  • add include filters. Closes #283
  • fix "class:" within attribute escaping
  • removing ast filters
  • things I can't read:
  • 反馈地址
  • 样式
  • 联系
  • 初稿,翻译完
  • 接受大鸟的建议
  • 头晕,翻译一点点
  • 到过滤器翻译完毕
  • 翻译一部分
  • 中文翻译单独放
  • 特性部分
  • 再翻
  • 翻译一点点

0.27.7 / 2012-11-05

  • fix each/else clause for enumerated objects
  • fix #764 (incorrect line number for error messages)
  • fix double-escaping of interpolated js slashes. Closes #784

0.27.6 / 2012-10-05

  • Included templates can not override blocks of their parent. Closes #699

0.27.5 / 2012-09-24

  • fix attr interpolation escaping. Closes #771

0.27.4 / 2012-09-18

  • fix include yields. Closes #770

0.27.3 / 2012-09-18

  • fix escaping of interpolation. Closes #769
  • loosen "mkdirp" version restriction [TooTallNate]

0.27.2 / 2012-08-07

  • Revert "fixing string interpolation escaping #731", problems reported

0.27.1 / 2012-08-06

  • fix attribute interpolation escaping #731
  • fix string interpolation escaping #731

0.27.0 / 2012-07-26

  • added ability to pass in json file to --obj
  • add preliminary each else support. Closes #716
  • fix doctype bug overlooked in #712
  • fix stripping of utf-8 BOMs

0.26.3 / 2012-06-25

  • Update version of commander that supports node v0.8.

0.26.2 / 2012-06-22

  • Added --options alias of --obj
  • Added reserved word conflict prevention in Google's Closure Compiler
  • Added tag interpolation. Closes #657
  • Allow the compiled client to use it's own pug util functions [3rd-Eden]
  • Fixed attrs() escape bug [caseywebdev]

0.26.1 / 2012-05-27

  • Changed default doctype to html5
  • Performance: statically compile attrs when possible [chowey]
  • Fixed some class attribute merging cases
  • Fixed so block doesn't consume blockquotes tag [chowey]
  • Fixed backslashes in text nodes [chowey]
  • Fixed / in text. Closes #638

0.26.0 / 2012-05-04

  • Added package.json component support
  • Added explicit self-closing tag support. Closes #605
  • Added block statement
  • Added mixin tag-like behaviour [chowey]
  • Fixed mixins with extends [chowey]

0.25.0 / 2012-04-18

  • Added preliminary mixin block support. Closes #310
  • Fixed whitespace handling in various situations [chowey]
  • Fixed indentation in various situations [chowey]

0.24.0 / 2012-04-12

  • Fixed unescaped attribute compilation
  • Fixed pretty-printing of text-only tags (Warning: this may affect rendering) [chowey]

0.23.0 / 2012-04-11

  • Added data-attr json stringification support. Closes #572
  • Added unescaped attr support. Closes #198
  • Fixed #1070, reverted mixin function statements
  • Fixed pug.1 typo

0.22.1 / 2012-04-04

  • Fixed source tags. now self-closing. Closes #308
  • Fixed: escape backslashes in coffeescript filter

0.22.0 / 2012-03-22

  • Added pug manpage (man pug after installation for docs)
  • Added -D, --no-debug to pug(1)
  • Added -p, --pretty to pug(1)
  • Added -c, --client option to pug(1)
  • Fixed -o { client: true } with stdin
  • Fixed: skip blank lines in lexer (unless within pipeless text). Closes #399

0.21.0 / 2012-03-10

  • Added new input/output test suite using Mocha's string diffing
  • Added alias extend -> extends. Closes #527 [guillermo]
  • Fixed include escapes. Closes #513
  • Fixed block-expansion with .foo and #foo short-hands. Closes #498

0.20.3 / 2012-02-16

  • Changed: pass .filename to filters only

0.20.2 / 2012-02-16

  • Fixed :stylus import capabilities, pass .filename

0.20.1 / 2012-02-02

  • Fixed Block#includeBlock() with textOnly blocks

0.20.0 / 2011-12-28

  • Added a browser example
  • Added yield for block includes
  • Changed: replaced internal __ var with __pug [chrisleishman]
  • Fixed two globals. Closes #433

0.19.0 / 2011-12-02

  • Added block append / prepend support. Closes #355
  • Added link in readme to pug-mode for Emacs
  • Added link to python implementation

0.18.0 / 2011-11-21

  • Changed: only ['script', 'style'] are text-only. Closes #398'

0.17.0 / 2011-11-10

  • pug.renderFile() is back! (for express 3.x)
  • Fixed Object.keys() failover bug

0.16.4 / 2011-10-24

  • Fixed a test due to reserved keyword
  • Fixed: commander 0.1.x dep for 0.5.x

0.16.3 / 2011-10-24

  • Added: allow leading space for conditional comments
  • Added quick implementation of a switch statement
  • Fixed parens in mixin args. Closes #380
  • Fixed: include files with a .pug extension as pug files

0.16.2 / 2011-09-30

  • Fixed include regression. Closes #354

0.16.1 / 2011-09-29

  • Fixed unexpected else bug when compileDebug: false
  • Fixed attr state issue for balancing pairs. Closes #353

0.16.0 / 2011-09-26

  • Added include block support. Closes #303
  • Added template inheritance via block and extends. Closes #242
  • Added 'type="text/css"' to the style tags generated by filters.
  • Added 'uglifyjs' as an explicit devDependency.
  • Added -p, --path <path> flag to pug(1)
  • Added support for any arbitrary doctype
  • Added pug.render(str[,options], fn) back
  • Added first-class while support
  • Added first-class assignment support
  • Fixed runtime.js Array.isArray() polyfill. Closes #345
  • Fixed: set .filename option in pug(1) when passing filenames
  • Fixed Object.keys() polyfill typo. Closes #331
  • Fixed include error context
  • Renamed magic "index" to "$index". Closes #350

0.15.4 / 2011-09-05

  • Fixed script template html. Closes #316
  • Revert "Fixed script() tag with trailing ".". Closes #314"

0.15.3 / 2011-08-30

  • Added Makefile example. Closes #312
  • Fixed script() tag with trailing ".". Closes #314

0.15.2 / 2011-08-26

  • Fixed new conditional boundaries. Closes #307

0.15.1 / 2011-08-26

  • Fixed pug(1) support due to res.render() removal
  • Removed --watch support (use a makefile + watch...)

0.15.0 / 2011-08-26

  • Added client option to reference runtime helpers
  • Added Array.isArray() for runtime.js as well
  • Added Object.keys() for the client-side runtime
  • Added first-class if, unless, else and else if support
  • Added first-class each / for support
  • Added make benchmark for continuous-bench
  • Removed inline option, SS helpers are no longer inlined either
  • Removed Parser#debug()
  • Removed pug.render() and pug.renderFile()
  • Fixed runtime.js escape() bug causing window.escape to be used
  • Fixed a bunch of tests

0.14.2 / 2011-08-16

  • Added include support for non-pug files
  • Fixed code indentation when followed by newline(s). Closes #295 [reported by masylum]

0.14.1 / 2011-08-14

  • Added colons option for everyone stuck with ":". Closes #231
  • Optimization: consecutive lines are merged in compiled js

0.14.0 / 2011-08-08

  • Added array iteration with index example. Closes #276
  • Added runtime.js
  • Added compileDebug option to enable lineno instrumentation
  • Added inline option to disable inlining of helpers (for client-side)

0.13.0 / 2011-07-13

  • Added mixin support
  • Added include support
  • Added array support for the class attribute

0.12.4 / 2011-06-23

  • Fixed filter indentation bug. Closes #243

0.12.3 / 2011-06-21

  • Fixed empty strings support. Closes #223
  • Fixed conditional comments documentation. Closes #245

0.12.2 / 2011-06-16

  • Fixed make test
  • Fixed block comments

0.12.1 / 2011-06-04

  • Fixed attribute interpolation with double quotes. Fixes #232 [topaxi]

0.12.0 / 2011-06-03

  • Added doctype as alias of !!!
  • Added; doctype value is now case-insensitive
  • Added attribute interpolation support
  • Fixed; retain original indentation spaces in text blocks

0.11.1 / 2011-06-01

  • Fixed text block indentation [Laszlo Bacsi]
  • Changed; utilizing devDependencies
  • Fixed try/catch issue with renderFile(). Closes #227
  • Removed attribute ":" support, use "=" (option for ':' coming soon)

0.11.0 / 2011-05-14

  • Added self object to avoid poor with(){} performance [masylum]
  • Added doctype option [Jeremy Larkin]

0.10.7 / 2011-05-04

  • expose Parser

0.10.6 / 2011-04-29

  • Fixed CS Object.keys() [reported by robholland]

0.10.5 / 2011-04-26

  • Added error context after the lineno
  • Added; indicate failing lineno with ">"
  • Added Object.keys() for the client-side
  • Fixed attr strings when containing the opposite quote. Closes 207
  • Fixed attr issue with js expressions within strings
  • Fixed single-quote filter escape bug. Closes #196

0.10.4 / 2011-04-05

  • Added html doctype, same as "5"
  • Fixed pre, no longer text-only

0.10.3 / 2011-03-30

  • Fixed support for quoted attribute keys ex rss("xmlns:atom"="atom")

0.10.2 / 2011-03-30

  • Fixed pipeless text bug with missing outdent

0.10.1 / 2011-03-28

  • Fixed support/compile.js to exclude browser js in node
  • Fixes for IE [Patrick Pfeiffer]

0.10.0 / 2011-03-25

  • Added AST-filter support back in the form of <tag>[attrs]<:><block>

0.9.3 / 2011-03-24

  • Added Block#unshift(node)
  • Added pug.js for the client-side to the repo
  • Added pug.min.js for the client-side to the repo
  • Removed need for pipes in filters. Closes #185 Note that this will break filters used to manipulate the AST, until we have a different syntax for doing so.

0.9.2 / 2011-03-23

  • Added pug --version
  • Removed ${} interpolation support, use #{}

0.9.1 / 2011-03-16

  • Fixed invalid .map() call due to recent changes

0.9.0 / 2011-03-16

  • Added client-side browser support via make pug.js and make pug.min.js.

0.8.9 / 2011-03-15

  • Fixed preservation of newlines in text blocks

0.8.8 / 2011-03-14

  • Fixed pug(1) stdio

0.8.7 / 2011-03-14

  • Added mkdirs() to pug(1)
  • Added pug(1) stdio support
  • Added new features to pug(1), --watch, recursive compilation etc [khingebjerg]
  • Fixed pipe-less text newlines
  • Removed pug(1) --pipe flag

0.8.6 / 2011-03-11

  • Fixed parenthesized expressions in attrs. Closes #170
  • Changed; default interpolation values == null to ''. Closes #167

0.8.5 / 2011-03-09

  • Added pipe-less text support with immediate ".". Closes #157
  • Fixed object support in attrs
  • Fixed array support for attrs

0.8.4 / 2011-03-08

  • Fixed issue with expressions being evaluated several times. closes #162

0.8.2 / 2011-03-07

  • Added markdown, discount, and markdown-js support to :markdown. Closes #160
  • Removed :discount

0.8.1 / 2011-03-04

  • Added pre pipe-less text support (and auto-escaping)

0.8.0 / 2011-03-04

  • Added block-expansion support. Closes #74
  • Added support for multi-line attrs without commas. Closes #65

0.7.1 / 2011-03-04

  • Fixed script() etc pipe-less text with attrs

0.7.0 / 2011-03-04

  • Removed :javascript filter (it doesn't really do anything special, use script tags)
  • Added pipe-less text support. Tags that only accept text nodes (script, textarea, etc) do not require |.
  • Added :text filter for ad-hoc pipe-less
  • Added flexible indentation. Tabs, arbitrary number of spaces etc
  • Added conditional-comment support. Closes #146
  • Added block comment support
  • Added rss example
  • Added :stylus filter
  • Added :discount filter
  • Fixed; auto-detect xml and do not self-close tags. Closes #147
  • Fixed whitespace issue. Closes #118
  • Fixed attrs. ,, =, and : within attr value strings are valid Closes #133
  • Fixed; only output "" when code == null. Ex: span.name= user.name when undefined or null will not output "undefined". Closes #130
  • Fixed; throw on unexpected token instead of hanging

0.6.3 / 2011-02-02

  • Added each support for Array-like objects [guillermo]

0.6.2 / 2011-02-02

  • Added CSRF example, showing how you can transparently add inputs to a form
  • Added link to vim-pug
  • Fixed self-closing col support [guillermo]
  • Fixed exception when getAttribute or removeAttribute run into removed attributes [Naitik Shah]

0.6.0 / 2010-12-19

  • Added unescaped interpolation variant !{code}. Closes #124
  • Changed; escape interpolated code by default #{code}

0.5.7 / 2010-12-08

  • Fixed; hyphen in get tag()

0.5.6 / 2010-11-24

  • Added exports.compile(str, options)
  • Renamed internal _ to __, since _() is commonly used for translation

0.5.5 / 2010-10-30

  • Add coffeescript filter [Michael Hampton]
  • Added link to slim; a ruby implementation
  • Fixed quoted attributes issue.

  • Fixed attribute issue with over greedy regexp. Previously "p(foo=(((('bar')))))= ((('baz')))" would fail for example since the regexp would lookahead to far. Now we simply pair the delimiters.

0.5.4 / 2010-10-18

  • Adding newline when using tag code when preceding text
  • Assume newline in tag text when preceding text
  • Changed; retain leading text whitespace
  • Fixed code block support to prevent multiple buffer openings [Jake Luer]
  • Fixed nested filter support

0.5.3 / 2010-10-06

  • Fixed bug when tags with code also have a block [reported by chrisirhc]

0.5.2 / 2010-10-05

  • Added; Text introduces newlines to mimic the grammar. Whitespace handling is a little tricky with this sort of grammar. Pug will now mimic the written grammar, meaning that text blocks using the "|" margin character will introduce a literal newline, where as immediate tag text (ex "a(href='#') Link") will not.

    This may not be ideal, but it makes more sense than what Pug was previously doing.

  • Added Tag#text to disambiguate between immediate / block text

  • Removed pretty option (was kinda useless in the state it was in)
  • Reverted ignoring of newlines. Closes #92.
  • Fixed; Parser#parse() ignoring newlines

0.5.1 / 2010-10-04

  • Added many examples
  • Added; compiler api is now public
  • Added; filters can accept / manipulate the parse tree
  • Added filter attribute support. Closes #79
  • Added LL(*) capabilities
  • Performance; wrapping code blocks in {} instead of (function(){}).call(this)
  • Performance; Optimized attribute buffering
  • Fixed trailing newlines in blocks

0.5.0 / 2010-09-11

  • Major refactor. Logic now separated into lexer/parser/compiler for future extensibility.
  • Added pretty option
  • Added parse tree output for debug option
  • Added new examples
  • Removed context option, use scope

0.4.1 / 2010-09-09

  • Added support for arbitrary indentation for single-line comments. Closes #71
  • Only strip first space in text (ex '| foo' will buffer ' foo')

0.4.0 / 2010-08-30

  • Added tab naive support (tabs are converted to a single indent, aka two spaces). Closes #24
  • Added unbuffered comment support. Closes #62
  • Added hyphen support for tag names, ex: "fb:foo-bar"
  • Fixed bug with single quotes in comments. Closes #61
  • Fixed comment whitespace issue, previously padding. Closes #55

0.3.0 / 2010-08-04

  • Added single line comment support. Closes #25
  • Removed CDATA from :javascript filter. Closes #47
  • Removed sys local
  • Fixed code following tag

0.2.4 / 2010-08-02

  • Added Buffer support to render()
  • Fixed filter text block exception reporting
  • Fixed tag exception reporting

0.2.3 / 2010-07-27

  • Fixed newlines before block
  • Fixed; tag text allowing arbitrary trailing whitespace

0.2.2 / 2010-07-16

  • Added support for pug.renderFile() to utilize primed cache
  • Added link to textmate bundle
  • Fixed filter issue with single quotes
  • Fixed hyphenated attr bug
  • Fixed interpolation single quotes. Closes #28
  • Fixed issue with comma in attrs

0.2.1 / 2010-07-09

  • Added support for node-discount and markdown-js depending on which is available.

  • Added support for tags to have blocks and text. this kinda fucks with arbitrary whitespace unfortunately, but also fixes trailing spaces after tags with blocks.

  • Caching generated functions. Closes #46

0.2.0 / 2010-07-08

  • Added - each support for readable iteration
  • Added markdown-js support (no compilation required)
  • Removed node-discount support

0.1.0 / 2010-07-05

  • Added ${} support for interpolation. Closes #45
  • Added support for quoted attr keys: label("for": 'something') is allowed (although not required) [Guillermo]
  • Added :less filter [jakeluer]

0.0.2 / 2010-07-03

  • Added context as synonym for scope option [Guillermo]
  • Fixed attr splitting: div(style:"color: red") is now allowed
  • Fixed issue with ( and ) within attrs: a(class: (a ? 'a' : 'b')) is now allowed
  • Fixed issue with leading / trailing spaces in attrs: a( href="#" ) is now allowed [Guillermo]