| 1 |
# Release Notes |
| 2 |
|
| 3 |
## Development |
| 4 |
|
| 5 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.12...masterCommits](https://github.com/wycats/handlebars.js/compare/v4.0.12...master](https://github.com/wycats/handlebars.js/compare/v4.0.12...master) |
| 6 |
|
| 7 |
## v4.0.12 - September 4th, 2018 |
| 8 |
New features: |
| 9 |
|
| 10 |
- none |
| 11 |
|
| 12 |
Various dependency updates |
| 13 |
|
| 14 |
- [](https://github.com/wycats/handlebars.js/pull/1464#1464](https://github.com/wycats/handlebars.js/pull/1464](https://github.com/wycats/handlebars.js/pull/1464) - Bump versions of grunt-plugins to 1.x |
| 15 |
- [](https://github.com/wycats/handlebars.js/pull/1398#1398](https://github.com/wycats/handlebars.js/pull/1398](https://github.com/wycats/handlebars.js/pull/1398) - Chore: updated various dev dependencies |
| 16 |
- upgrade uglify-js - d3d3942 |
| 17 |
- Update grunt-eslint to 20.1.0 - 7729aa9 |
| 18 |
- Update dependencies "async" to 2.5.0 and "source-map" to 0.6.1 (73d5637) |
| 19 |
|
| 20 |
Bugfixes: |
| 21 |
|
| 22 |
- [](https://github.com/components/handlebars.js#24components/handlebars.js#24](https://github.com/components/handlebars.js#24](https://github.com/components/handlebars.js#24) Add package.json to components shim |
| 23 |
- Updated `source-map`-package should work better with `rollup`[](https://github.com/wycats/handlebars.js/issues/1463#1463](https://github.com/wycats/handlebars.js/issues/1463](https://github.com/wycats/handlebars.js/issues/1463) |
| 24 |
|
| 25 |
Removed obsolete code: |
| 26 |
|
| 27 |
- unnecessary check - 0ddff8b |
| 28 |
- Use `files` field - 69c6ca5 |
| 29 |
- Update jsfiddle to 4.0.11 - 8947dd0 |
| 30 |
|
| 31 |
Compatibility notes: |
| 32 |
- No compatibility issues are to be expected |
| 33 |
|
| 34 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12Commits](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12) |
| 35 |
|
| 36 |
## v4.0.12 - September 4th, 2018 |
| 37 |
New features: |
| 38 |
|
| 39 |
- none |
| 40 |
|
| 41 |
Various dependency updates |
| 42 |
|
| 43 |
- [](https://github.com/wycats/handlebars.js/pull/1464#1464](https://github.com/wycats/handlebars.js/pull/1464](https://github.com/wycats/handlebars.js/pull/1464) - Bump versions of grunt-plugins to 1.x |
| 44 |
- [](https://github.com/wycats/handlebars.js/pull/1398#1398](https://github.com/wycats/handlebars.js/pull/1398](https://github.com/wycats/handlebars.js/pull/1398) - Chore: updated various dev dependencies |
| 45 |
- upgrade uglify-js - d3d3942 |
| 46 |
- Update grunt-eslint to 20.1.0 - 7729aa9 |
| 47 |
- Update dependencies "async" to 2.5.0 and "source-map" to 0.6.1 (73d5637) |
| 48 |
|
| 49 |
Bugfixes: |
| 50 |
|
| 51 |
- [](https://github.com/components/handlebars.js#24components/handlebars.js#24](https://github.com/components/handlebars.js#24](https://github.com/components/handlebars.js#24) Add package.json to components shim |
| 52 |
- Updated `source-map`-package should work better with `rollup`[](https://github.com/wycats/handlebars.js/issues/1463#1463](https://github.com/wycats/handlebars.js/issues/1463](https://github.com/wycats/handlebars.js/issues/1463) |
| 53 |
|
| 54 |
Removed obsolete code: |
| 55 |
|
| 56 |
- unnecessary check - 0ddff8b |
| 57 |
- Use `files` field - 69c6ca5 |
| 58 |
- Update jsfiddle to 4.0.11 - 8947dd0 |
| 59 |
|
| 60 |
Compatibility notes: |
| 61 |
- No compatibility issues are to be expected |
| 62 |
|
| 63 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12Commits](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.0.12) |
| 64 |
|
| 65 |
## v4.0.12 - September 4th, 2018 |
| 66 |
New features: |
| 67 |
|
| 68 |
- none |
| 69 |
|
| 70 |
Various dependency updates |
| 71 |
|
| 72 |
- [](https://github.com/wycats/handlebars.js/pull/1464#1464](https://github.com/wycats/handlebars.js/pull/1464](https://github.com/wycats/handlebars.js/pull/1464) - Bump versions of grunt-plugins to 1.x |
| 73 |
- [](https://github.com/wycats/handlebars.js/pull/1398#1398](https://github.com/wycats/handlebars.js/pull/1398](https://github.com/wycats/handlebars.js/pull/1398) - Chore: updated various dev dependencies |
| 74 |
- upgrade uglify-js - d3d3942 |
| 75 |
- Update grunt-eslint to 20.1.0 - 7729aa9 |
| 76 |
- Update dependencies "async" to 2.5.0 and "source-map" to 0.6.1 (73d5637) |
| 77 |
|
| 78 |
Bugfixes: |
| 79 |
|
| 80 |
- [](https://github.com/components/handlebars.js#24components/handlebars.js#24](https://github.com/components/handlebars.js#24](https://github.com/components/handlebars.js#24) Add package.json to components shim |
| 81 |
- Updated `source-map`-package should work better with `rollup`[](https://github.com/wycats/handlebars.js/issues/1463#1463](https://github.com/wycats/handlebars.js/issues/1463](https://github.com/wycats/handlebars.js/issues/1463) |
| 82 |
|
| 83 |
Removed obsolete code: |
| 84 |
|
| 85 |
- unnecessary check - 0ddff8b |
| 86 |
- Use `files` field - 69c6ca5 |
| 87 |
- Update jsfiddle to 4.0.11 - 8947dd0 |
| 88 |
|
| 89 |
Compatibility notes: |
| 90 |
- No compatibility issues are to be expected |
| 91 |
|
| 92 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.11...v4.0.12Commits](https://github.com/wycats/handlebars.js/compare/v4.0.11...v4.0.12](https://github.com/wycats/handlebars.js/compare/v4.0.11...v4.0.12) |
| 93 |
|
| 94 |
## v4.0.11 - October 17th, 2017 |
| 95 |
- [](https://github.com/wycats/handlebars.js/issues/1391#1391](https://github.com/wycats/handlebars.js/issues/1391](https://github.com/wycats/handlebars.js/issues/1391) - `uglify-js` is unconditionally imported, but only listed as optional dependency ([](https://github.com/Turbo87@Turbo87](https://github.com/Turbo87](https://github.com/Turbo87)) |
| 96 |
- [](https://github.com/wycats/handlebars.js/issues/1233#1233](https://github.com/wycats/handlebars.js/issues/1233](https://github.com/wycats/handlebars.js/issues/1233) - Unable to build under windows - error at test:bin task ([](https://github.com/blikblum@blikblum](https://github.com/blikblum](https://github.com/blikblum)) |
| 97 |
- Update (C) year in the LICENSE file - 21386b6 |
| 98 |
|
| 99 |
Compatibility notes: |
| 100 |
- This is a bugfix release. There are no breaking change and no new features. |
| 101 |
|
| 102 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.10...v4.0.11Commits](https://github.com/wycats/handlebars.js/compare/v4.0.10...v4.0.11](https://github.com/wycats/handlebars.js/compare/v4.0.10...v4.0.11) |
| 103 |
|
| 104 |
## v4.0.10 - May 21st, 2017 |
| 105 |
- Fix regression in 4.0.9: Replace "Object.assign" (not support in IE) by "util/extend" - 0e953d1 |
| 106 |
|
| 107 |
|
| 108 |
|
| 109 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.9...v4.0.10Commits](https://github.com/wycats/handlebars.js/compare/v4.0.9...v4.0.10](https://github.com/wycats/handlebars.js/compare/v4.0.9...v4.0.10) |
| 110 |
|
| 111 |
## v4.0.9 - May 21st, 2017 |
| 112 |
|
| 113 |
- [](https://github.com/wycats/handlebars.js/issues/1327#1327](https://github.com/wycats/handlebars.js/issues/1327](https://github.com/wycats/handlebars.js/issues/1327) Handlebars.compile() does not modify "options" anymore |
| 114 |
- pending [](https://github.com/wycats/handlebars.js/issues/1331#1331](https://github.com/wycats/handlebars.js/issues/1331](https://github.com/wycats/handlebars.js/issues/1331) Attempts to build Handlebars in a Windows environment |
| 115 |
- Fix build in windows - cc554a5 |
| 116 |
- Ensure LF line-edings in handlebars-template fixtures (*.hbs) - ed879a6 |
| 117 |
- Run integration test with `node handlebars -a ...` on Windows - 2e21e2b |
| 118 |
- Ensure LF line-edings in lexer-files (*.l) - bdfdbea |
| 119 |
- Force LF line-endings for spec/artifacts - b50ef03 |
| 120 |
- Use istanbul/lib/cli.js instead of node_modules/.bin/istanbul - 6e6269f |
| 121 |
- TravisCI: Publish valid semver tags independently of the branch - 7378f85 |
| 122 |
|
| 123 |
Compatibility notes: |
| 124 |
- No compatibility issues are expected. |
| 125 |
|
| 126 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.8...v4.0.9Commits](https://github.com/wycats/handlebars.js/compare/v4.0.8...v4.0.9](https://github.com/wycats/handlebars.js/compare/v4.0.8...v4.0.9) |
| 127 |
|
| 128 |
## v4.0.8 - May 2nd, 2017 |
| 129 |
- [](https://github.com/wycats/handlebars.js/issues/1341#1341](https://github.com/wycats/handlebars.js/issues/1341](https://github.com/wycats/handlebars.js/issues/1341) [](https://github.com/wycats/handlebars.js/issues/1342#1342](https://github.com/wycats/handlebars.js/issues/1342](https://github.com/wycats/handlebars.js/issues/1342) Allow partial-blocks to be executed without "options" ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - a00c598 |
| 130 |
|
| 131 |
Compatibility notes: |
| 132 |
- No breaking changes |
| 133 |
|
| 134 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.7...v4.0.8Commits](https://github.com/wycats/handlebars.js/compare/v4.0.7...v4.0.8](https://github.com/wycats/handlebars.js/compare/v4.0.7...v4.0.8) |
| 135 |
|
| 136 |
## v4.0.7 - April 29th, 2017 |
| 137 |
- [](https://github.com/wycats/handlebars.js/issues/1319#1319](https://github.com/wycats/handlebars.js/issues/1319](https://github.com/wycats/handlebars.js/issues/1319): Fix context-stack when calling block-helpers on null values ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - c8f4b57 |
| 138 |
- [](https://github.com/wycats/handlebars.js/pull/1315#1315](https://github.com/wycats/handlebars.js/pull/1315](https://github.com/wycats/handlebars.js/pull/1315) Parser: Change suffix to use ES6 default module export ([](https://github.com/Turbo87@Turbo87](https://github.com/Turbo87](https://github.com/Turbo87))- b617375 |
| 139 |
- [](https://github.com/wycats/handlebars.js/pull/1290#1290](https://github.com/wycats/handlebars.js/pull/1290](https://github.com/wycats/handlebars.js/pull/1290) [](https://github.com/wycats/handlebars.js/issue/1290#1252](https://github.com/wycats/handlebars.js/issue/1290](https://github.com/wycats/handlebars.js/issue/1290) Add more tests for partial-blocks and inline partials ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - 63a8e0c |
| 140 |
- [](https://github.com/wycats/handlebars.js/issue/1290#1252](https://github.com/wycats/handlebars.js/issue/1290](https://github.com/wycats/handlebars.js/issue/1290) Using @partial-block twice in a template not possible ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - 5a164d0 |
| 141 |
- [](https://github.com/wycats/handlebars.js/pull/1310#1310](https://github.com/wycats/handlebars.js/pull/1310](https://github.com/wycats/handlebars.js/pull/1310) Avoid duplicate "sourceMappingURL=" lines. ([](https://github.com/joonas-lahtinen@joonas-lahtinen](https://github.com/joonas-lahtinen](https://github.com/joonas-lahtinen)) - 01b0f65 |
| 142 |
- [](https://github.com/wycats/handlebars.js/pull/1275#1275](https://github.com/wycats/handlebars.js/pull/1275](https://github.com/wycats/handlebars.js/pull/1275) require('sys') is deprecated, using 'util' instead ([](https://github.com/travnels@travnels](https://github.com/travnels](https://github.com/travnels)) - 406f2ee |
| 143 |
- [](https://github.com/wycats/handlebars.js/pull/1285#1285](https://github.com/wycats/handlebars.js/pull/1285](https://github.com/wycats/handlebars.js/pull/1285) [](https://github.com/wycats/handlebars.js/issues/1284#1284](https://github.com/wycats/handlebars.js/issues/1284](https://github.com/wycats/handlebars.js/issues/1284) Make "column"-property of Errors enumerable ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - a023cb4 |
| 144 |
- [](https://github.com/wycats/handlebars.js/pull/1285#1285](https://github.com/wycats/handlebars.js/pull/1285](https://github.com/wycats/handlebars.js/pull/1285) Testcase to verify that compile-errors have a column-property ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) - c7dc353 |
| 145 |
|
| 146 |
[](https://github.com/lawnsea/handlebars.js/compare/v4.0.6...v4.0.7Commits](https://github.com/lawnsea/handlebars.js/compare/v4.0.6...v4.0.7](https://github.com/lawnsea/handlebars.js/compare/v4.0.6...v4.0.7) |
| 147 |
|
| 148 |
## v4.0.6 - November 12th, 2016 |
| 149 |
- [](https://github.com/wycats/handlebars.js/pull/1243#1243](https://github.com/wycats/handlebars.js/pull/1243](https://github.com/wycats/handlebars.js/pull/1243) - Walk up data frames for nested @partial-block ([](https://github.com/lawnsea@lawnsea](https://github.com/lawnsea](https://github.com/lawnsea)) |
| 150 |
- [](https://github.com/wycats/handlebars.js/pull/1210#1210](https://github.com/wycats/handlebars.js/pull/1210](https://github.com/wycats/handlebars.js/pull/1210) - Add a new lightweight package based on handlebars in the README ([](https://github.com/kabirbaidhya@kabirbaidhya](https://github.com/kabirbaidhya](https://github.com/kabirbaidhya)) |
| 151 |
- [](https://github.com/wycats/handlebars.js/pull/1187#1187](https://github.com/wycats/handlebars.js/pull/1187](https://github.com/wycats/handlebars.js/pull/1187) - Ensure that existing blockParams and depths are respected on dupe programs ([](https://github.com/charleso@charleso](https://github.com/charleso](https://github.com/charleso)) |
| 152 |
- [](https://github.com/wycats/handlebars.js/pull/1191#1191](https://github.com/wycats/handlebars.js/pull/1191](https://github.com/wycats/handlebars.js/pull/1191) - Added cory ([](https://github.com/leo@leo](https://github.com/leo](https://github.com/leo)) |
| 153 |
- [](https://github.com/wycats/handlebars.js/pull/1177#1177](https://github.com/wycats/handlebars.js/pull/1177](https://github.com/wycats/handlebars.js/pull/1177) - Preserve License info in Closure Compiler ([](https://github.com/gennadiylitvinyuk@gennadiylitvinyuk](https://github.com/gennadiylitvinyuk](https://github.com/gennadiylitvinyuk)) |
| 154 |
- [](https://github.com/wycats/handlebars.js/pull/1171#1171](https://github.com/wycats/handlebars.js/pull/1171](https://github.com/wycats/handlebars.js/pull/1171) - Contributing doc fix: failing thats -> failing tests ([](https://github.com/paulfalgout@paulfalgout](https://github.com/paulfalgout](https://github.com/paulfalgout)) |
| 155 |
- [](https://github.com/wycats/handlebars.js/pull/1166#1166](https://github.com/wycats/handlebars.js/pull/1166](https://github.com/wycats/handlebars.js/pull/1166) - Update license date ([](https://github.com/timwangdev@timwangdev](https://github.com/timwangdev](https://github.com/timwangdev)) |
| 156 |
- Update jsfiddle to point to latest - 959ee55 (originally dfc7554 by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 157 |
- [](https://github.com/wycats/handlebars.js/pull/1163#1163](https://github.com/wycats/handlebars.js/pull/1163](https://github.com/wycats/handlebars.js/pull/1163) - Fix typos on decorators-api.md. ([](https://github.com/adjohnson916@adjohnson916](https://github.com/adjohnson916](https://github.com/adjohnson916)) |
| 158 |
- Drop extra Error params - 8c19874 (originally 63fdb92 by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 159 |
- [](https://github.com/wycats/handlebars.js/pull/1153#1153](https://github.com/wycats/handlebars.js/pull/1153](https://github.com/wycats/handlebars.js/pull/1153) - Add documentation for running tests to contributing.md ([](https://github.com/ryanmurakami@ryanmurakami](https://github.com/ryanmurakami](https://github.com/ryanmurakami)) |
| 160 |
- Avoid error in older browsers in test - 400916c (originally a6121ca by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 161 |
- Update target browser test versions - fee2334 (originally 871c32a by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 162 |
- Exclude coverage check in exception conditional - 32d6363 (originally 326734b by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 163 |
- Fix throw when creating exception object in Safari - 20c965c (originally 2ea6119 by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 164 |
- Update build for modern node versions - 6c9f98c (originally 8289c0b by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 165 |
- [](https://github.com/wycats/handlebars.js/issues/1135#1135](https://github.com/wycats/handlebars.js/issues/1135](https://github.com/wycats/handlebars.js/issues/1135) - Relax depth check for context push - c393c81 (originally 25458fd by [](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 166 |
|
| 167 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.5...v4.0.6Commits](https://github.com/wycats/handlebars.js/compare/v4.0.5...v4.0.6](https://github.com/wycats/handlebars.js/compare/v4.0.5...v4.0.6) |
| 168 |
|
| 169 |
## v4.0.5 - November 19th, 2015 |
| 170 |
- [](https://github.com/wycats/handlebars.js/pull/1132#1132](https://github.com/wycats/handlebars.js/pull/1132](https://github.com/wycats/handlebars.js/pull/1132) - Update uglify-js to avoid vulnerability ([](https://github.com/plynchnlm@plynchnlm](https://github.com/plynchnlm](https://github.com/plynchnlm)) |
| 171 |
- [](https://github.com/wycats/handlebars.js/issues/1129#1129](https://github.com/wycats/handlebars.js/issues/1129](https://github.com/wycats/handlebars.js/issues/1129) - Minified lib returns an empty string ([](https://github.com/bricss@bricss](https://github.com/bricss](https://github.com/bricss)) |
| 172 |
- Return current handlebars instance from noConflict - 685cf92 |
| 173 |
- Add webpack to dev dependency to support npm 3 - 7a6c228 |
| 174 |
- Further relax uglify dependency - 0a3b3c2 |
| 175 |
- Include tests for minimized artifacts - c21118d |
| 176 |
- Fix lint errors under latest eslint - 9f59de9 |
| 177 |
- Add print-script helper script - 98a6717 |
| 178 |
|
| 179 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.4...v4.0.5Commits](https://github.com/wycats/handlebars.js/compare/v4.0.4...v4.0.5](https://github.com/wycats/handlebars.js/compare/v4.0.4...v4.0.5) |
| 180 |
|
| 181 |
## v4.0.4 - October 29th, 2015 |
| 182 |
- [](https://github.com/wycats/handlebars.js/pull/1121#1121](https://github.com/wycats/handlebars.js/pull/1121](https://github.com/wycats/handlebars.js/pull/1121) - Include partial name in 'undefined partial' exception message ([](https://github.com/shinypb@shinypb](https://github.com/shinypb](https://github.com/shinypb)) |
| 183 |
- [](https://github.com/wycats/handlebars.js/pull/1125#1125](https://github.com/wycats/handlebars.js/pull/1125](https://github.com/wycats/handlebars.js/pull/1125) - Add promised-handlebars to "in-the-wild"-list ([](https://github.com/nknapp@nknapp](https://github.com/nknapp](https://github.com/nknapp)) |
| 184 |
|
| 185 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.3...v4.0.4Commits](https://github.com/wycats/handlebars.js/compare/v4.0.3...v4.0.4](https://github.com/wycats/handlebars.js/compare/v4.0.3...v4.0.4) |
| 186 |
|
| 187 |
## v4.0.3 - September 23rd, 2015 |
| 188 |
- [](https://github.com/wycats/handlebars.js/issues/1099#1099](https://github.com/wycats/handlebars.js/issues/1099](https://github.com/wycats/handlebars.js/issues/1099) - @partial-block is overridden ([](https://github.com/btmorex@btmorex](https://github.com/btmorex](https://github.com/btmorex)) |
| 189 |
- [](https://github.com/wycats/handlebars.js/issues/1093#1093](https://github.com/wycats/handlebars.js/issues/1093](https://github.com/wycats/handlebars.js/issues/1093) - #each skips iteration on undefined values ([](https://github.com/florianpilz@florianpilz](https://github.com/florianpilz](https://github.com/florianpilz)) |
| 190 |
- [](https://github.com/wycats/handlebars.js/issues/1092#1092](https://github.com/wycats/handlebars.js/issues/1092](https://github.com/wycats/handlebars.js/issues/1092) - Square braces in key name ([](https://github.com/distantnative@distantnative](https://github.com/distantnative](https://github.com/distantnative)) |
| 191 |
- [](https://github.com/wycats/handlebars.js/pull/1091#1091](https://github.com/wycats/handlebars.js/pull/1091](https://github.com/wycats/handlebars.js/pull/1091) - fix typo in release notes ([](https://github.com/nikolas@nikolas](https://github.com/nikolas](https://github.com/nikolas)) |
| 192 |
- [](https://github.com/wycats/handlebars.js/pull/1090#1090](https://github.com/wycats/handlebars.js/pull/1090](https://github.com/wycats/handlebars.js/pull/1090) - grammar fixes in 4.0.0 release notes ([](https://github.com/nikolas@nikolas](https://github.com/nikolas](https://github.com/nikolas)) |
| 193 |
|
| 194 |
Compatibility notes: |
| 195 |
- `each` iteration with `undefined` values has been restored to the 3.0 behaviors. Helper calls with undefined context values will now execute against an arbitrary empty object to avoid executing against global object in non-strict mode. |
| 196 |
- `]` can now be included in `[]` wrapped identifiers by escaping with `\`. Any `[]` identifiers that include `\` will now have to properly escape these values. |
| 197 |
|
| 198 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.2...v4.0.3Commits](https://github.com/wycats/handlebars.js/compare/v4.0.2...v4.0.3](https://github.com/wycats/handlebars.js/compare/v4.0.2...v4.0.3) |
| 199 |
|
| 200 |
## v4.0.2 - September 4th, 2015 |
| 201 |
- [](https://github.com/wycats/handlebars.js/issues/1089#1089](https://github.com/wycats/handlebars.js/issues/1089](https://github.com/wycats/handlebars.js/issues/1089) - "Failover content" not working in multiple levels of inline partials ([](https://github.com/michaellopez@michaellopez](https://github.com/michaellopez](https://github.com/michaellopez)) |
| 202 |
|
| 203 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.1...v4.0.2Commits](https://github.com/wycats/handlebars.js/compare/v4.0.1...v4.0.2](https://github.com/wycats/handlebars.js/compare/v4.0.1...v4.0.2) |
| 204 |
|
| 205 |
## v4.0.1 - September 2nd, 2015 |
| 206 |
- Fix failure when using decorators in partials - 05b82a2 |
| 207 |
|
| 208 |
[](https://github.com/wycats/handlebars.js/compare/v4.0.0...v4.0.1Commits](https://github.com/wycats/handlebars.js/compare/v4.0.0...v4.0.1](https://github.com/wycats/handlebars.js/compare/v4.0.0...v4.0.1) |
| 209 |
|
| 210 |
## v4.0.0 - September 1st, 2015 |
| 211 |
- [](https://github.com/wycats/handlebars.js/pull/1082#1082](https://github.com/wycats/handlebars.js/pull/1082](https://github.com/wycats/handlebars.js/pull/1082) - Decorators and Inline Partials ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 212 |
- [](https://github.com/wycats/handlebars.js/pull/1076#1076](https://github.com/wycats/handlebars.js/pull/1076](https://github.com/wycats/handlebars.js/pull/1076) - Implement partial blocks ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 213 |
- [](https://github.com/wycats/handlebars.js/pull/1087#1087](https://github.com/wycats/handlebars.js/pull/1087](https://github.com/wycats/handlebars.js/pull/1087) - Fix #each when last object entry has empty key ([](https://github.com/denniskuczynski@denniskuczynski](https://github.com/denniskuczynski](https://github.com/denniskuczynski)) |
| 214 |
- [](https://github.com/wycats/handlebars.js/pull/1084#1084](https://github.com/wycats/handlebars.js/pull/1084](https://github.com/wycats/handlebars.js/pull/1084) - Bump uglify version to fix vulnerability ([](https://github.com/John-Steidley@John-Steidley](https://github.com/John-Steidley](https://github.com/John-Steidley)) |
| 215 |
- [](https://github.com/wycats/handlebars.js/pull/1068#1068](https://github.com/wycats/handlebars.js/pull/1068](https://github.com/wycats/handlebars.js/pull/1068) - Fix typo ([](https://github.com/0xack13@0xack13](https://github.com/0xack13](https://github.com/0xack13)) |
| 216 |
- [](https://github.com/wycats/handlebars.js/pull/1060#1060](https://github.com/wycats/handlebars.js/pull/1060](https://github.com/wycats/handlebars.js/pull/1060) - #1056 Fixed grammar for nested raw blocks ([](https://github.com/ericbn@ericbn](https://github.com/ericbn](https://github.com/ericbn)) |
| 217 |
- [](https://github.com/wycats/handlebars.js/pull/1052#1052](https://github.com/wycats/handlebars.js/pull/1052](https://github.com/wycats/handlebars.js/pull/1052) - Updated year in License ([](https://github.com/maqnouch@maqnouch](https://github.com/maqnouch](https://github.com/maqnouch)) |
| 218 |
- [](https://github.com/wycats/handlebars.js/pull/1037#1037](https://github.com/wycats/handlebars.js/pull/1037](https://github.com/wycats/handlebars.js/pull/1037) - Fix minor typos in README ([](https://github.com/tomxtobin@tomxtobin](https://github.com/tomxtobin](https://github.com/tomxtobin)) |
| 219 |
- [](https://github.com/wycats/handlebars.js/issues/1032#1032](https://github.com/wycats/handlebars.js/issues/1032](https://github.com/wycats/handlebars.js/issues/1032) - Is it possible to render a partial without the parent scope? ([](https://github.com/aputinski@aputinski](https://github.com/aputinski](https://github.com/aputinski)) |
| 220 |
- [](https://github.com/wycats/handlebars.js/pull/1019#1019](https://github.com/wycats/handlebars.js/pull/1019](https://github.com/wycats/handlebars.js/pull/1019) - Fixes typo in tests ([](https://github.com/aymerick@aymerick](https://github.com/aymerick](https://github.com/aymerick)) |
| 221 |
- [](https://github.com/wycats/handlebars.js/issues/1016#1016](https://github.com/wycats/handlebars.js/issues/1016](https://github.com/wycats/handlebars.js/issues/1016) - Version mis-match ([](https://github.com/mayankdedhia@mayankdedhia](https://github.com/mayankdedhia](https://github.com/mayankdedhia)) |
| 222 |
- [](https://github.com/wycats/handlebars.js/issues/1023#1023](https://github.com/wycats/handlebars.js/issues/1023](https://github.com/wycats/handlebars.js/issues/1023) - is it possible for nested custom helpers to communicate between each other? |
| 223 |
- [](https://github.com/wycats/handlebars.js/issues/893#893](https://github.com/wycats/handlebars.js/issues/893](https://github.com/wycats/handlebars.js/issues/893) - [Proposal] Section blocks. |
| 224 |
- [](https://github.com/wycats/handlebars.js/issues/792#792](https://github.com/wycats/handlebars.js/issues/792](https://github.com/wycats/handlebars.js/issues/792) - feature request: inline partial definitions |
| 225 |
- [](https://github.com/wycats/handlebars.js/issues/583#583](https://github.com/wycats/handlebars.js/issues/583](https://github.com/wycats/handlebars.js/issues/583) - Parent path continues to drill down depth with multiple conditionals |
| 226 |
- [](https://github.com/wycats/handlebars.js/issues/404#404](https://github.com/wycats/handlebars.js/issues/404](https://github.com/wycats/handlebars.js/issues/404) - Add named child helpers that can be referenced by block helpers |
| 227 |
- Escape = in HTML content - [](https://github.com/wycats/handlebars.js/commit/83b8e8483b8e84](https://github.com/wycats/handlebars.js/commit/83b8e84](https://github.com/wycats/handlebars.js/commit/83b8e84) |
| 228 |
- Drop AST constructors in favor of JSON - [](https://github.com/wycats/handlebars.js/commit/95d84ba95d84ba](https://github.com/wycats/handlebars.js/commit/95d84ba](https://github.com/wycats/handlebars.js/commit/95d84ba) |
| 229 |
- Pass container rather than exec as context - [](https://github.com/wycats/handlebars.js/commit/9a2d1d69a2d1d6](https://github.com/wycats/handlebars.js/commit/9a2d1d6](https://github.com/wycats/handlebars.js/commit/9a2d1d6) |
| 230 |
- Add ignoreStandalone compiler option - [](https://github.com/wycats/handlebars.js/commit/ea3a5a1ea3a5a1](https://github.com/wycats/handlebars.js/commit/ea3a5a1](https://github.com/wycats/handlebars.js/commit/ea3a5a1) |
| 231 |
- Ignore empty when iterating on sparse arrays - [](https://github.com/wycats/handlebars.js/commit/06d515a06d515a](https://github.com/wycats/handlebars.js/commit/06d515a](https://github.com/wycats/handlebars.js/commit/06d515a) |
| 232 |
- Add support for string and stdin precompilation - [](https://github.com/wycats/handlebars.js/commit/0de8dac0de8dac](https://github.com/wycats/handlebars.js/commit/0de8dac](https://github.com/wycats/handlebars.js/commit/0de8dac) |
| 233 |
- Simplify object assignment generation logic - [](https://github.com/wycats/handlebars.js/commit/77e6bfc77e6bfc](https://github.com/wycats/handlebars.js/commit/77e6bfc](https://github.com/wycats/handlebars.js/commit/77e6bfc) |
| 234 |
- Bulletproof AST.helpers.helperExpression - [](https://github.com/wycats/handlebars.js/commit/93b076093b0760](https://github.com/wycats/handlebars.js/commit/93b0760](https://github.com/wycats/handlebars.js/commit/93b0760) |
| 235 |
- Always return string responses - [](https://github.com/wycats/handlebars.js/commit/8e868ab8e868ab](https://github.com/wycats/handlebars.js/commit/8e868ab](https://github.com/wycats/handlebars.js/commit/8e868ab) |
| 236 |
- Pass undefined fields to helpers in strict mode - [](https://github.com/wycats/handlebars.js/commit/5d4b8da5d4b8da](https://github.com/wycats/handlebars.js/commit/5d4b8da](https://github.com/wycats/handlebars.js/commit/5d4b8da) |
| 237 |
- Avoid depth creation when context remains the same - [](https://github.com/wycats/handlebars.js/commit/279e038279e038](https://github.com/wycats/handlebars.js/commit/279e038](https://github.com/wycats/handlebars.js/commit/279e038) |
| 238 |
- Improve logging API - [](https://github.com/wycats/handlebars.js/commit/9a49d359a49d35](https://github.com/wycats/handlebars.js/commit/9a49d35](https://github.com/wycats/handlebars.js/commit/9a49d35) |
| 239 |
- Fix with operator in no @data mode - [](https://github.com/wycats/handlebars.js/commit/231a8d7231a8d7](https://github.com/wycats/handlebars.js/commit/231a8d7](https://github.com/wycats/handlebars.js/commit/231a8d7) |
| 240 |
- Allow empty key name in each iteration - [](https://github.com/wycats/handlebars.js/commit/1bb640b1bb640b](https://github.com/wycats/handlebars.js/commit/1bb640b](https://github.com/wycats/handlebars.js/commit/1bb640b) |
| 241 |
- Add with block parameter support - [](https://github.com/wycats/handlebars.js/commit/2a851062a85106](https://github.com/wycats/handlebars.js/commit/2a85106](https://github.com/wycats/handlebars.js/commit/2a85106) |
| 242 |
- Fix escaping of non-javascript identifiers - [](https://github.com/wycats/handlebars.js/commit/410141c410141c](https://github.com/wycats/handlebars.js/commit/410141c](https://github.com/wycats/handlebars.js/commit/410141c) |
| 243 |
- Fix location information for programs - [](https://github.com/wycats/handlebars.js/commit/93faffa93faffa](https://github.com/wycats/handlebars.js/commit/93faffa](https://github.com/wycats/handlebars.js/commit/93faffa) |
| 244 |
|
| 245 |
Compatibility notes: |
| 246 |
- Depthed paths are now conditionally pushed on to the stack. If the helper uses the same context, then a new stack is not created. This leads to behavior that better matches expectations for helpers like `if` that do not seem to alter the context. Any instances of `../` in templates will need to be checked for the correct behavior under 4.0.0. In general templates will either reduce the number of `../` instances or leave them as is. See [](https://github.com/wycats/handlebars.js/issues/1028#1028](https://github.com/wycats/handlebars.js/issues/1028](https://github.com/wycats/handlebars.js/issues/1028). |
| 247 |
- The `=` character is now HTML escaped. This closes a potential exploit case when using unquoted attributes, i.e. `<div foo={{bar}}>`. In general it's recommended that attributes always be quoted when their values are generated from a mustache to avoid any potential exploit surfaces. |
| 248 |
- AST constructors have been dropped in favor of plain old javascript objects |
| 249 |
- The runtime version has been increased. Precompiled templates will need to use runtime of at least 4.0.0. |
| 250 |
|
| 251 |
[](https://github.com/wycats/handlebars.js/compare/v3.0.3...v4.0.0Commits](https://github.com/wycats/handlebars.js/compare/v3.0.3...v4.0.0](https://github.com/wycats/handlebars.js/compare/v3.0.3...v4.0.0) |
| 252 |
|
| 253 |
## v3.0.3 - April 28th, 2015 |
| 254 |
- [](https://github.com/wycats/handlebars.js/issues/1004#1004](https://github.com/wycats/handlebars.js/issues/1004](https://github.com/wycats/handlebars.js/issues/1004) - Latest version breaks with RequireJS (global is undefined) ([](https://github.com/boskee@boskee](https://github.com/boskee](https://github.com/boskee)) |
| 255 |
|
| 256 |
[](https://github.com/wycats/handlebars.js/compare/v3.0.2...v3.0.3Commits](https://github.com/wycats/handlebars.js/compare/v3.0.2...v3.0.3](https://github.com/wycats/handlebars.js/compare/v3.0.2...v3.0.3) |
| 257 |
|
| 258 |
## v3.0.2 - April 20th, 2015 |
| 259 |
- [](https://github.com/wycats/handlebars.js/pull/998#998](https://github.com/wycats/handlebars.js/pull/998](https://github.com/wycats/handlebars.js/pull/998) - Add full support for es6 ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 260 |
- [](https://github.com/wycats/handlebars.js/issues/994#994](https://github.com/wycats/handlebars.js/issues/994](https://github.com/wycats/handlebars.js/issues/994) - Access Handlebars.Visitor in browser ([](https://github.com/tamlyn@tamlyn](https://github.com/tamlyn](https://github.com/tamlyn)) |
| 261 |
- [](https://github.com/wycats/handlebars.js/issues/990#990](https://github.com/wycats/handlebars.js/issues/990](https://github.com/wycats/handlebars.js/issues/990) - Allow passing null/undefined literals subexpressions ([](https://github.com/blimmer@blimmer](https://github.com/blimmer](https://github.com/blimmer)) |
| 262 |
- [](https://github.com/wycats/handlebars.js/issues/989#989](https://github.com/wycats/handlebars.js/issues/989](https://github.com/wycats/handlebars.js/issues/989) - Source-map error with requirejs ([](https://github.com/SteppeEagle@SteppeEagle](https://github.com/SteppeEagle](https://github.com/SteppeEagle)) |
| 263 |
- [](https://github.com/wycats/handlebars.js/issues/967#967](https://github.com/wycats/handlebars.js/issues/967](https://github.com/wycats/handlebars.js/issues/967) - can't access "this" property ([](https://github.com/75lb@75lb](https://github.com/75lb](https://github.com/75lb)) |
| 264 |
- Use captureStackTrace for error handler - a009a97 |
| 265 |
- Ignore branches tested without coverage monitoring - 37a664b |
| 266 |
|
| 267 |
[](https://github.com/wycats/handlebars.js/compare/v3.0.1...v3.0.2Commits](https://github.com/wycats/handlebars.js/compare/v3.0.1...v3.0.2](https://github.com/wycats/handlebars.js/compare/v3.0.1...v3.0.2) |
| 268 |
|
| 269 |
## v3.0.1 - March 24th, 2015 |
| 270 |
- [](https://github.com/wycats/handlebars.js/pull/984#984](https://github.com/wycats/handlebars.js/pull/984](https://github.com/wycats/handlebars.js/pull/984) - Adding documentation for passing arguments into partials ([](https://github.com/johneke@johneke](https://github.com/johneke](https://github.com/johneke)) |
| 271 |
- [](https://github.com/wycats/handlebars.js/issues/973#973](https://github.com/wycats/handlebars.js/issues/973](https://github.com/wycats/handlebars.js/issues/973) - version 3 is slower than version 2 ([](https://github.com/elover@elover](https://github.com/elover](https://github.com/elover)) |
| 272 |
- [](https://github.com/wycats/handlebars.js/issues/966#966](https://github.com/wycats/handlebars.js/issues/966](https://github.com/wycats/handlebars.js/issues/966) - "handlebars --version" does not work with v3.0.0 ([](https://github.com/abloomston@abloomston](https://github.com/abloomston](https://github.com/abloomston)) |
| 273 |
- [](https://github.com/wycats/handlebars.js/pull/964#964](https://github.com/wycats/handlebars.js/pull/964](https://github.com/wycats/handlebars.js/pull/964) - default is a reserved word ([](https://github.com/grassick@grassick](https://github.com/grassick](https://github.com/grassick)) |
| 274 |
- [](https://github.com/wycats/handlebars.js/pull/962#962](https://github.com/wycats/handlebars.js/pull/962](https://github.com/wycats/handlebars.js/pull/962) - Add dashbars' link on README. ([](https://github.com/pismute@pismute](https://github.com/pismute](https://github.com/pismute)) |
| 275 |
|
| 276 |
[](https://github.com/wycats/handlebars.js/compare/v3.0.0...v3.0.1Commits](https://github.com/wycats/handlebars.js/compare/v3.0.0...v3.0.1](https://github.com/wycats/handlebars.js/compare/v3.0.0...v3.0.1) |
| 277 |
|
| 278 |
## v3.0.0 - February 10th, 2015 |
| 279 |
- [](https://github.com/wycats/handlebars.js/pull/941#941](https://github.com/wycats/handlebars.js/pull/941](https://github.com/wycats/handlebars.js/pull/941) - Add support for dynamic partial names ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 280 |
- [](https://github.com/wycats/handlebars.js/pull/940#940](https://github.com/wycats/handlebars.js/pull/940](https://github.com/wycats/handlebars.js/pull/940) - Add missing reserved words so compiler knows to use array syntax: ([](https://github.com/mattflaschen@mattflaschen](https://github.com/mattflaschen](https://github.com/mattflaschen)) |
| 281 |
- [](https://github.com/wycats/handlebars.js/pull/938#938](https://github.com/wycats/handlebars.js/pull/938](https://github.com/wycats/handlebars.js/pull/938) - Fix example using #with helper ([](https://github.com/diwo@diwo](https://github.com/diwo](https://github.com/diwo)) |
| 282 |
- [](https://github.com/wycats/handlebars.js/pull/930#930](https://github.com/wycats/handlebars.js/pull/930](https://github.com/wycats/handlebars.js/pull/930) - Add parent tracking and mutation to AST visitors ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 283 |
- [](https://github.com/wycats/handlebars.js/issues/926#926](https://github.com/wycats/handlebars.js/issues/926](https://github.com/wycats/handlebars.js/issues/926) - Depthed lookups fail when program duplicator runs ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 284 |
- [](https://github.com/wycats/handlebars.js/pull/918#918](https://github.com/wycats/handlebars.js/pull/918](https://github.com/wycats/handlebars.js/pull/918) - Add instructions for 'spec/mustache' to CONTRIBUTING.md, fix a few typos ([](https://github.com/oneeman@oneeman](https://github.com/oneeman](https://github.com/oneeman)) |
| 285 |
- [](https://github.com/wycats/handlebars.js/pull/915#915](https://github.com/wycats/handlebars.js/pull/915](https://github.com/wycats/handlebars.js/pull/915) - Ast update ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 286 |
- [](https://github.com/wycats/handlebars.js/issues/910#910](https://github.com/wycats/handlebars.js/issues/910](https://github.com/wycats/handlebars.js/issues/910) - Different behavior of {{@last}} when {{#each}} in {{#each}} ([](https://github.com/zordius@zordius](https://github.com/zordius](https://github.com/zordius)) |
| 287 |
- [](https://github.com/wycats/handlebars.js/issues/907#907](https://github.com/wycats/handlebars.js/issues/907](https://github.com/wycats/handlebars.js/issues/907) - Implement named helper variable references ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 288 |
- [](https://github.com/wycats/handlebars.js/pull/906#906](https://github.com/wycats/handlebars.js/pull/906](https://github.com/wycats/handlebars.js/pull/906) - Add parser support for block params ([](https://github.com/mmun@mmun](https://github.com/mmun](https://github.com/mmun)) |
| 289 |
- [](https://github.com/wycats/handlebars.js/issues/903#903](https://github.com/wycats/handlebars.js/issues/903](https://github.com/wycats/handlebars.js/issues/903) - Only provide aliases for multiple use calls ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 290 |
- [](https://github.com/wycats/handlebars.js/pull/902#902](https://github.com/wycats/handlebars.js/pull/902](https://github.com/wycats/handlebars.js/pull/902) - Generate Source Maps ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 291 |
- [](https://github.com/wycats/handlebars.js/issues/901#901](https://github.com/wycats/handlebars.js/issues/901](https://github.com/wycats/handlebars.js/issues/901) - Still escapes with noEscape enabled on isolated Handlebars environment ([](https://github.com/zedknight@zedknight](https://github.com/zedknight](https://github.com/zedknight)) |
| 292 |
- [](https://github.com/wycats/handlebars.js/pull/896#896](https://github.com/wycats/handlebars.js/pull/896](https://github.com/wycats/handlebars.js/pull/896) - Simplify BlockNode by removing intermediate MustacheNode ([](https://github.com/mmun@mmun](https://github.com/mmun](https://github.com/mmun)) |
| 293 |
- [](https://github.com/wycats/handlebars.js/pull/892#892](https://github.com/wycats/handlebars.js/pull/892](https://github.com/wycats/handlebars.js/pull/892) - Implement parser for else chaining of helpers ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 294 |
- [](https://github.com/wycats/handlebars.js/issues/889#889](https://github.com/wycats/handlebars.js/issues/889](https://github.com/wycats/handlebars.js/issues/889) - Consider extensible parser API ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 295 |
- [](https://github.com/wycats/handlebars.js/issues/887#887](https://github.com/wycats/handlebars.js/issues/887](https://github.com/wycats/handlebars.js/issues/887) - Handlebars.noConflict() option? ([](https://github.com/bradvogel@bradvogel](https://github.com/bradvogel](https://github.com/bradvogel)) |
| 296 |
- [](https://github.com/wycats/handlebars.js/issues/886#886](https://github.com/wycats/handlebars.js/issues/886](https://github.com/wycats/handlebars.js/issues/886) - Add SafeString to context (or use duck-typing) ([](https://github.com/dominicbarnes@dominicbarnes](https://github.com/dominicbarnes](https://github.com/dominicbarnes)) |
| 297 |
- [](https://github.com/wycats/handlebars.js/pull/870#870](https://github.com/wycats/handlebars.js/pull/870](https://github.com/wycats/handlebars.js/pull/870) - Registering undefined partial throws exception. ([](https://github.com/max-b@max-b](https://github.com/max-b](https://github.com/max-b)) |
| 298 |
- [](https://github.com/wycats/handlebars.js/issues/866#866](https://github.com/wycats/handlebars.js/issues/866](https://github.com/wycats/handlebars.js/issues/866) - comments don't respect whitespace control ([](https://github.com/75lb@75lb](https://github.com/75lb](https://github.com/75lb)) |
| 299 |
- [](https://github.com/wycats/handlebars.js/pull/863#863](https://github.com/wycats/handlebars.js/pull/863](https://github.com/wycats/handlebars.js/pull/863) - + jsDelivr CDN info ([](https://github.com/tomByrer@tomByrer](https://github.com/tomByrer](https://github.com/tomByrer)) |
| 300 |
- [](https://github.com/wycats/handlebars.js/issues/858#858](https://github.com/wycats/handlebars.js/issues/858](https://github.com/wycats/handlebars.js/issues/858) - Disable new default auto-indent at included partials ([](https://github.com/majodev@majodev](https://github.com/majodev](https://github.com/majodev)) |
| 301 |
- [](https://github.com/wycats/handlebars.js/pull/856#856](https://github.com/wycats/handlebars.js/pull/856](https://github.com/wycats/handlebars.js/pull/856) - jspm compatibility ([](https://github.com/MajorBreakfast@MajorBreakfast](https://github.com/MajorBreakfast](https://github.com/MajorBreakfast)) |
| 302 |
- [](https://github.com/wycats/handlebars.js/issues/805#805](https://github.com/wycats/handlebars.js/issues/805](https://github.com/wycats/handlebars.js/issues/805) - Request: "strict" lookups ([](https://github.com/nzakas@nzakas](https://github.com/nzakas](https://github.com/nzakas)) |
| 303 |
|
| 304 |
- Export the default object for handlebars/runtime - 5594416 |
| 305 |
- Lookup partials when undefined - 617dd57 |
| 306 |
|
| 307 |
Compatibility notes: |
| 308 |
- Runtime breaking changes. Must match 3.x runtime and precompiler. |
| 309 |
- The AST has been upgraded to a public API. |
| 310 |
- There are a number of changes to this, but the format is now documented in docs/compiler-api.md |
| 311 |
- The Visitor API has been expanded to support mutation and provide a base implementation |
| 312 |
- The `JavaScriptCompiler` APIs have been formalized and documented. As part of the sourcemap handling these should be updated to return arrays for concatenation. |
| 313 |
- `JavaScriptCompiler.namespace` has been removed as it was unused. |
| 314 |
- `SafeString` is now duck typed on `toHTML` |
| 315 |
|
| 316 |
New Features: |
| 317 |
- noConflict |
| 318 |
- Source Maps |
| 319 |
- Block Params |
| 320 |
- Strict Mode |
| 321 |
- @last and other each changes |
| 322 |
- Chained else blocks |
| 323 |
- @data methods can now have helper parameters passed to them |
| 324 |
- Dynamic partials |
| 325 |
|
| 326 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0...v3.0.0Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0...v3.0.0](https://github.com/wycats/handlebars.js/compare/v2.0.0...v3.0.0) |
| 327 |
|
| 328 |
## v2.0.0 - September 1st, 2014 |
| 329 |
- Update jsfiddle to 2.0.0-beta.1 - 0670f65 |
| 330 |
- Add contrib note regarding handlebarsjs.com docs - 4d17e3c |
| 331 |
- Play nice with gemspec version numbers - 64d5481 |
| 332 |
|
| 333 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0-beta.1...v2.0.0Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-beta.1...v2.0.0](https://github.com/wycats/handlebars.js/compare/v2.0.0-beta.1...v2.0.0) |
| 334 |
|
| 335 |
## v2.0.0-beta.1 - August 26th, 2014 |
| 336 |
- [](https://github.com/wycats/handlebars.js/pull/787#787](https://github.com/wycats/handlebars.js/pull/787](https://github.com/wycats/handlebars.js/pull/787) - Remove whitespace surrounding standalone statements ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 337 |
- [](https://github.com/wycats/handlebars.js/issues/827#827](https://github.com/wycats/handlebars.js/issues/827](https://github.com/wycats/handlebars.js/issues/827) - Render false literal as “false” ([](https://github.com/scoot557@scoot557](https://github.com/scoot557](https://github.com/scoot557)) |
| 338 |
- [](https://github.com/wycats/handlebars.js/issues/767#767](https://github.com/wycats/handlebars.js/issues/767](https://github.com/wycats/handlebars.js/issues/767) - Subexpressions bug with hash and context ([](https://github.com/evensoul@evensoul](https://github.com/evensoul](https://github.com/evensoul)) |
| 339 |
- Changes to 0/undefined handling |
| 340 |
- [](https://github.com/wycats/handlebars.js/pull/731#731](https://github.com/wycats/handlebars.js/pull/731](https://github.com/wycats/handlebars.js/pull/731) - Strange behavior for {{#foo}} {{bar}} {{/foo}} when foo is 0 ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 341 |
- [](https://github.com/wycats/handlebars.js/issues/820#820](https://github.com/wycats/handlebars.js/issues/820](https://github.com/wycats/handlebars.js/issues/820) - strange behavior for {{foo.bar}} when foo is 0 or null or false ([](https://github.com/zordius@zordius](https://github.com/zordius](https://github.com/zordius)) |
| 342 |
- [](https://github.com/wycats/handlebars.js/issues/837#837](https://github.com/wycats/handlebars.js/issues/837](https://github.com/wycats/handlebars.js/issues/837) - Strange input for custom helper ( foo.bar == false when foo is undefined ) ([](https://github.com/zordius@zordius](https://github.com/zordius](https://github.com/zordius)) |
| 343 |
- [](https://github.com/wycats/handlebars.js/pull/819#819](https://github.com/wycats/handlebars.js/pull/819](https://github.com/wycats/handlebars.js/pull/819) - Implement recursive field lookup ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 344 |
- [](https://github.com/wycats/handlebars.js/issues/764#764](https://github.com/wycats/handlebars.js/issues/764](https://github.com/wycats/handlebars.js/issues/764) - This reference not working for helpers ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 345 |
- [](https://github.com/wycats/handlebars.js/issues/773#773](https://github.com/wycats/handlebars.js/issues/773](https://github.com/wycats/handlebars.js/issues/773) - Implicit parameters in {{#each}} introduces a peculiarity in helpers calling convention ([](https://github.com/Bertrand@Bertrand](https://github.com/Bertrand](https://github.com/Bertrand)) |
| 346 |
- [](https://github.com/wycats/handlebars.js/issues/783#783](https://github.com/wycats/handlebars.js/issues/783](https://github.com/wycats/handlebars.js/issues/783) - helperMissing and consistency for different expression types ([](https://github.com/ErisDS@ErisDS](https://github.com/ErisDS](https://github.com/ErisDS)) |
| 347 |
- [](https://github.com/wycats/handlebars.js/pull/795#795](https://github.com/wycats/handlebars.js/pull/795](https://github.com/wycats/handlebars.js/pull/795) - Turn the precompile script into a wrapper around a module. ([](https://github.com/jwietelmann@jwietelmann](https://github.com/jwietelmann](https://github.com/jwietelmann)) |
| 348 |
- [](https://github.com/wycats/handlebars.js/pull/823#823](https://github.com/wycats/handlebars.js/pull/823](https://github.com/wycats/handlebars.js/pull/823) - Support inverse sections on the with helper ([](https://github.com/dan-manges@dan-manges](https://github.com/dan-manges](https://github.com/dan-manges)) |
| 349 |
- [](https://github.com/wycats/handlebars.js/pull/834#834](https://github.com/wycats/handlebars.js/pull/834](https://github.com/wycats/handlebars.js/pull/834) - Refactor blocks, programs and inverses ([](https://github.com/mmun@mmun](https://github.com/mmun](https://github.com/mmun)) |
| 350 |
- [](https://github.com/wycats/handlebars.js/issues/852#852](https://github.com/wycats/handlebars.js/issues/852](https://github.com/wycats/handlebars.js/issues/852) - {{foo~}} space control behavior is different from older version ([](https://github.com/zordius@zordius](https://github.com/zordius](https://github.com/zordius)) |
| 351 |
- [](https://github.com/wycats/handlebars.js/issues/835#835](https://github.com/wycats/handlebars.js/issues/835](https://github.com/wycats/handlebars.js/issues/835) - Templates overwritten if file is loaded twice |
| 352 |
|
| 353 |
- Expose escapeExpression on the root object - 980c38c |
| 354 |
- Remove nested function eval in blockHelperMissing - 6f22ec1 |
| 355 |
- Fix compiler program de-duping - 9e3f824 |
| 356 |
|
| 357 |
Compatibility notes: |
| 358 |
- The default build now outputs a generic UMD wrapper. This should be transparent change but may cause issues in some environments. |
| 359 |
- Runtime compatibility breaks in both directions. Ensure that both compiler and client are upgraded to 2.0.0-beta.1 or higher at the same time. |
| 360 |
- `programWithDepth` has been removed an instead an array of context values is passed to fields needing depth lookups. |
| 361 |
- `false` values are now printed to output rather than silently dropped |
| 362 |
- Lines containing only block statements and whitespace are now removed. This matches the Mustache spec but may cause issues with code that expects whitespace to exist but would not otherwise. |
| 363 |
- Partials that are standalone will now indent their rendered content |
| 364 |
- `AST.ProgramNode`'s signature has changed. |
| 365 |
- Numerious methods/features removed from psuedo-API classes |
| 366 |
- `JavaScriptCompiler.register` |
| 367 |
- `JavaScriptCompiler.replaceStack` no longer supports non-inline replace |
| 368 |
- `Compiler.disassemble` |
| 369 |
- `DECLARE` opcode |
| 370 |
- `strip` opcode |
| 371 |
- `lookup` opcode |
| 372 |
- Content nodes may have their `string` values mutated over time. `original` field provides the unmodified value. |
| 373 |
- Removed unused `Handlebars.registerHelper` `inverse` parameter |
| 374 |
- `each` helper requires iterator parameter |
| 375 |
|
| 376 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.4...v2.0.0-beta.1Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.4...v2.0.0-beta.1](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.4...v2.0.0-beta.1) |
| 377 |
|
| 378 |
## v2.0.0-alpha.4 - May 19th, 2014 |
| 379 |
- Expose setup wrappers for compiled templates - 3638874 |
| 380 |
|
| 381 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.3...v2.0.0-alpha.4Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.3...v2.0.0-alpha.4](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.3...v2.0.0-alpha.4) |
| 382 |
|
| 383 |
## v2.0.0-alpha.3 - May 19th, 2014 |
| 384 |
- [](https://github.com/wycats/handlebars.js/pull/797#797](https://github.com/wycats/handlebars.js/pull/797](https://github.com/wycats/handlebars.js/pull/797) - Pass full helper ID to helperMissing when options are provided ([](https://github.com/tomdale@tomdale](https://github.com/tomdale](https://github.com/tomdale)) |
| 385 |
- [](https://github.com/wycats/handlebars.js/pull/793#793](https://github.com/wycats/handlebars.js/pull/793](https://github.com/wycats/handlebars.js/pull/793) - Ensure isHelper is coerced to a boolean ([](https://github.com/mmun@mmun](https://github.com/mmun](https://github.com/mmun)) |
| 386 |
- Refactor template init logic - 085e5e1 |
| 387 |
|
| 388 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.2...v2.0.0-alpha.3Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.2...v2.0.0-alpha.3](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.2...v2.0.0-alpha.3) |
| 389 |
|
| 390 |
## v2.0.0-alpha.2 - March 6th, 2014 |
| 391 |
- [](https://github.com/wycats/handlebars.js/pull/756#756](https://github.com/wycats/handlebars.js/pull/756](https://github.com/wycats/handlebars.js/pull/756) - fix bug in IE<=8 (no Array::map), closes #751 ([](https://github.com/jenseng@jenseng](https://github.com/jenseng](https://github.com/jenseng)) |
| 392 |
- [](https://github.com/wycats/handlebars.js/pull/749#749](https://github.com/wycats/handlebars.js/pull/749](https://github.com/wycats/handlebars.js/pull/749) - properly handle multiple subexpressions in the same hash, fixes #748 ([](https://github.com/jenseng@jenseng](https://github.com/jenseng](https://github.com/jenseng)) |
| 393 |
- [](https://github.com/wycats/handlebars.js/issues/743#743](https://github.com/wycats/handlebars.js/issues/743](https://github.com/wycats/handlebars.js/issues/743) - subexpression confusion/problem? ([](https://github.com/waynedpj@waynedpj](https://github.com/waynedpj](https://github.com/waynedpj)) |
| 394 |
- [](https://github.com/wycats/handlebars.js/issues/746#746](https://github.com/wycats/handlebars.js/issues/746](https://github.com/wycats/handlebars.js/issues/746) - [CLI] support `handlebars --version` ([](https://github.com/apfelbox@apfelbox](https://github.com/apfelbox](https://github.com/apfelbox)) |
| 395 |
- [](https://github.com/wycats/handlebars.js/pull/747#747](https://github.com/wycats/handlebars.js/pull/747](https://github.com/wycats/handlebars.js/pull/747) - updated grunt-saucelabs, failing tests revealed ([](https://github.com/Jonahss@Jonahss](https://github.com/Jonahss](https://github.com/Jonahss)) |
| 396 |
- Make JSON a requirement for the compiler. - 058c0fb |
| 397 |
- Temporarily kill the AWS publish CI step - 8347ee2 |
| 398 |
|
| 399 |
Compatibility notes: |
| 400 |
- A JSON polyfill is required to run the compiler under IE8 and below. It's recommended that the precompiler be used in lieu of running the compiler on these legacy environments. |
| 401 |
|
| 402 |
[](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.1...v2.0.0-alpha.2Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.1...v2.0.0-alpha.2](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.1...v2.0.0-alpha.2) |
| 403 |
|
| 404 |
## v2.0.0-alpha.1 - February 10th, 2014 |
| 405 |
- [](https://github.com/wycats/handlebars.js/pull/182#182](https://github.com/wycats/handlebars.js/pull/182](https://github.com/wycats/handlebars.js/pull/182) - Allow passing hash parameters to partials ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 406 |
- [](https://github.com/wycats/handlebars.js/pull/392#392](https://github.com/wycats/handlebars.js/pull/392](https://github.com/wycats/handlebars.js/pull/392) - Access to root context in partials and helpers ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 407 |
- [](https://github.com/wycats/handlebars.js/issues/472#472](https://github.com/wycats/handlebars.js/issues/472](https://github.com/wycats/handlebars.js/issues/472) - Helpers cannot have decimal parameters ([](https://github.com/kayleg@kayleg](https://github.com/kayleg](https://github.com/kayleg)) |
| 408 |
- [](https://github.com/wycats/handlebars.js/pull/569#569](https://github.com/wycats/handlebars.js/pull/569](https://github.com/wycats/handlebars.js/pull/569) - Unable to lookup array values using @index ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 409 |
- [](https://github.com/wycats/handlebars.js/pull/491#491](https://github.com/wycats/handlebars.js/pull/491](https://github.com/wycats/handlebars.js/pull/491) - For nested helpers: get the @ variables of the outer helper from the inner one ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 410 |
- [](https://github.com/wycats/handlebars.js/issues/669#669](https://github.com/wycats/handlebars.js/issues/669](https://github.com/wycats/handlebars.js/issues/669) - Ability to unregister a helper ([](https://github.com/dbachrach@dbachrach](https://github.com/dbachrach](https://github.com/dbachrach)) |
| 411 |
- [](https://github.com/wycats/handlebars.js/pull/730#730](https://github.com/wycats/handlebars.js/pull/730](https://github.com/wycats/handlebars.js/pull/730) - Raw block helpers ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 412 |
- [](https://github.com/wycats/handlebars.js/pull/634#634](https://github.com/wycats/handlebars.js/pull/634](https://github.com/wycats/handlebars.js/pull/634) - It would be great to have the helper name passed to `blockHelperMissing` ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 413 |
- [](https://github.com/wycats/handlebars.js/pull/729#729](https://github.com/wycats/handlebars.js/pull/729](https://github.com/wycats/handlebars.js/pull/729) - Convert template spec to object literal ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 414 |
|
| 415 |
- [](https://github.com/wycats/handlebars.js/issues/658#658](https://github.com/wycats/handlebars.js/issues/658](https://github.com/wycats/handlebars.js/issues/658) - Depthed helpers do not work after an upgrade from 1.0.0 ([](https://github.com/xibxor@xibxor](https://github.com/xibxor](https://github.com/xibxor)) |
| 416 |
- [](https://github.com/wycats/handlebars.js/issues/671#671](https://github.com/wycats/handlebars.js/issues/671](https://github.com/wycats/handlebars.js/issues/671) - Crashes on no-parameter {{#each}} ([](https://github.com/stepancheg@stepancheg](https://github.com/stepancheg](https://github.com/stepancheg)) |
| 417 |
- [](https://github.com/wycats/handlebars.js/issues/689#689](https://github.com/wycats/handlebars.js/issues/689](https://github.com/wycats/handlebars.js/issues/689) - broken template precompilation ([](https://github.com/AAS@AAS](https://github.com/AAS](https://github.com/AAS)) |
| 418 |
- [](https://github.com/wycats/handlebars.js/pull/698#698](https://github.com/wycats/handlebars.js/pull/698](https://github.com/wycats/handlebars.js/pull/698) - Fix parser generation under windows ([](https://github.com/osiris43@osiris43](https://github.com/osiris43](https://github.com/osiris43)) |
| 419 |
- [](https://github.com/wycats/handlebars.js/issues/699#699](https://github.com/wycats/handlebars.js/issues/699](https://github.com/wycats/handlebars.js/issues/699) - @DATA not compiles to invalid JS in stringParams mode ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 420 |
- [](https://github.com/wycats/handlebars.js/issues/705#705](https://github.com/wycats/handlebars.js/issues/705](https://github.com/wycats/handlebars.js/issues/705) - 1.3.0 can not be wrapped in an IIFE ([](https://github.com/craigteegarden@craigteegarden](https://github.com/craigteegarden](https://github.com/craigteegarden)) |
| 421 |
- [](https://github.com/wycats/handlebars.js/pull/706#706](https://github.com/wycats/handlebars.js/pull/706](https://github.com/wycats/handlebars.js/pull/706) - README: Use with helper instead of relying on blockHelperMissing ([](https://github.com/scottgonzalez@scottgonzalez](https://github.com/scottgonzalez](https://github.com/scottgonzalez)) |
| 422 |
|
| 423 |
- [](https://github.com/wycats/handlebars.js/pull/700#700](https://github.com/wycats/handlebars.js/pull/700](https://github.com/wycats/handlebars.js/pull/700) - Remove redundant conditions ([](https://github.com/blakeembrey@blakeembrey](https://github.com/blakeembrey](https://github.com/blakeembrey)) |
| 424 |
- [](https://github.com/wycats/handlebars.js/pull/704#704](https://github.com/wycats/handlebars.js/pull/704](https://github.com/wycats/handlebars.js/pull/704) - JavaScript Compiler Cleanup ([](https://github.com/blakeembrey@blakeembrey](https://github.com/blakeembrey](https://github.com/blakeembrey)) |
| 425 |
|
| 426 |
Compatibility notes: |
| 427 |
- `helperMissing` helper no longer has the indexed name argument. Helper name is now available via `options.name`. |
| 428 |
- Precompiler output has changed, which breaks compatibility with prior versions of the runtime and precompiled output. |
| 429 |
- `JavaScriptCompiler.compilerInfo` now returns generic objects rather than javascript source. |
| 430 |
- AST changes |
| 431 |
- INTEGER -> NUMBER |
| 432 |
- Additional PartialNode hash parameter |
| 433 |
- New RawBlockNode type |
| 434 |
- Data frames now have a `_parent` field. This is internal but is enumerable for performance/compatibility reasons. |
| 435 |
|
| 436 |
[](https://github.com/wycats/handlebars.js/compare/v1.3.0...v2.0.0-alpha.1Commits](https://github.com/wycats/handlebars.js/compare/v1.3.0...v2.0.0-alpha.1](https://github.com/wycats/handlebars.js/compare/v1.3.0...v2.0.0-alpha.1) |
| 437 |
|
| 438 |
## v1.3.0 - January 1st, 2014 |
| 439 |
- [](https://github.com/wycats/handlebars.js/pull/690#690](https://github.com/wycats/handlebars.js/pull/690](https://github.com/wycats/handlebars.js/pull/690) - Added support for subexpressions ([](https://github.com/machty@machty](https://github.com/machty](https://github.com/machty)) |
| 440 |
- [](https://github.com/wycats/handlebars.js/pull/696#696](https://github.com/wycats/handlebars.js/pull/696](https://github.com/wycats/handlebars.js/pull/696) - Fix for reserved keyword "default" ([](https://github.com/nateirwin@nateirwin](https://github.com/nateirwin](https://github.com/nateirwin)) |
| 441 |
- [](https://github.com/wycats/handlebars.js/pull/692#692](https://github.com/wycats/handlebars.js/pull/692](https://github.com/wycats/handlebars.js/pull/692) - add line numbers to nodes when parsing ([](https://github.com/fivetanley@fivetanley](https://github.com/fivetanley](https://github.com/fivetanley)) |
| 442 |
- [](https://github.com/wycats/handlebars.js/pull/695#695](https://github.com/wycats/handlebars.js/pull/695](https://github.com/wycats/handlebars.js/pull/695) - Pull options out from param setup to allow easier extension ([](https://github.com/blakeembrey@blakeembrey](https://github.com/blakeembrey](https://github.com/blakeembrey)) |
| 443 |
- [](https://github.com/wycats/handlebars.js/pull/694#694](https://github.com/wycats/handlebars.js/pull/694](https://github.com/wycats/handlebars.js/pull/694) - Make the environment reusable ([](https://github.com/blakeembrey@blakeembrey](https://github.com/blakeembrey](https://github.com/blakeembrey)) |
| 444 |
- [](https://github.com/wycats/handlebars.js/issues/636#636](https://github.com/wycats/handlebars.js/issues/636](https://github.com/wycats/handlebars.js/issues/636) - Print line and column of errors ([](https://github.com/sgronblo@sgronblo](https://github.com/sgronblo](https://github.com/sgronblo)) |
| 445 |
- Use literal for data lookup - c1a93d3 |
| 446 |
- Add stack handling sanity checks - cd885bf |
| 447 |
- Fix stack id "leak" on replaceStack - ddfe457 |
| 448 |
- Fix incorrect stack pop when replacing literals - f4d337d |
| 449 |
|
| 450 |
[](https://github.com/wycats/handlebars.js/compare/v1.2.1...v1.3.0Commits](https://github.com/wycats/handlebars.js/compare/v1.2.1...v1.3.0](https://github.com/wycats/handlebars.js/compare/v1.2.1...v1.3.0) |
| 451 |
|
| 452 |
## v1.2.1 - December 26th, 2013 |
| 453 |
- [](https://github.com/wycats/handlebars.js/pull/684#684](https://github.com/wycats/handlebars.js/pull/684](https://github.com/wycats/handlebars.js/pull/684) - Allow any number of trailing characters for valid JavaScript variable ([](https://github.com/blakeembrey@blakeembrey](https://github.com/blakeembrey](https://github.com/blakeembrey)) |
| 454 |
- [](https://github.com/wycats/handlebars.js/pull/686#686](https://github.com/wycats/handlebars.js/pull/686](https://github.com/wycats/handlebars.js/pull/686) - Falsy AMD module names in version 1.2.0 ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 455 |
|
| 456 |
[](https://github.com/wycats/handlebars.js/compare/v1.2.0...v1.2.1Commits](https://github.com/wycats/handlebars.js/compare/v1.2.0...v1.2.1](https://github.com/wycats/handlebars.js/compare/v1.2.0...v1.2.1) |
| 457 |
|
| 458 |
## v1.2.0 - December 23rd, 2013 |
| 459 |
- [](https://github.com/wycats/handlebars.js/issues/675#675](https://github.com/wycats/handlebars.js/issues/675](https://github.com/wycats/handlebars.js/issues/675) - Cannot compile empty template for partial ([](https://github.com/erwinw@erwinw](https://github.com/erwinw](https://github.com/erwinw)) |
| 460 |
- [](https://github.com/wycats/handlebars.js/issues/677#677](https://github.com/wycats/handlebars.js/issues/677](https://github.com/wycats/handlebars.js/issues/677) - Triple brace statements fail under IE ([](https://github.com/hamzaCM@hamzaCM](https://github.com/hamzaCM](https://github.com/hamzaCM)) |
| 461 |
- [](https://github.com/wycats/handlebars.js/issues/655#655](https://github.com/wycats/handlebars.js/issues/655](https://github.com/wycats/handlebars.js/issues/655) - Loading Handlebars using bower ([](https://github.com/niki4810@niki4810](https://github.com/niki4810](https://github.com/niki4810)) |
| 462 |
- [](https://github.com/wycats/handlebars.js/pull/657#657](https://github.com/wycats/handlebars.js/pull/657](https://github.com/wycats/handlebars.js/pull/657) - Fixes issue where cli compiles non handlebars templates ([](https://github.com/chrishoage@chrishoage](https://github.com/chrishoage](https://github.com/chrishoage)) |
| 463 |
- [](https://github.com/wycats/handlebars.js/pull/681#681](https://github.com/wycats/handlebars.js/pull/681](https://github.com/wycats/handlebars.js/pull/681) - Adds in-browser testing and Saucelabs CI ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 464 |
- [](https://github.com/wycats/handlebars.js/pull/661#661](https://github.com/wycats/handlebars.js/pull/661](https://github.com/wycats/handlebars.js/pull/661) - Add @first and @index to #each object iteration ([](https://github.com/cgp@cgp](https://github.com/cgp](https://github.com/cgp)) |
| 465 |
- [](https://github.com/wycats/handlebars.js/pull/650#650](https://github.com/wycats/handlebars.js/pull/650](https://github.com/wycats/handlebars.js/pull/650) - Handlebars is MIT-licensed ([](https://github.com/thomasboyt@thomasboyt](https://github.com/thomasboyt](https://github.com/thomasboyt)) |
| 466 |
- [](https://github.com/wycats/handlebars.js/pull/641#641](https://github.com/wycats/handlebars.js/pull/641](https://github.com/wycats/handlebars.js/pull/641) - Document ember testing process ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 467 |
- [](https://github.com/wycats/handlebars.js/issues/662#662](https://github.com/wycats/handlebars.js/issues/662](https://github.com/wycats/handlebars.js/issues/662) - handlebars-source 1.1.2 is missing from RubyGems. |
| 468 |
- [](https://github.com/wycats/handlebars.js/issues/656#656](https://github.com/wycats/handlebars.js/issues/656](https://github.com/wycats/handlebars.js/issues/656) - Expose COMPILER_REVISION checks as a hook ([](https://github.com/machty@machty](https://github.com/machty](https://github.com/machty)) |
| 469 |
- [](https://github.com/wycats/handlebars.js/issues/668#668](https://github.com/wycats/handlebars.js/issues/668](https://github.com/wycats/handlebars.js/issues/668) - Consider publishing handlebars-runtime as a separate module on npm ([](https://github.com/dlmanning@dlmanning](https://github.com/dlmanning](https://github.com/dlmanning)) |
| 470 |
- [](https://github.com/wycats/handlebars.js/issues/679#679](https://github.com/wycats/handlebars.js/issues/679](https://github.com/wycats/handlebars.js/issues/679) - Unable to override invokePartial ([](https://github.com/mattbrailsford@mattbrailsford](https://github.com/mattbrailsford](https://github.com/mattbrailsford)) |
| 471 |
- [](https://github.com/wycats/handlebars.js/pull/646#646](https://github.com/wycats/handlebars.js/pull/646](https://github.com/wycats/handlebars.js/pull/646) - Fix "\\{{" immediately following "\{{" ([](https://github.com/dmarcotte@dmarcotte](https://github.com/dmarcotte](https://github.com/dmarcotte)) |
| 472 |
- Allow extend to work with non-prototyped objects - eb53f2e |
| 473 |
- Add JavascriptCompiler public API tests - 1a751b2 |
| 474 |
- Add AST test coverage for more complex paths - ddea5be |
| 475 |
- Fix handling of boolean escape in MustacheNode - b4968bb |
| 476 |
|
| 477 |
Compatibility notes: |
| 478 |
- `@index` and `@first` are now supported for `each` iteration on objects |
| 479 |
- `Handlebars.VM.checkRevision` and `Handlebars.JavaScriptCompiler.prototype.compilerInfo` now available to modify the version checking behavior. |
| 480 |
- Browserify users may link to the runtime library via `require('handlebars/runtime')` |
| 481 |
|
| 482 |
[](https://github.com/wycats/handlebars.js/compare/v1.1.2...v1.2.0Commits](https://github.com/wycats/handlebars.js/compare/v1.1.2...v1.2.0](https://github.com/wycats/handlebars.js/compare/v1.1.2...v1.2.0) |
| 483 |
|
| 484 |
## v1.1.2 - November 5th, 2013 |
| 485 |
|
| 486 |
- [](https://github.com/wycats/handlebars.js/issues/645#645](https://github.com/wycats/handlebars.js/issues/645](https://github.com/wycats/handlebars.js/issues/645) - 1.1.1 fails under IE8 ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 487 |
- [](https://github.com/wycats/handlebars.js/issues/644#644](https://github.com/wycats/handlebars.js/issues/644](https://github.com/wycats/handlebars.js/issues/644) - Using precompiled templates (AMD mode) with handlebars.runtime 1.1.1 ([](https://github.com/fddima@fddima](https://github.com/fddima](https://github.com/fddima)) |
| 488 |
|
| 489 |
- Add simple binary utility tests - 96a45a4 |
| 490 |
- Fix empty string compilation - eea708a |
| 491 |
|
| 492 |
[](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2Commits](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2) |
| 493 |
|
| 494 |
## v1.1.1 - November 4th, 2013 |
| 495 |
|
| 496 |
- [](https://github.com/wycats/handlebars.js/issues/642#642](https://github.com/wycats/handlebars.js/issues/642](https://github.com/wycats/handlebars.js/issues/642) - handlebars 1.1.0 are broken with nodejs |
| 497 |
|
| 498 |
- Fix release notes link - 17ba258 |
| 499 |
|
| 500 |
[](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1Commits](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1) |
| 501 |
|
| 502 |
## v1.1.0 - November 3rd, 2013 |
| 503 |
|
| 504 |
- [](https://github.com/wycats/handlebars.js/pull/628#628](https://github.com/wycats/handlebars.js/pull/628](https://github.com/wycats/handlebars.js/pull/628) - Convert code to ES6 modules ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 505 |
- [](https://github.com/wycats/handlebars.js/pull/336#336](https://github.com/wycats/handlebars.js/pull/336](https://github.com/wycats/handlebars.js/pull/336) - Add whitespace control syntax ([](https://github.com/kpdecker@kpdecker](https://github.com/kpdecker](https://github.com/kpdecker)) |
| 506 |
- [](https://github.com/wycats/handlebars.js/pull/535#535](https://github.com/wycats/handlebars.js/pull/535](https://github.com/wycats/handlebars.js/pull/535) - Fix for probable JIT error under Safari ([](https://github.com/sorentwo@sorentwo](https://github.com/sorentwo](https://github.com/sorentwo)) |
| 507 |
- [](https://github.com/wycats/handlebars.js/issues/483#483](https://github.com/wycats/handlebars.js/issues/483](https://github.com/wycats/handlebars.js/issues/483) - Add first and last @ vars to each helper ([](https://github.com/denniskuczynski@denniskuczynski](https://github.com/denniskuczynski](https://github.com/denniskuczynski)) |
| 508 |
- [](https://github.com/wycats/handlebars.js/pull/557#557](https://github.com/wycats/handlebars.js/pull/557](https://github.com/wycats/handlebars.js/pull/557) - `\\{{foo}}` escaping only works in some situations ([](https://github.com/dmarcotte@dmarcotte](https://github.com/dmarcotte](https://github.com/dmarcotte)) |
| 509 |
- [](https://github.com/wycats/handlebars.js/pull/552#552](https://github.com/wycats/handlebars.js/pull/552](https://github.com/wycats/handlebars.js/pull/552) - Added BOM removal flag. ([](https://github.com/blessenm@blessenm](https://github.com/blessenm](https://github.com/blessenm)) |
| 510 |
- [](https://github.com/wycats/handlebars.js/pull/543#543](https://github.com/wycats/handlebars.js/pull/543](https://github.com/wycats/handlebars.js/pull/543) - publish passing master builds to s3 ([](https://github.com/fivetanley@fivetanley](https://github.com/fivetanley](https://github.com/fivetanley)) |
| 511 |
|
| 512 |
- [](https://github.com/wycats/handlebars.js/issues/608#608](https://github.com/wycats/handlebars.js/issues/608](https://github.com/wycats/handlebars.js/issues/608) - Add `includeZero` flag to `if` conditional |
| 513 |
- [](https://github.com/wycats/handlebars.js/issues/498#498](https://github.com/wycats/handlebars.js/issues/498](https://github.com/wycats/handlebars.js/issues/498) - `Handlebars.compile` fails on empty string although a single blank works fine |
| 514 |
- [](https://github.com/wycats/handlebars.js/issues/599#599](https://github.com/wycats/handlebars.js/issues/599](https://github.com/wycats/handlebars.js/issues/599) - lambda helpers only receive options if used with arguments |
| 515 |
- [](https://github.com/wycats/handlebars.js/issues/592#592](https://github.com/wycats/handlebars.js/issues/592](https://github.com/wycats/handlebars.js/issues/592) - Optimize array and subprogram performance |
| 516 |
- [](https://github.com/wycats/handlebars.js/issues/571#571](https://github.com/wycats/handlebars.js/issues/571](https://github.com/wycats/handlebars.js/issues/571) - uglify upgrade breaks compatibility with older versions of node |
| 517 |
- [](https://github.com/wycats/handlebars.js/issues/587#587](https://github.com/wycats/handlebars.js/issues/587](https://github.com/wycats/handlebars.js/issues/587) - Partial inside partial breaks? |
| 518 |
|
| 519 |
|
| 520 |
Compatibility notes: |
| 521 |
- The project now includes separate artifacts for AMD, CommonJS, and global objects. |
| 522 |
- AMD: Users may load the bundled `handlebars.amd.js` or `handlebars.runtime.amd.js` files or load individual modules directly. AMD users should also note that the handlebars object is exposed via the `default` field on the imported object. This [](https://gist.github.com/wycats/7417be0dc361a69d5916gist](https://gist.github.com/wycats/7417be0dc361a69d5916](https://gist.github.com/wycats/7417be0dc361a69d5916) provides some discussion of possible compatibility shims. |
| 523 |
- CommonJS/Node: Node loading occurs as normal via `require` |
| 524 |
- Globals: The `handlebars.js` and `handlebars.runtime.js` files should behave in the same manner as the v1.0.12 / 1.0.0 release. |
| 525 |
- Build artifacts have been removed from the repository. [npm][npm], [components/handlebars.js][components], [cdnjs][cdnjs], or the [builds page][builds-page] should now be used as the source of built artifacts. |
| 526 |
- Context-stored helpers are now always passed the `options` hash. Previously no-argument helpers did not have this argument. |
| 527 |
|
| 528 |
|
| 529 |
[](https://github.com/wycats/handlebars.js/compare/v1.0.12...v1.1.0Commits](https://github.com/wycats/handlebars.js/compare/v1.0.12...v1.1.0](https://github.com/wycats/handlebars.js/compare/v1.0.12...v1.1.0) |
| 530 |
|
| 531 |
## v1.0.12 / 1.0.0 - May 31 2013 |
| 532 |
|
| 533 |
- [](https://github.com/wycats/handlebars.js/issues/515#515](https://github.com/wycats/handlebars.js/issues/515](https://github.com/wycats/handlebars.js/issues/515) - Add node require extensions support ([](https://github.com/jjclark1982@jjclark1982](https://github.com/jjclark1982](https://github.com/jjclark1982)) |
| 534 |
- [](https://github.com/wycats/handlebars.js/issues/517#517](https://github.com/wycats/handlebars.js/issues/517](https://github.com/wycats/handlebars.js/issues/517) - Fix amd precompiler output with directories ([](https://github.com/blessenm@blessenm](https://github.com/blessenm](https://github.com/blessenm)) |
| 535 |
- [](https://github.com/wycats/handlebars.js/issues/433#433](https://github.com/wycats/handlebars.js/issues/433](https://github.com/wycats/handlebars.js/issues/433) - Add support for unicode ids |
| 536 |
- [](https://github.com/wycats/handlebars.js/issues/469#469](https://github.com/wycats/handlebars.js/issues/469](https://github.com/wycats/handlebars.js/issues/469) - Add support for `?` in ids |
| 537 |
- [](https://github.com/wycats/handlebars.js/issues/534#534](https://github.com/wycats/handlebars.js/issues/534](https://github.com/wycats/handlebars.js/issues/534) - Protect from object prototype modifications |
| 538 |
- [](https://github.com/wycats/handlebars.js/issues/519#519](https://github.com/wycats/handlebars.js/issues/519](https://github.com/wycats/handlebars.js/issues/519) - Fix partials with . name ([](https://github.com/jamesgorrie@jamesgorrie](https://github.com/jamesgorrie](https://github.com/jamesgorrie)) |
| 539 |
- [](https://github.com/wycats/handlebars.js/issues/519#519](https://github.com/wycats/handlebars.js/issues/519](https://github.com/wycats/handlebars.js/issues/519) - Allow ID or strings in partial names |
| 540 |
- [](https://github.com/wycats/handlebars.js/issues/437#437](https://github.com/wycats/handlebars.js/issues/437](https://github.com/wycats/handlebars.js/issues/437) - Require matching brace counts in escaped expressions |
| 541 |
- Merge passed partials and helpers with global namespace values |
| 542 |
- Add support for complex ids in @data references |
| 543 |
- Docs updates |
| 544 |
|
| 545 |
Compatibility notes: |
| 546 |
- The parser is now stricter on `{{{`, requiring that the end token be `}}}`. Templates that do not |
| 547 |
follow this convention should add the additional brace value. |
| 548 |
- Code that relies on global the namespace being muted when custom helpers or partials are passed will need to explicitly pass an `undefined` value for any helpers that should not be available. |
| 549 |
- The compiler version has changed. Precompiled templates with 1.0.12 or higher must use the 1.0.0 or higher runtime. |
| 550 |
|
| 551 |
[](https://github.com/wycats/handlebars.js/compare/v1.0.11...v1.0.12Commits](https://github.com/wycats/handlebars.js/compare/v1.0.11...v1.0.12](https://github.com/wycats/handlebars.js/compare/v1.0.11...v1.0.12) |
| 552 |
|
| 553 |
## v1.0.11 / 1.0.0-rc4 - May 13 2013 |
| 554 |
|
| 555 |
- [](https://github.com/wycats/handlebars.js/issues/458#458](https://github.com/wycats/handlebars.js/issues/458](https://github.com/wycats/handlebars.js/issues/458) - Fix `./foo` syntax ([](https://github.com/jpfiset@jpfiset](https://github.com/jpfiset](https://github.com/jpfiset)) |
| 556 |
- [](https://github.com/wycats/handlebars.js/issues/460#460](https://github.com/wycats/handlebars.js/issues/460](https://github.com/wycats/handlebars.js/issues/460) - Allow `:` in unescaped identifers ([](https://github.com/jpfiset@jpfiset](https://github.com/jpfiset](https://github.com/jpfiset)) |
| 557 |
- [](https://github.com/wycats/handlebars.js/issues/471#471](https://github.com/wycats/handlebars.js/issues/471](https://github.com/wycats/handlebars.js/issues/471) - Create release notes (These!) |
| 558 |
- [](https://github.com/wycats/handlebars.js/issues/456#456](https://github.com/wycats/handlebars.js/issues/456](https://github.com/wycats/handlebars.js/issues/456) - Allow escaping of `\\` |
| 559 |
- [](https://github.com/wycats/handlebars.js/issues/211#211](https://github.com/wycats/handlebars.js/issues/211](https://github.com/wycats/handlebars.js/issues/211) - Fix exception in `escapeExpression` |
| 560 |
- [](https://github.com/wycats/handlebars.js/issues/375#375](https://github.com/wycats/handlebars.js/issues/375](https://github.com/wycats/handlebars.js/issues/375) - Escape unicode newlines |
| 561 |
- [](https://github.com/wycats/handlebars.js/issues/461#461](https://github.com/wycats/handlebars.js/issues/461](https://github.com/wycats/handlebars.js/issues/461) - Do not fail when compiling `""` |
| 562 |
- [](https://github.com/wycats/handlebars.js/issues/302#302](https://github.com/wycats/handlebars.js/issues/302](https://github.com/wycats/handlebars.js/issues/302) - Fix sanity check in knownHelpersOnly mode |
| 563 |
- [](https://github.com/wycats/handlebars.js/issues/369#369](https://github.com/wycats/handlebars.js/issues/369](https://github.com/wycats/handlebars.js/issues/369) - Allow registration of multiple helpers and partial by passing definition object |
| 564 |
- Add bower package declaration ([](https://github.com/DevinClark@DevinClark](https://github.com/DevinClark](https://github.com/DevinClark)) |
| 565 |
- Add NuSpec package declaration ([](https://github.com/MikeMayer@MikeMayer](https://github.com/MikeMayer](https://github.com/MikeMayer)) |
| 566 |
- Handle empty context in `with` ([](https://github.com/thejohnfreeman@thejohnfreeman](https://github.com/thejohnfreeman](https://github.com/thejohnfreeman)) |
| 567 |
- Support custom template extensions in CLI ([](https://github.com/matteoagosti@matteoagosti](https://github.com/matteoagosti](https://github.com/matteoagosti)) |
| 568 |
- Fix Rhino support ([](https://github.com/broady@broady](https://github.com/broady](https://github.com/broady)) |
| 569 |
- Include contexts in string mode ([](https://github.com/leshill@leshill](https://github.com/leshill](https://github.com/leshill)) |
| 570 |
- Return precompiled scripts when compiling to AMD ([](https://github.com/JamesMaroney@JamesMaroney](https://github.com/JamesMaroney](https://github.com/JamesMaroney)) |
| 571 |
- Docs updates ([](https://github.com/iangreenleaf@iangreenleaf](https://github.com/iangreenleaf](https://github.com/iangreenleaf), [](https://github.com/gilesbowkett@gilesbowkett](https://github.com/gilesbowkett](https://github.com/gilesbowkett), [](https://github.com/utkarsh2012@utkarsh2012](https://github.com/utkarsh2012](https://github.com/utkarsh2012)) |
| 572 |
- Fix `toString` handling under IE and browserify ([](https://github.com/tommydudebreaux@tommydudebreaux](https://github.com/tommydudebreaux](https://github.com/tommydudebreaux)) |
| 573 |
- Add program metadata |
| 574 |
|
| 575 |
[](https://github.com/wycats/handlebars.js/compare/v1.0.10...v1.0.11Commits](https://github.com/wycats/handlebars.js/compare/v1.0.10...v1.0.11](https://github.com/wycats/handlebars.js/compare/v1.0.10...v1.0.11) |
| 576 |
|
| 577 |
## v1.0.10 - Node - Feb 27 2013 |
| 578 |
|
| 579 |
- [](https://github.com/wycats/handlebars.js/issues/428#428](https://github.com/wycats/handlebars.js/issues/428](https://github.com/wycats/handlebars.js/issues/428) - Fix incorrect rendering of nested programs |
| 580 |
- Fix exception message ([](https://github.com/tricknotes@tricknotes](https://github.com/tricknotes](https://github.com/tricknotes)) |
| 581 |
- Added negative number literal support |
| 582 |
- Concert library to single IIFE |
| 583 |
- Add handlebars-source gemspec ([](https://github.com/machty@machty](https://github.com/machty](https://github.com/machty)) |
| 584 |
|
| 585 |
[](https://github.com/wycats/handlebars.js/compare/v1.0.9...v1.0.10Commits](https://github.com/wycats/handlebars.js/compare/v1.0.9...v1.0.10](https://github.com/wycats/handlebars.js/compare/v1.0.9...v1.0.10) |
| 586 |
|
| 587 |
## v1.0.9 - Node - Feb 15 2013 |
| 588 |
|
| 589 |
- Added `Handlebars.create` API in node module for sandboxed instances ([](https://github.com/tommydudebreaux@tommydudebreaux](https://github.com/tommydudebreaux](https://github.com/tommydudebreaux)) |
| 590 |
|
| 591 |
[](https://github.com/wycats/handlebars.js/compare/1.0.0-rc.3...v1.0.9Commits](https://github.com/wycats/handlebars.js/compare/1.0.0-rc.3...v1.0.9](https://github.com/wycats/handlebars.js/compare/1.0.0-rc.3...v1.0.9) |
| 592 |
|
| 593 |
## 1.0.0-rc3 - Browser - Feb 14 2013 |
| 594 |
|
| 595 |
- Prevent use of `this` or `..` in illogical place ([](https://github.com/leshill@leshill](https://github.com/leshill](https://github.com/leshill)) |
| 596 |
- Allow AST passing for `parse`/`compile`/`precompile` ([](https://github.com/machty@machty](https://github.com/machty](https://github.com/machty)) |
| 597 |
- Optimize generated output by inlining statements where possible |
| 598 |
- Check compiler version when evaluating templates |
| 599 |
- Package browser dist in npm package |
| 600 |
|
| 601 |
[](https://github.com/wycats/handlebars.js/compare/v1.0.8...1.0.0-rc.3Commits](https://github.com/wycats/handlebars.js/compare/v1.0.8...1.0.0-rc.3](https://github.com/wycats/handlebars.js/compare/v1.0.8...1.0.0-rc.3) |
| 602 |
|
| 603 |
## Prior Versions |
| 604 |
|
| 605 |
When upgrading from the Handlebars 0.9 series, be aware that the |
| 606 |
signature for passing custom helpers or partials to templates has |
| 607 |
changed. |
| 608 |
|
| 609 |
Instead of: |
| 610 |
|
| 611 |
```js |
| 612 |
template(context, helpers, partials, [data]) |
| 613 |
``` |
| 614 |
|
| 615 |
Use: |
| 616 |
|
| 617 |
```js |
| 618 |
template(context, {helpers: helpers, partials: partials, data: data}) |
| 619 |
``` |
| 620 |
|
| 621 |
[builds-page]: http://builds.handlebarsjs.com.s3.amazonaws.com/index.html |
| 622 |
[cdnjs]: http://cdnjs.com/libraries/handlebars.js/ |
| 623 |
[components]: https://github.com/components/handlebars.js |
| 624 |
[npm]: https://npmjs.org/package/handlebars |
| 625 |
|