1# Release Notes
2
3## Development
4
5[Commits](https://github.com/handlebars-lang/handlebars.js/compare/v4.7.8...master)
6
7## v4.7.8 - July 27th, 2023
8
9- Make library compatible with workers (#1894) - 3d3796c
10- Don't rely on Node.js global object (#1776) - 2954e7e
11- Fix compiling of each block params in strict mode (#1855) - 30dbf04
12- Fix rollup warning when importing Handlebars as ESM - 03d387b
13- Fix bundler issue with webpack 5 (#1862) - c6c6bbb
14- Use https instead of git for mustache submodule - 88ac068
15
16[Commits](https://github.com/handlebars-lang/handlebars.js/compare/v4.7.7...v4.7.8)
17
18## v4.7.7 - February 15th, 2021
19
20- fix weird error in integration tests - eb860c0
21- fix: check prototype property access in strict-mode (#1736) - b6d3de7
22- fix: escape property names in compat mode (#1736) - f058970
23- refactor: In spec tests, use expectTemplate over equals and shouldThrow (#1683) - 77825f8
24- chore: start testing on Node.js 12 and 13 - 3789a30
25
26(POSSIBLY) BREAKING CHANGES:
27
28- the changes from version [4.6.0](https://github.com/handlebars-lang/handlebars.js/blob/master/release-notes.md#v460---january-8th-2020) now also apply
29  in when using the compile-option "strict: true". Access to prototype properties is forbidden completely by default, specific properties or methods
30  can be allowed via runtime-options. See #1633 for details. If you are using Handlebars as documented, you should not be accessing prototype properties
31  from your template anyway, so the changes should not be a problem for you. Only the use of undocumented features can break your build.
32
33That is why we only bump the patch version despite mentioning breaking changes.
34
35[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.6...v4.7.7)
36
37## v4.7.6 - April 3rd, 2020
38
39Chore/Housekeeping:
40
41- [#1672](https://github.com/wycats/handlebars.js/issues/1672) - Switch cmd parser to latest minimist ([@dougwilson](https://api.github.com/users/dougwilson)
42
43Compatibility notes:
44
45- Restored Node.js compatibility
46
47[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.5...v4.7.6)
48
49## v4.7.5 - April 2nd, 2020
50
51Chore/Housekeeping:
52
53- ~Node.js version support has been changed to v6+~ Reverted in 4.7.6
54
55Compatibility notes:
56
57- ~Node.js < v6 is no longer supported~ Reverted in 4.7.6
58
59[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.4...v4.7.5)
60
61## v4.7.4 - April 1st, 2020
62
63Chore/Housekeeping:
64
65- [#1666](https://github.com/wycats/handlebars.js/issues/1666) - Replaced minimist with yargs for handlebars CLI ([@aorinevo](https://api.github.com/users/aorinevo), [@AviVahl](https://api.github.com/users/AviVahl) & [@fabb](https://api.github.com/users/fabb))
66
67Compatibility notes:
68
69- No incompatibilities are to be expected
70
71[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.3...v4.7.4)
72
73## v4.7.3 - February 5th, 2020
74
75Chore/Housekeeping:
76
77- [#1644](https://github.com/wycats/handlebars.js/issues/1644) - Download links to aws broken on handlebarsjs.com - access denied ([@Tea56](https://api.github.com/users/Tea56))
78- Fix spelling and punctuation in changelog - d78cc73
79
80Bugfixes:
81
82- Add Type Definition for Handlebars.VERSION, Fixes #1647 - 4de51fe
83- Include Type Definition for runtime.js in Package - a32d05f
84
85Compatibility notes:
86
87- No incompatibilities are to be expected
88
89[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.2...v4.7.3)
90
91## v4.7.2 - January 13th, 2020
92
93Bugfixes:
94
95- fix: don't wrap helpers that are not functions - 9d5aa36, #1639
96
97Chore/Build:
98
99- chore: execute saucelabs-task only if access-key exists - a4fd391
100
101Compatibility notes:
102
103- No breaking changes are to be expected
104
105[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.1...v4.7.2)
106
107## v4.7.1 - January 12th, 2020
108
109Bugfixes:
110
111- fix: fix log output in case of illegal property access - f152dfc
112- fix: log error for illegal property access only once per property - 3c1e252
113
114Compatibility notes:
115
116- no incompatibilities are to be expected.
117
118[Commits](https://github.com/wycats/handlebars.js/compare/v4.7.0...v4.7.1)
119
120## v4.7.0 - January 10th, 2020
121
122Features:
123
124- feat: default options for controlling proto access - 7af1c12, #1635
125  - This makes it possible to disable the prototype access restrictions added in 4.6.0
126  - an error is logged in the console, if access to prototype properties is attempted and denied
127    and no explicit configuration has taken place.
128
129Compatibility notes:
130
131- no compatibilities are expected
132
133[Commits](https://github.com/wycats/handlebars.js/compare/v4.6.0...v4.7.0)
134
135## v4.6.0 - January 8th, 2020
136
137Features:
138
139- feat: access control to prototype properties via whitelist (#1633)- d03b6ec
140
141Bugfixes:
142
143- fix(runtime.js): partials compile not caching (#1600) - 23d58e7
144
145Chores, docs:
146
147- various refactorings and improvements to tests - d7f0dcf, 187d611, d337f40
148- modernize the build-setup
149  - use prettier to format and eslint to verify - c40d9f3, 8901c28, e97685e, 1f61f21
150  - use nyc instead of istanbul to collect coverage - 164b7ff, 1ebce2b
151  - update build code to use modern javascript and make it cleaner - 14b621c, 1ec1737, 3a5b65e, dde108e, 04b1984, 587e7a3
152  - restructur build commands - e913dc5,
153- eslint rule changes - ac4655e, dc54952
154- Update (C) year in the LICENSE file - d1fb07b
155- chore: try to fix saucelabs credentials (#1627) -
156- Update readme.md with updated links (#1620) - edcc84f
157
158BREAKING CHANGES:
159
160- access to prototype properties is forbidden completely by default,
161  specific properties or methods can be allowed via runtime-options.
162  See #1633 for details.
163  If you are using Handlebars as documented, you should not be accessing prototype
164  properties from your template anyway, so the changes should not be a problem
165  for you. Only the use of undocumented features can break your build.
166
167  That is why we only bump the minor version despite mentioning breaking changes.
168
169[Commits](https://github.com/wycats/handlebars.js/compare/v4.5.3...v4.6.0)
170
171## v4.5.3 - November 18th, 2019
172
173Bugfixes:
174
175- fix: add "no-prototype-builtins" eslint-rule and fix all occurences - f7f05d7
176- fix: add more properties required to be enumerable - 1988878
177
178Chores / Build:
179
180- fix: use !== 0 instead of != 0 - c02b05f
181- add chai and dirty-chai and sinon, for cleaner test-assertions and spies,
182  deprecate old assertion-methods - 93e284e, 886ba86, 0817dad, 93516a0
183
184Security:
185
186- The properties `__proto__`, `__defineGetter__`, `__defineSetter__` and `__lookupGetter__`
187  have been added to the list of "properties that must be enumerable".
188  If a property by that name is found and not enumerable on its parent,
189  it will silently evaluate to `undefined`. This is done in both the compiled template and the "lookup"-helper.
190  This will prevent new Remote-Code-Execution exploits that have been
191  published recently.
192
193Compatibility notes:
194
195- Due to the security-fixes. The semantics of the templates using
196  `__proto__`, `__defineGetter__`, `__defineSetter__` and `__lookupGetter__` in the respect that those expression now return
197  `undefined` rather than their actual value from the proto.
198- The semantics have not changed in cases where the properties are enumerable, as in:
199
200```js
201{
202  __proto__: 'some string';
203}
204```
205
206- The change may be breaking in that respect, but we still only
207  increase the patch-version, because the incompatible use-cases
208  are not intended, undocumented and far less important than fixing
209  Remote-Code-Execution exploits on existing systems.
210
211[Commits](https://github.com/wycats/handlebars.js/compare/v4.5.2...v4.5.3)
212
213## v4.5.2 - November 13th, 2019
214
215# Bugfixes
216
217- fix: use String(field) in lookup when checking for "constructor" - d541378
218- test: add fluent API for testing Handlebars - c2ac79c
219
220Compatibility notes:
221
222- no incompatibility are to be expected
223
224[Commits](https://github.com/wycats/handlebars.js/compare/v4.5.1...v4.5.2)
225
226## v4.5.1 - October 29th, 2019
227
228Bugfixs
229
230- fix: move "eslint-plugin-compat" to devDependencies - 5e9d17f (#1589)
231
232Compatibility notes:
233
234- No compatibility issues are to be expected
235
236[Commits](https://github.com/wycats/handlebars.js/compare/v4.5.0...v4.5.1)
237
238## v4.5.0 - October 28th, 2019
239
240Features / Improvements
241
242- Add method Handlebars.parseWithoutProcessing (#1584) - 62ed3c2
243- add guard to if & unless helpers (#1549)
244- show source location for the strict lookup exceptions - feb60f8
245
246Bugfixes:
247
248- Use objects for hash value tracking - 7fcf9d2
249
250Chore:
251
252- Resolve deprecation warning message from eslint while running eslint (#1586) - 7052e88
253- chore: add eslint-plugin-compat and eslint-plugin-es5 - 088e618
254
255Compatibility notes:
256
257- No compatibility issues are to be expected
258
259[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.5...v4.5.0)
260
261## v4.4.5 - October 20th, 2019
262
263Bugfixes:
264
265- Contents of raw-blocks must be matched with non-eager regex-matching - 8d5530e, #1579
266
267[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.4...v4.4.5)
268
269## v4.4.4 - October 20th, 2019
270
271Bugfixes:
272
273- fix: prevent zero length tokens in raw-blocks (#1577, #1578) - f1752fe
274
275Chore:
276
277- chore: link to s3 bucket with https, add "npm ci" to build instructions - 0b593bf
278
279Compatibility notes:
280
281- no compatibility issues are expected
282
283[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.3...v4.4.4)
284
285## v4.4.3 - October 8th, 2019
286
287Bugfixes
288
289Typings:
290
291- add missing type fields to AST typings and add tests for them - 0440af2
292
293[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.2...v4.4.3)
294
295## v4.4.2 - October 2nd, 2019
296
297- chore: fix grunt-saucelabs dependency - b7eada0
298
299[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.1...v4.4.2)
300
301## v4.4.1 - October 2nd, 2019
302
303- [#1562](https://github.com/wycats/handlebars.js/issues/1562) - Error message for syntax error missing location in 4.2.1+
304
305[Commits](https://github.com/wycats/handlebars.js/compare/v4.4.0...v4.4.1)
306
307## v4.4.0 - September 29th, 2019
308
309- Added support for iterable objects in {{#each}} helper (#1557) - cf7545e
310
311[Commits](https://github.com/wycats/handlebars.js/compare/v4.3.4...v4.4.0)
312
313## v4.3.4 - September 28th, 2019
314
315- fix: harden "propertyIsEnumerable"-check - ff4d827
316
317Compatibility notes:
318
319- No incompatibilities are known.
320
321[Commits](https://github.com/wycats/handlebars.js/compare/v4.3.3...v4.3.4)
322
323## v4.3.3 - September 27th, 2019
324
325- fix test case for browsers that do not support **defineGetter** - 8742bde
326
327[Commits](https://github.com/wycats/handlebars.js/compare/v4.3.2...v4.3.3)
328
329## v4.3.2 - September 26th, 2019
330
331- Use Object.prototype.propertyIsEnumerable to check for constructors - 213c0bb, #1563
332
333Compatibility notes:
334
335- There are no breaking changes
336
337[Commits](https://github.com/wycats/handlebars.js/compare/v4.3.1...v4.3.2)
338
339## v4.3.1 - September 25th, 2019
340
341Fixes:
342
343- do not break on precompiled templates from Handlebars >=4.0.0 <4.3.0 - 1266838, #1561
344- Ensure allowCallsToHelperMissing runtime option is optional in typings - 93444c5, 64ecb9e, #1560
345
346[Commits](https://github.com/wycats/handlebars.js/compare/v4.3.0...v4.3.1)
347
348## v4.3.0 - September 24th, 2019
349
350Fixes:
351
352- Security: Disallow calling "helperMissing" and "blockHelperMissing" directly - 2078c72
353- Disallow calling "helperMissing" and "blockHelperMissing" directly - 2078c72
354
355Features:
356
357- Add new runtime option `allowCallsToHelperMissing` to allow calling `blockHelperMissing` and `helperMissing`.
358
359Breaking changes:
360
361Compatibility notes:
362
363- Compiler revision increased - 06b7224
364
365  - This means that template compiled with versions prior to 4.3.0 will not work with runtimes >= 4.3.0
366    The increase was done because the "helperMissing" and "blockHelperMissing" are now moved from the helpers
367    to the internal "container.hooks" object, so old templates will not be able to call them anymore. We suggest
368    that you always recompile your templates with the latest compiler in your build pipelines.
369
370- Disallow calling "helperMissing" and "blockHelperMissing" directly - 2078c72
371  - Calling "helperMissing" and "blockHelperMissing" directly from a template (like in `{{blockHelperMissing}}` was
372    never intended and was part of the exploits that have been revealed early in 2019
373    (see https://github.com/wycats/handlebars.js/issues/1495). _It is also part of a new exploit that
374    is not captured by the earlier fix._ In order to harden Handlebars against such exploits, calling thos helpers
375    is now not possible anymore. _Overriding_ those helpers is still possible.
376  - If you really need this behavior, you can set the runtime option `allowCallsToHelperMissing` to `true` and the
377    calls will again be possible
378
379Both bullet points imly that Handlebars is not 100% percent compatible to 4.2.0, despite the minor version bump.
380
381We consider it more important to resolve a major security issue than to maintain 100% compatibility.
382
383[Commits](https://github.com/wycats/handlebars.js/compare/v4.2.1...v4.3.0)
384
385## v4.2.1 - September 20th, 2019
386
387Bugfixes:
388
389- The "browser" property in the package.json has been updated to use the common-js builds instead of the minified UMD - c55a7be, #1553
390
391Compatibility notes:
392
393- No compatibility issues should arise
394
395[Commits](https://github.com/wycats/handlebars.js/compare/v4.2.0...v4.2.1)
396
397## v4.2.0 - September 3rd, 2019
398
399Chore/Test:
400
401- Use custom `grunt-saucelab` with current sauce-connect proxy - f119497
402- Add framework for various integration tests - f9cce4d
403- Add integration test for webpack - a57b682
404
405Bugfixes:
406
407- [#1544](https://github.com/wycats/handlebars.js/issues/1544) - Typescript types: `knownHelpers` doesnt allow for custom helpers ([@NickCis](https://api.github.com/users/NickCis))
408- [#1534](https://github.com/wycats/handlebars.js/pull/1534) - Add typings for "Handlebars.VM.resolvePartial ([@AndrewLeedham](https://api.github.com/users/AndrewLeedham))
409
410Features:
411
412- [#1540](https://github.com/wycats/handlebars.js/pull/1540) - added "browser"-property to package.json, resolves #1102 ([@ouijan](https://api.github.com/users/ouijan))
413
414Compatibility notes:
415
416- The new "browser"-property should not break anything, but you can never be sure. The integration test for webpack
417  shows that it works, but if it doesn't please open an issue.
418
419[Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2-0...v4.2.0)
420
421## v4.1.2-0 - August 25th, 2019
422
423[#1540](https://github.com/wycats/handlebars.js/pull/1540) - added browser to package.json, resolves #1102 ([@ouijan](https://api.github.com/users/ouijan))
424
425Compatibility notes:
426
427- We are not sure if imports via webpack are still working, which is why this release is a pre-release
428
429[Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.1.2-0)
430
431## v4.1.2 - April 13th, 2019
432
433Chore/Test:
434
435- [#1515](https://github.com/wycats/handlebars.js/pull/1515) - Port over linting and test for typings ([@zimmi88](https://api.github.com/users/zimmi88))
436- chore: add missing typescript dependency, add package-lock.json - 594f1e3
437- test: remove safari from saucelabs - 871accc
438
439Bugfixes:
440
441- fix: prevent RCE through the "lookup"-helper - cd38583
442
443Compatibility notes:
444
445Access to the constructor of a class thought `{{lookup obj "constructor" }}` is now prohibited. This closes
446a leak that only half closed in versions 4.0.13 and 4.1.0, but it is a slight incompatibility.
447
448This kind of access is not the intended use of Handlebars and leads to the vulnerability described
449in #1495. We will **not** increase the major version, because such use is not intended or documented,
450and because of the potential impact of the issue (we fear that most people won't use a new major version
451and the issue may not be resolved on many systems).
452
453[Commits](https://github.com/wycats/handlebars.js/compare/v4.1.1...v4.1.2)
454
455## v4.1.1 - March 16th, 2019
456
457Bugfixes:
458
459- fix: add "runtime.d.ts" to allow "require('handlebars/runtime')" in TypeScript - 5cedd62
460
461Refactorings:
462
463- replace "async" with "neo-async" - 048f2ce
464- use "substring"-function instead of "substr" - 445ae12
465
466Compatibility notes:
467
468- This is a bugfix release. There are no breaking change and no new features.
469
470[Commits](https://github.com/wycats/handlebars.js/compare/v4.1.0...v4.1.1)
471
472## v4.1.0 - February 7th, 2019
473
474New Features
475
476- import TypeScript typings - 27ac1ee
477
478Security fixes:
479
480- disallow access to the constructor in templates to prevent RCE - 42841c4, #1495
481
482Housekeeping
483
484- chore: fix components/handlebars package.json and auto-update on release - bacd473
485- chore: Use node 10 to build handlebars - 78dd89c
486- chore/doc: Add more release docs - 6b87c21
487
488Compatibility notes:
489
490Access to class constructors (i.e. `({}).constructor`) is now prohibited to prevent
491Remote Code Execution. This means that following construct will no work anymore:
492
493```
494class SomeClass {
495}
496
497SomeClass.staticProperty = 'static'
498
499var template = Handlebars.compile('{{constructor.staticProperty}}');
500document.getElementById('output').innerHTML = template(new SomeClass());
501// expected: 'static', but now this is empty.
502```
503
504This kind of access is not the intended use of Handlebars and leads to the vulnerability described in #1495. We will **not** increase the major version, because such use is not intended or documented, and because of the potential impact of the issue (we fear that most people won't use a new major version and the issue may not be resolved on many systems).
505
506[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.12...v4.1.0)
507
508## v4.0.12 - September 4th, 2018
509
510New features:
511
512- none
513
514Various dependency updates
515
516- [#1464](https://github.com/wycats/handlebars.js/pull/1464) - Bump versions of grunt-plugins to 1.x
517- [#1398](https://github.com/wycats/handlebars.js/pull/1398) - Chore: updated various dev dependencies
518- upgrade uglify-js - d3d3942
519- Update grunt-eslint to 20.1.0 - 7729aa9
520- Update dependencies "async" to 2.5.0 and "source-map" to 0.6.1 (73d5637)
521
522Bugfixes:
523
524- [components/handlebars.js#24](https://github.com/components/handlebars.js#24) Add package.json to components shim
525- Updated `source-map`-package should work better with `rollup`[#1463](https://github.com/wycats/handlebars.js/issues/1463)
526
527Removed obsolete code:
528
529- unnecessary check - 0ddff8b
530- Use `files` field - 69c6ca5
531- Update jsfiddle to 4.0.11 - 8947dd0
532
533Compatibility notes:
534
535- No compatibility issues are to be expected
536
537[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.11...v4.0.12)
538
539## v4.0.11 - October 17th, 2017
540
541- [#1391](https://github.com/wycats/handlebars.js/issues/1391) - `uglify-js` is unconditionally imported, but only listed as optional dependency ([@Turbo87](https://github.com/Turbo87))
542- [#1233](https://github.com/wycats/handlebars.js/issues/1233) - Unable to build under windows - error at test:bin task ([@blikblum](https://github.com/blikblum))
543- Update (C) year in the LICENSE file - 21386b6
544
545Compatibility notes:
546
547- This is a bugfix release. There are no breaking change and no new features.
548
549[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.10...v4.0.11)
550
551## v4.0.10 - May 21st, 2017
552
553- Fix regression in 4.0.9: Replace "Object.assign" (not support in IE) by "util/extend" - 0e953d1
554
555[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.9...v4.0.10)
556
557## v4.0.9 - May 21st, 2017
558
559- [#1327](https://github.com/wycats/handlebars.js/issues/1327) Handlebars.compile() does not modify "options" anymore
560- pending [#1331](https://github.com/wycats/handlebars.js/issues/1331) Attempts to build Handlebars in a Windows environment
561  - Fix build in windows - cc554a5
562  - Ensure LF line-edings in handlebars-template fixtures (\*.hbs) - ed879a6
563  - Run integration test with `node handlebars -a ...` on Windows - 2e21e2b
564  - Ensure LF line-edings in lexer-files (\*.l) - bdfdbea
565  - Force LF line-endings for spec/artifacts - b50ef03
566  - Use istanbul/lib/cli.js instead of node_modules/.bin/istanbul - 6e6269f
567- TravisCI: Publish valid semver tags independently of the branch - 7378f85
568
569Compatibility notes:
570
571- No compatibility issues are expected.
572
573[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.8...v4.0.9)
574
575## v4.0.8 - May 2nd, 2017
576
577- [#1341](https://github.com/wycats/handlebars.js/issues/1341) [#1342](https://github.com/wycats/handlebars.js/issues/1342) Allow partial-blocks to be executed without "options" ([@nknapp](https://github.com/nknapp)) - a00c598
578
579Compatibility notes:
580
581- No breaking changes
582
583[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.7...v4.0.8)
584
585## v4.0.7 - April 29th, 2017
586
587- [#1319](https://github.com/wycats/handlebars.js/issues/1319): Fix context-stack when calling block-helpers on null values ([@nknapp](https://github.com/nknapp)) - c8f4b57
588- [#1315](https://github.com/wycats/handlebars.js/pull/1315) Parser: Change suffix to use ES6 default module export ([@Turbo87](https://github.com/Turbo87))- b617375
589- [#1290](https://github.com/wycats/handlebars.js/pull/1290) [#1252](https://github.com/wycats/handlebars.js/issue/1290) Add more tests for partial-blocks and inline partials ([@nknapp](https://github.com/nknapp)) - 63a8e0c
590- [#1252](https://github.com/wycats/handlebars.js/issue/1290) Using @partial-block twice in a template not possible ([@nknapp](https://github.com/nknapp)) - 5a164d0
591- [#1310](https://github.com/wycats/handlebars.js/pull/1310) Avoid duplicate "sourceMappingURL=" lines. ([@joonas-lahtinen](https://github.com/joonas-lahtinen)) - 01b0f65
592- [#1275](https://github.com/wycats/handlebars.js/pull/1275) require('sys') is deprecated, using 'util' instead ([@travnels](https://github.com/travnels)) - 406f2ee
593- [#1285](https://github.com/wycats/handlebars.js/pull/1285) [#1284](https://github.com/wycats/handlebars.js/issues/1284) Make "column"-property of Errors enumerable ([@nknapp](https://github.com/nknapp)) - a023cb4
594- [#1285](https://github.com/wycats/handlebars.js/pull/1285) Testcase to verify that compile-errors have a column-property ([@nknapp](https://github.com/nknapp)) - c7dc353
595
596[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.6...v4.0.7)
597
598## v4.0.6 - November 12th, 2016
599
600- [#1243](https://github.com/wycats/handlebars.js/pull/1243) - Walk up data frames for nested @partial-block ([@lawnsea](https://github.com/lawnsea))
601- [#1210](https://github.com/wycats/handlebars.js/pull/1210) - Add a new lightweight package based on handlebars in the README ([@kabirbaidhya](https://github.com/kabirbaidhya))
602- [#1187](https://github.com/wycats/handlebars.js/pull/1187) - Ensure that existing blockParams and depths are respected on dupe programs ([@charleso](https://github.com/charleso))
603- [#1191](https://github.com/wycats/handlebars.js/pull/1191) - Added cory ([@leo](https://github.com/leo))
604- [#1177](https://github.com/wycats/handlebars.js/pull/1177) - Preserve License info in Closure Compiler ([@gennadiylitvinyuk](https://github.com/gennadiylitvinyuk))
605- [#1171](https://github.com/wycats/handlebars.js/pull/1171) - Contributing doc fix: failing thats -> failing tests ([@paulfalgout](https://github.com/paulfalgout))
606- [#1166](https://github.com/wycats/handlebars.js/pull/1166) - Update license date ([@timwangdev](https://github.com/timwangdev))
607- Update jsfiddle to point to latest - 959ee55 (originally dfc7554 by [@kpdecker](https://github.com/kpdecker))
608- [#1163](https://github.com/wycats/handlebars.js/pull/1163) - Fix typos on decorators-api.md. ([@adjohnson916](https://github.com/adjohnson916))
609- Drop extra Error params - 8c19874 (originally 63fdb92 by [@kpdecker](https://github.com/kpdecker))
610- [#1153](https://github.com/wycats/handlebars.js/pull/1153) - Add documentation for running tests to contributing.md ([@ryanmurakami](https://github.com/ryanmurakami))
611- Avoid error in older browsers in test - 400916c (originally a6121ca by [@kpdecker](https://github.com/kpdecker))
612- Update target browser test versions - fee2334 (originally 871c32a by [@kpdecker](https://github.com/kpdecker))
613- Exclude coverage check in exception conditional - 32d6363 (originally 326734b by [@kpdecker](https://github.com/kpdecker))
614- Fix throw when creating exception object in Safari - 20c965c (originally 2ea6119 by [@kpdecker](https://github.com/kpdecker))
615- Update build for modern node versions - 6c9f98c (originally 8289c0b by [@kpdecker](https://github.com/kpdecker))
616- [#1135](https://github.com/wycats/handlebars.js/issues/1135) - Relax depth check for context push - c393c81 (originally 25458fd by [@kpdecker](https://github.com/kpdecker))
617
618[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.5...v4.0.6)
619
620## v4.0.5 - November 19th, 2015
621
622- [#1132](https://github.com/wycats/handlebars.js/pull/1132) - Update uglify-js to avoid vulnerability ([@plynchnlm](https://github.com/plynchnlm))
623- [#1129](https://github.com/wycats/handlebars.js/issues/1129) - Minified lib returns an empty string ([@bricss](https://github.com/bricss))
624- Return current handlebars instance from noConflict - 685cf92
625- Add webpack to dev dependency to support npm 3 - 7a6c228
626- Further relax uglify dependency - 0a3b3c2
627- Include tests for minimized artifacts - c21118d
628- Fix lint errors under latest eslint - 9f59de9
629- Add print-script helper script - 98a6717
630
631[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.4...v4.0.5)
632
633## v4.0.4 - October 29th, 2015
634
635- [#1121](https://github.com/wycats/handlebars.js/pull/1121) - Include partial name in 'undefined partial' exception message ([@shinypb](https://github.com/shinypb))
636- [#1125](https://github.com/wycats/handlebars.js/pull/1125) - Add promised-handlebars to "in-the-wild"-list ([@nknapp](https://github.com/nknapp))
637
638[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.3...v4.0.4)
639
640## v4.0.3 - September 23rd, 2015
641
642- [#1099](https://github.com/wycats/handlebars.js/issues/1099) - @partial-block is overridden ([@btmorex](https://github.com/btmorex))
643- [#1093](https://github.com/wycats/handlebars.js/issues/1093) - #each skips iteration on undefined values ([@florianpilz](https://github.com/florianpilz))
644- [#1092](https://github.com/wycats/handlebars.js/issues/1092) - Square braces in key name ([@distantnative](https://github.com/distantnative))
645- [#1091](https://github.com/wycats/handlebars.js/pull/1091) - fix typo in release notes ([@nikolas](https://github.com/nikolas))
646- [#1090](https://github.com/wycats/handlebars.js/pull/1090) - grammar fixes in 4.0.0 release notes ([@nikolas](https://github.com/nikolas))
647
648Compatibility notes:
649
650- `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.
651- `]` can now be included in `[]` wrapped identifiers by escaping with `\`. Any `[]` identifiers that include `\` will now have to properly escape these values.
652
653[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.2...v4.0.3)
654
655## v4.0.2 - September 4th, 2015
656
657- [#1089](https://github.com/wycats/handlebars.js/issues/1089) - "Failover content" not working in multiple levels of inline partials ([@michaellopez](https://github.com/michaellopez))
658
659[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.1...v4.0.2)
660
661## v4.0.1 - September 2nd, 2015
662
663- Fix failure when using decorators in partials - 05b82a2
664
665[Commits](https://github.com/wycats/handlebars.js/compare/v4.0.0...v4.0.1)
666
667## v4.0.0 - September 1st, 2015
668
669- [#1082](https://github.com/wycats/handlebars.js/pull/1082) - Decorators and Inline Partials ([@kpdecker](https://github.com/kpdecker))
670- [#1076](https://github.com/wycats/handlebars.js/pull/1076) - Implement partial blocks ([@kpdecker](https://github.com/kpdecker))
671- [#1087](https://github.com/wycats/handlebars.js/pull/1087) - Fix #each when last object entry has empty key ([@denniskuczynski](https://github.com/denniskuczynski))
672- [#1084](https://github.com/wycats/handlebars.js/pull/1084) - Bump uglify version to fix vulnerability ([@John-Steidley](https://github.com/John-Steidley))
673- [#1068](https://github.com/wycats/handlebars.js/pull/1068) - Fix typo ([@0xack13](https://github.com/0xack13))
674- [#1060](https://github.com/wycats/handlebars.js/pull/1060) - #1056 Fixed grammar for nested raw blocks ([@ericbn](https://github.com/ericbn))
675- [#1052](https://github.com/wycats/handlebars.js/pull/1052) - Updated year in License ([@maqnouch](https://github.com/maqnouch))
676- [#1037](https://github.com/wycats/handlebars.js/pull/1037) - Fix minor typos in README ([@tomxtobin](https://github.com/tomxtobin))
677- [#1032](https://github.com/wycats/handlebars.js/issues/1032) - Is it possible to render a partial without the parent scope? ([@aputinski](https://github.com/aputinski))
678- [#1019](https://github.com/wycats/handlebars.js/pull/1019) - Fixes typo in tests ([@aymerick](https://github.com/aymerick))
679- [#1016](https://github.com/wycats/handlebars.js/issues/1016) - Version mis-match ([@mayankdedhia](https://github.com/mayankdedhia))
680- [#1023](https://github.com/wycats/handlebars.js/issues/1023) - is it possible for nested custom helpers to communicate between each other?
681- [#893](https://github.com/wycats/handlebars.js/issues/893) - [Proposal] Section blocks.
682- [#792](https://github.com/wycats/handlebars.js/issues/792) - feature request: inline partial definitions
683- [#583](https://github.com/wycats/handlebars.js/issues/583) - Parent path continues to drill down depth with multiple conditionals
684- [#404](https://github.com/wycats/handlebars.js/issues/404) - Add named child helpers that can be referenced by block helpers
685- Escape = in HTML content - [83b8e84](https://github.com/wycats/handlebars.js/commit/83b8e84)
686- Drop AST constructors in favor of JSON - [95d84ba](https://github.com/wycats/handlebars.js/commit/95d84ba)
687- Pass container rather than exec as context - [9a2d1d6](https://github.com/wycats/handlebars.js/commit/9a2d1d6)
688- Add ignoreStandalone compiler option - [ea3a5a1](https://github.com/wycats/handlebars.js/commit/ea3a5a1)
689- Ignore empty when iterating on sparse arrays - [06d515a](https://github.com/wycats/handlebars.js/commit/06d515a)
690- Add support for string and stdin precompilation - [0de8dac](https://github.com/wycats/handlebars.js/commit/0de8dac)
691- Simplify object assignment generation logic - [77e6bfc](https://github.com/wycats/handlebars.js/commit/77e6bfc)
692- Bulletproof AST.helpers.helperExpression - [93b0760](https://github.com/wycats/handlebars.js/commit/93b0760)
693- Always return string responses - [8e868ab](https://github.com/wycats/handlebars.js/commit/8e868ab)
694- Pass undefined fields to helpers in strict mode - [5d4b8da](https://github.com/wycats/handlebars.js/commit/5d4b8da)
695- Avoid depth creation when context remains the same - [279e038](https://github.com/wycats/handlebars.js/commit/279e038)
696- Improve logging API - [9a49d35](https://github.com/wycats/handlebars.js/commit/9a49d35)
697- Fix with operator in no @data mode - [231a8d7](https://github.com/wycats/handlebars.js/commit/231a8d7)
698- Allow empty key name in each iteration - [1bb640b](https://github.com/wycats/handlebars.js/commit/1bb640b)
699- Add with block parameter support - [2a85106](https://github.com/wycats/handlebars.js/commit/2a85106)
700- Fix escaping of non-javascript identifiers - [410141c](https://github.com/wycats/handlebars.js/commit/410141c)
701- Fix location information for programs - [93faffa](https://github.com/wycats/handlebars.js/commit/93faffa)
702
703Compatibility notes:
704
705- 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 [#1028](https://github.com/wycats/handlebars.js/issues/1028).
706- 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.
707- AST constructors have been dropped in favor of plain old javascript objects
708- The runtime version has been increased. Precompiled templates will need to use runtime of at least 4.0.0.
709
710[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.3...v4.0.0)
711
712## v3.0.3 - April 28th, 2015
713
714- [#1004](https://github.com/wycats/handlebars.js/issues/1004) - Latest version breaks with RequireJS (global is undefined) ([@boskee](https://github.com/boskee))
715
716[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.2...v3.0.3)
717
718## v3.0.2 - April 20th, 2015
719
720- [#998](https://github.com/wycats/handlebars.js/pull/998) - Add full support for es6 ([@kpdecker](https://github.com/kpdecker))
721- [#994](https://github.com/wycats/handlebars.js/issues/994) - Access Handlebars.Visitor in browser ([@tamlyn](https://github.com/tamlyn))
722- [#990](https://github.com/wycats/handlebars.js/issues/990) - Allow passing null/undefined literals subexpressions ([@blimmer](https://github.com/blimmer))
723- [#989](https://github.com/wycats/handlebars.js/issues/989) - Source-map error with requirejs ([@SteppeEagle](https://github.com/SteppeEagle))
724- [#967](https://github.com/wycats/handlebars.js/issues/967) - can't access "this" property ([@75lb](https://github.com/75lb))
725- Use captureStackTrace for error handler - a009a97
726- Ignore branches tested without coverage monitoring - 37a664b
727
728[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.1...v3.0.2)
729
730## v3.0.1 - March 24th, 2015
731
732- [#984](https://github.com/wycats/handlebars.js/pull/984) - Adding documentation for passing arguments into partials ([@johneke](https://github.com/johneke))
733- [#973](https://github.com/wycats/handlebars.js/issues/973) - version 3 is slower than version 2 ([@elover](https://github.com/elover))
734- [#966](https://github.com/wycats/handlebars.js/issues/966) - "handlebars --version" does not work with v3.0.0 ([@abloomston](https://github.com/abloomston))
735- [#964](https://github.com/wycats/handlebars.js/pull/964) - default is a reserved word ([@grassick](https://github.com/grassick))
736- [#962](https://github.com/wycats/handlebars.js/pull/962) - Add dashbars' link on README. ([@pismute](https://github.com/pismute))
737
738[Commits](https://github.com/wycats/handlebars.js/compare/v3.0.0...v3.0.1)
739
740## v3.0.0 - February 10th, 2015
741
742- [#941](https://github.com/wycats/handlebars.js/pull/941) - Add support for dynamic partial names ([@kpdecker](https://github.com/kpdecker))
743- [#940](https://github.com/wycats/handlebars.js/pull/940) - Add missing reserved words so compiler knows to use array syntax: ([@mattflaschen](https://github.com/mattflaschen))
744- [#938](https://github.com/wycats/handlebars.js/pull/938) - Fix example using #with helper ([@diwo](https://github.com/diwo))
745- [#930](https://github.com/wycats/handlebars.js/pull/930) - Add parent tracking and mutation to AST visitors ([@kpdecker](https://github.com/kpdecker))
746- [#926](https://github.com/wycats/handlebars.js/issues/926) - Depthed lookups fail when program duplicator runs ([@kpdecker](https://github.com/kpdecker))
747- [#918](https://github.com/wycats/handlebars.js/pull/918) - Add instructions for 'spec/mustache' to CONTRIBUTING.md, fix a few typos ([@oneeman](https://github.com/oneeman))
748- [#915](https://github.com/wycats/handlebars.js/pull/915) - Ast update ([@kpdecker](https://github.com/kpdecker))
749- [#910](https://github.com/wycats/handlebars.js/issues/910) - Different behavior of {{@last}} when {{#each}} in {{#each}} ([@zordius](https://github.com/zordius))
750- [#907](https://github.com/wycats/handlebars.js/issues/907) - Implement named helper variable references ([@kpdecker](https://github.com/kpdecker))
751- [#906](https://github.com/wycats/handlebars.js/pull/906) - Add parser support for block params ([@mmun](https://github.com/mmun))
752- [#903](https://github.com/wycats/handlebars.js/issues/903) - Only provide aliases for multiple use calls ([@kpdecker](https://github.com/kpdecker))
753- [#902](https://github.com/wycats/handlebars.js/pull/902) - Generate Source Maps ([@kpdecker](https://github.com/kpdecker))
754- [#901](https://github.com/wycats/handlebars.js/issues/901) - Still escapes with noEscape enabled on isolated Handlebars environment ([@zedknight](https://github.com/zedknight))
755- [#896](https://github.com/wycats/handlebars.js/pull/896) - Simplify BlockNode by removing intermediate MustacheNode ([@mmun](https://github.com/mmun))
756- [#892](https://github.com/wycats/handlebars.js/pull/892) - Implement parser for else chaining of helpers ([@kpdecker](https://github.com/kpdecker))
757- [#889](https://github.com/wycats/handlebars.js/issues/889) - Consider extensible parser API ([@kpdecker](https://github.com/kpdecker))
758- [#887](https://github.com/wycats/handlebars.js/issues/887) - Handlebars.noConflict() option? ([@bradvogel](https://github.com/bradvogel))
759- [#886](https://github.com/wycats/handlebars.js/issues/886) - Add SafeString to context (or use duck-typing) ([@dominicbarnes](https://github.com/dominicbarnes))
760- [#870](https://github.com/wycats/handlebars.js/pull/870) - Registering undefined partial throws exception. ([@max-b](https://github.com/max-b))
761- [#866](https://github.com/wycats/handlebars.js/issues/866) - comments don't respect whitespace control ([@75lb](https://github.com/75lb))
762- [#863](https://github.com/wycats/handlebars.js/pull/863) - + jsDelivr CDN info ([@tomByrer](https://github.com/tomByrer))
763- [#858](https://github.com/wycats/handlebars.js/issues/858) - Disable new default auto-indent at included partials ([@majodev](https://github.com/majodev))
764- [#856](https://github.com/wycats/handlebars.js/pull/856) - jspm compatibility ([@MajorBreakfast](https://github.com/MajorBreakfast))
765- [#805](https://github.com/wycats/handlebars.js/issues/805) - Request: "strict" lookups ([@nzakas](https://github.com/nzakas))
766
767- Export the default object for handlebars/runtime - 5594416
768- Lookup partials when undefined - 617dd57
769
770Compatibility notes:
771
772- Runtime breaking changes. Must match 3.x runtime and precompiler.
773- The AST has been upgraded to a public API.
774  - There are a number of changes to this, but the format is now documented in docs/compiler-api.md
775  - The Visitor API has been expanded to support mutation and provide a base implementation
776- The `JavaScriptCompiler` APIs have been formalized and documented. As part of the sourcemap handling these should be updated to return arrays for concatenation.
777- `JavaScriptCompiler.namespace` has been removed as it was unused.
778- `SafeString` is now duck typed on `toHTML`
779
780New Features:
781
782- noConflict
783- Source Maps
784- Block Params
785- Strict Mode
786- @last and other each changes
787- Chained else blocks
788- @data methods can now have helper parameters passed to them
789- Dynamic partials
790
791[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0...v3.0.0)
792
793## v2.0.0 - September 1st, 2014
794
795- Update jsfiddle to 2.0.0-beta.1 - 0670f65
796- Add contrib note regarding handlebarsjs.com docs - 4d17e3c
797- Play nice with gemspec version numbers - 64d5481
798
799[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-beta.1...v2.0.0)
800
801## v2.0.0-beta.1 - August 26th, 2014
802
803- [#787](https://github.com/wycats/handlebars.js/pull/787) - Remove whitespace surrounding standalone statements ([@kpdecker](https://github.com/kpdecker))
804- [#827](https://github.com/wycats/handlebars.js/issues/827) - Render false literal as “false” ([@scoot557](https://github.com/scoot557))
805- [#767](https://github.com/wycats/handlebars.js/issues/767) - Subexpressions bug with hash and context ([@evensoul](https://github.com/evensoul))
806- Changes to 0/undefined handling
807  - [#731](https://github.com/wycats/handlebars.js/pull/731) - Strange behavior for {{#foo}} {{bar}} {{/foo}} when foo is 0 ([@kpdecker](https://github.com/kpdecker))
808  - [#820](https://github.com/wycats/handlebars.js/issues/820) - strange behavior for {{foo.bar}} when foo is 0 or null or false ([@zordius](https://github.com/zordius))
809  - [#837](https://github.com/wycats/handlebars.js/issues/837) - Strange input for custom helper ( foo.bar == false when foo is undefined ) ([@zordius](https://github.com/zordius))
810- [#819](https://github.com/wycats/handlebars.js/pull/819) - Implement recursive field lookup ([@kpdecker](https://github.com/kpdecker))
811- [#764](https://github.com/wycats/handlebars.js/issues/764) - This reference not working for helpers ([@kpdecker](https://github.com/kpdecker))
812- [#773](https://github.com/wycats/handlebars.js/issues/773) - Implicit parameters in {{#each}} introduces a peculiarity in helpers calling convention ([@Bertrand](https://github.com/Bertrand))
813- [#783](https://github.com/wycats/handlebars.js/issues/783) - helperMissing and consistency for different expression types ([@ErisDS](https://github.com/ErisDS))
814- [#795](https://github.com/wycats/handlebars.js/pull/795) - Turn the precompile script into a wrapper around a module. ([@jwietelmann](https://github.com/jwietelmann))
815- [#823](https://github.com/wycats/handlebars.js/pull/823) - Support inverse sections on the with helper ([@dan-manges](https://github.com/dan-manges))
816- [#834](https://github.com/wycats/handlebars.js/pull/834) - Refactor blocks, programs and inverses ([@mmun](https://github.com/mmun))
817- [#852](https://github.com/wycats/handlebars.js/issues/852) - {{foo~}} space control behavior is different from older version ([@zordius](https://github.com/zordius))
818- [#835](https://github.com/wycats/handlebars.js/issues/835) - Templates overwritten if file is loaded twice
819
820- Expose escapeExpression on the root object - 980c38c
821- Remove nested function eval in blockHelperMissing - 6f22ec1
822- Fix compiler program de-duping - 9e3f824
823
824Compatibility notes:
825
826- The default build now outputs a generic UMD wrapper. This should be transparent change but may cause issues in some environments.
827- 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.
828  - `programWithDepth` has been removed an instead an array of context values is passed to fields needing depth lookups.
829- `false` values are now printed to output rather than silently dropped
830- 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.
831- Partials that are standalone will now indent their rendered content
832- `AST.ProgramNode`'s signature has changed.
833- Numerious methods/features removed from pseudo-API classes
834  - `JavaScriptCompiler.register`
835  - `JavaScriptCompiler.replaceStack` no longer supports non-inline replace
836  - `Compiler.disassemble`
837  - `DECLARE` opcode
838  - `strip` opcode
839  - `lookup` opcode
840  - Content nodes may have their `string` values mutated over time. `original` field provides the unmodified value.
841- Removed unused `Handlebars.registerHelper` `inverse` parameter
842- `each` helper requires iterator parameter
843
844[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.4...v2.0.0-beta.1)
845
846## v2.0.0-alpha.4 - May 19th, 2014
847
848- Expose setup wrappers for compiled templates - 3638874
849
850[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.3...v2.0.0-alpha.4)
851
852## v2.0.0-alpha.3 - May 19th, 2014
853
854- [#797](https://github.com/wycats/handlebars.js/pull/797) - Pass full helper ID to helperMissing when options are provided ([@tomdale](https://github.com/tomdale))
855- [#793](https://github.com/wycats/handlebars.js/pull/793) - Ensure isHelper is coerced to a boolean ([@mmun](https://github.com/mmun))
856- Refactor template init logic - 085e5e1
857
858[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.2...v2.0.0-alpha.3)
859
860## v2.0.0-alpha.2 - March 6th, 2014
861
862- [#756](https://github.com/wycats/handlebars.js/pull/756) - fix bug in IE<=8 (no Array::map), closes #751 ([@jenseng](https://github.com/jenseng))
863- [#749](https://github.com/wycats/handlebars.js/pull/749) - properly handle multiple subexpressions in the same hash, fixes #748 ([@jenseng](https://github.com/jenseng))
864- [#743](https://github.com/wycats/handlebars.js/issues/743) - subexpression confusion/problem? ([@waynedpj](https://github.com/waynedpj))
865- [#746](https://github.com/wycats/handlebars.js/issues/746) - [CLI] support `handlebars --version` ([@apfelbox](https://github.com/apfelbox))
866- [#747](https://github.com/wycats/handlebars.js/pull/747) - updated grunt-saucelabs, failing tests revealed ([@Jonahss](https://github.com/Jonahss))
867- Make JSON a requirement for the compiler. - 058c0fb
868- Temporarily kill the AWS publish CI step - 8347ee2
869
870Compatibility notes:
871
872- 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.
873
874[Commits](https://github.com/wycats/handlebars.js/compare/v2.0.0-alpha.1...v2.0.0-alpha.2)
875
876## v2.0.0-alpha.1 - February 10th, 2014
877
878- [#182](https://github.com/wycats/handlebars.js/pull/182) - Allow passing hash parameters to partials ([@kpdecker](https://github.com/kpdecker))
879- [#392](https://github.com/wycats/handlebars.js/pull/392) - Access to root context in partials and helpers ([@kpdecker](https://github.com/kpdecker))
880- [#472](https://github.com/wycats/handlebars.js/issues/472) - Helpers cannot have decimal parameters ([@kayleg](https://github.com/kayleg))
881- [#569](https://github.com/wycats/handlebars.js/pull/569) - Unable to lookup array values using @index ([@kpdecker](https://github.com/kpdecker))
882- [#491](https://github.com/wycats/handlebars.js/pull/491) - For nested helpers: get the @ variables of the outer helper from the inner one ([@kpdecker](https://github.com/kpdecker))
883- [#669](https://github.com/wycats/handlebars.js/issues/669) - Ability to unregister a helper ([@dbachrach](https://github.com/dbachrach))
884- [#730](https://github.com/wycats/handlebars.js/pull/730) - Raw block helpers ([@kpdecker](https://github.com/kpdecker))
885- [#634](https://github.com/wycats/handlebars.js/pull/634) - It would be great to have the helper name passed to `blockHelperMissing` ([@kpdecker](https://github.com/kpdecker))
886- [#729](https://github.com/wycats/handlebars.js/pull/729) - Convert template spec to object literal ([@kpdecker](https://github.com/kpdecker))
887
888- [#658](https://github.com/wycats/handlebars.js/issues/658) - Depthed helpers do not work after an upgrade from 1.0.0 ([@xibxor](https://github.com/xibxor))
889- [#671](https://github.com/wycats/handlebars.js/issues/671) - Crashes on no-parameter {{#each}} ([@stepancheg](https://github.com/stepancheg))
890- [#689](https://github.com/wycats/handlebars.js/issues/689) - broken template precompilation ([@AAS](https://github.com/AAS))
891- [#698](https://github.com/wycats/handlebars.js/pull/698) - Fix parser generation under windows ([@osiris43](https://github.com/osiris43))
892- [#699](https://github.com/wycats/handlebars.js/issues/699) - @DATA not compiles to invalid JS in stringParams mode ([@kpdecker](https://github.com/kpdecker))
893- [#705](https://github.com/wycats/handlebars.js/issues/705) - 1.3.0 can not be wrapped in an IIFE ([@craigteegarden](https://github.com/craigteegarden))
894- [#706](https://github.com/wycats/handlebars.js/pull/706) - README: Use with helper instead of relying on blockHelperMissing ([@scottgonzalez](https://github.com/scottgonzalez))
895
896- [#700](https://github.com/wycats/handlebars.js/pull/700) - Remove redundant conditions ([@blakeembrey](https://github.com/blakeembrey))
897- [#704](https://github.com/wycats/handlebars.js/pull/704) - JavaScript Compiler Cleanup ([@blakeembrey](https://github.com/blakeembrey))
898
899Compatibility notes:
900
901- `helperMissing` helper no longer has the indexed name argument. Helper name is now available via `options.name`.
902- Precompiler output has changed, which breaks compatibility with prior versions of the runtime and precompiled output.
903- `JavaScriptCompiler.compilerInfo` now returns generic objects rather than javascript source.
904- AST changes
905  - INTEGER -> NUMBER
906  - Additional PartialNode hash parameter
907  - New RawBlockNode type
908- Data frames now have a `_parent` field. This is internal but is enumerable for performance/compatibility reasons.
909
910[Commits](https://github.com/wycats/handlebars.js/compare/v1.3.0...v2.0.0-alpha.1)
911
912## v1.3.0 - January 1st, 2014
913
914- [#690](https://github.com/wycats/handlebars.js/pull/690) - Added support for subexpressions ([@machty](https://github.com/machty))
915- [#696](https://github.com/wycats/handlebars.js/pull/696) - Fix for reserved keyword "default" ([@nateirwin](https://github.com/nateirwin))
916- [#692](https://github.com/wycats/handlebars.js/pull/692) - add line numbers to nodes when parsing ([@fivetanley](https://github.com/fivetanley))
917- [#695](https://github.com/wycats/handlebars.js/pull/695) - Pull options out from param setup to allow easier extension ([@blakeembrey](https://github.com/blakeembrey))
918- [#694](https://github.com/wycats/handlebars.js/pull/694) - Make the environment reusable ([@blakeembrey](https://github.com/blakeembrey))
919- [#636](https://github.com/wycats/handlebars.js/issues/636) - Print line and column of errors ([@sgronblo](https://github.com/sgronblo))
920- Use literal for data lookup - c1a93d3
921- Add stack handling sanity checks - cd885bf
922- Fix stack id "leak" on replaceStack - ddfe457
923- Fix incorrect stack pop when replacing literals - f4d337d
924
925[Commits](https://github.com/wycats/handlebars.js/compare/v1.2.1...v1.3.0)
926
927## v1.2.1 - December 26th, 2013
928
929- [#684](https://github.com/wycats/handlebars.js/pull/684) - Allow any number of trailing characters for valid JavaScript variable ([@blakeembrey](https://github.com/blakeembrey))
930- [#686](https://github.com/wycats/handlebars.js/pull/686) - Falsy AMD module names in version 1.2.0 ([@kpdecker](https://github.com/kpdecker))
931
932[Commits](https://github.com/wycats/handlebars.js/compare/v1.2.0...v1.2.1)
933
934## v1.2.0 - December 23rd, 2013
935
936- [#675](https://github.com/wycats/handlebars.js/issues/675) - Cannot compile empty template for partial ([@erwinw](https://github.com/erwinw))
937- [#677](https://github.com/wycats/handlebars.js/issues/677) - Triple brace statements fail under IE ([@hamzaCM](https://github.com/hamzaCM))
938- [#655](https://github.com/wycats/handlebars.js/issues/655) - Loading Handlebars using bower ([@niki4810](https://github.com/niki4810))
939- [#657](https://github.com/wycats/handlebars.js/pull/657) - Fixes issue where cli compiles non handlebars templates ([@chrishoage](https://github.com/chrishoage))
940- [#681](https://github.com/wycats/handlebars.js/pull/681) - Adds in-browser testing and Saucelabs CI ([@kpdecker](https://github.com/kpdecker))
941- [#661](https://github.com/wycats/handlebars.js/pull/661) - Add @first and @index to #each object iteration ([@cgp](https://github.com/cgp))
942- [#650](https://github.com/wycats/handlebars.js/pull/650) - Handlebars is MIT-licensed ([@thomasboyt](https://github.com/thomasboyt))
943- [#641](https://github.com/wycats/handlebars.js/pull/641) - Document ember testing process ([@kpdecker](https://github.com/kpdecker))
944- [#662](https://github.com/wycats/handlebars.js/issues/662) - handlebars-source 1.1.2 is missing from RubyGems.
945- [#656](https://github.com/wycats/handlebars.js/issues/656) - Expose COMPILER_REVISION checks as a hook ([@machty](https://github.com/machty))
946- [#668](https://github.com/wycats/handlebars.js/issues/668) - Consider publishing handlebars-runtime as a separate module on npm ([@dlmanning](https://github.com/dlmanning))
947- [#679](https://github.com/wycats/handlebars.js/issues/679) - Unable to override invokePartial ([@mattbrailsford](https://github.com/mattbrailsford))
948- [#646](https://github.com/wycats/handlebars.js/pull/646) - Fix "\\{{" immediately following "\{{" ([@dmarcotte](https://github.com/dmarcotte))
949- Allow extend to work with non-prototyped objects - eb53f2e
950- Add JavascriptCompiler public API tests - 1a751b2
951- Add AST test coverage for more complex paths - ddea5be
952- Fix handling of boolean escape in MustacheNode - b4968bb
953
954Compatibility notes:
955
956- `@index` and `@first` are now supported for `each` iteration on objects
957- `Handlebars.VM.checkRevision` and `Handlebars.JavaScriptCompiler.prototype.compilerInfo` now available to modify the version checking behavior.
958- Browserify users may link to the runtime library via `require('handlebars/runtime')`
959
960[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.2...v1.2.0)
961
962## v1.1.2 - November 5th, 2013
963
964- [#645](https://github.com/wycats/handlebars.js/issues/645) - 1.1.1 fails under IE8 ([@kpdecker](https://github.com/kpdecker))
965- [#644](https://github.com/wycats/handlebars.js/issues/644) - Using precompiled templates (AMD mode) with handlebars.runtime 1.1.1 ([@fddima](https://github.com/fddima))
966
967- Add simple binary utility tests - 96a45a4
968- Fix empty string compilation - eea708a
969
970[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.1...v1.1.2)
971
972## v1.1.1 - November 4th, 2013
973
974- [#642](https://github.com/wycats/handlebars.js/issues/642) - handlebars 1.1.0 are broken with nodejs
975
976- Fix release notes link - 17ba258
977
978[Commits](https://github.com/wycats/handlebars.js/compare/v1.1.0...v1.1.1)
979
980## v1.1.0 - November 3rd, 2013
981
982- [#628](https://github.com/wycats/handlebars.js/pull/628) - Convert code to ES6 modules ([@kpdecker](https://github.com/kpdecker))
983- [#336](https://github.com/wycats/handlebars.js/pull/336) - Add whitespace control syntax ([@kpdecker](https://github.com/kpdecker))
984- [#535](https://github.com/wycats/handlebars.js/pull/535) - Fix for probable JIT error under Safari ([@sorentwo](https://github.com/sorentwo))
985- [#483](https://github.com/wycats/handlebars.js/issues/483) - Add first and last @ vars to each helper ([@denniskuczynski](https://github.com/denniskuczynski))
986- [#557](https://github.com/wycats/handlebars.js/pull/557) - `\\{{foo}}` escaping only works in some situations ([@dmarcotte](https://github.com/dmarcotte))
987- [#552](https://github.com/wycats/handlebars.js/pull/552) - Added BOM removal flag. ([@blessenm](https://github.com/blessenm))
988- [#543](https://github.com/wycats/handlebars.js/pull/543) - publish passing master builds to s3 ([@fivetanley](https://github.com/fivetanley))
989
990- [#608](https://github.com/wycats/handlebars.js/issues/608) - Add `includeZero` flag to `if` conditional
991- [#498](https://github.com/wycats/handlebars.js/issues/498) - `Handlebars.compile` fails on empty string although a single blank works fine
992- [#599](https://github.com/wycats/handlebars.js/issues/599) - lambda helpers only receive options if used with arguments
993- [#592](https://github.com/wycats/handlebars.js/issues/592) - Optimize array and subprogram performance
994- [#571](https://github.com/wycats/handlebars.js/issues/571) - uglify upgrade breaks compatibility with older versions of node
995- [#587](https://github.com/wycats/handlebars.js/issues/587) - Partial inside partial breaks?
996
997Compatibility notes:
998
999- The project now includes separate artifacts for AMD, CommonJS, and global objects.
1000  - 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 [gist](https://gist.github.com/wycats/7417be0dc361a69d5916) provides some discussion of possible compatibility shims.
1001  - CommonJS/Node: Node loading occurs as normal via `require`
1002  - Globals: The `handlebars.js` and `handlebars.runtime.js` files should behave in the same manner as the v1.0.12 / 1.0.0 release.
1003- 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.
1004- Context-stored helpers are now always passed the `options` hash. Previously no-argument helpers did not have this argument.
1005
1006[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.12...v1.1.0)
1007
1008## v1.0.12 / 1.0.0 - May 31 2013
1009
1010- [#515](https://github.com/wycats/handlebars.js/issues/515) - Add node require extensions support ([@jjclark1982](https://github.com/jjclark1982))
1011- [#517](https://github.com/wycats/handlebars.js/issues/517) - Fix amd precompiler output with directories ([@blessenm](https://github.com/blessenm))
1012- [#433](https://github.com/wycats/handlebars.js/issues/433) - Add support for unicode ids
1013- [#469](https://github.com/wycats/handlebars.js/issues/469) - Add support for `?` in ids
1014- [#534](https://github.com/wycats/handlebars.js/issues/534) - Protect from object prototype modifications
1015- [#519](https://github.com/wycats/handlebars.js/issues/519) - Fix partials with . name ([@jamesgorrie](https://github.com/jamesgorrie))
1016- [#519](https://github.com/wycats/handlebars.js/issues/519) - Allow ID or strings in partial names
1017- [#437](https://github.com/wycats/handlebars.js/issues/437) - Require matching brace counts in escaped expressions
1018- Merge passed partials and helpers with global namespace values
1019- Add support for complex ids in @data references
1020- Docs updates
1021
1022Compatibility notes:
1023
1024- The parser is now stricter on `{{{`, requiring that the end token be `}}}`. Templates that do not
1025  follow this convention should add the additional brace value.
1026- 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.
1027- The compiler version has changed. Precompiled templates with 1.0.12 or higher must use the 1.0.0 or higher runtime.
1028
1029[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.11...v1.0.12)
1030
1031## v1.0.11 / 1.0.0-rc4 - May 13 2013
1032
1033- [#458](https://github.com/wycats/handlebars.js/issues/458) - Fix `./foo` syntax ([@jpfiset](https://github.com/jpfiset))
1034- [#460](https://github.com/wycats/handlebars.js/issues/460) - Allow `:` in unescaped identifiers ([@jpfiset](https://github.com/jpfiset))
1035- [#471](https://github.com/wycats/handlebars.js/issues/471) - Create release notes (These!)
1036- [#456](https://github.com/wycats/handlebars.js/issues/456) - Allow escaping of `\\`
1037- [#211](https://github.com/wycats/handlebars.js/issues/211) - Fix exception in `escapeExpression`
1038- [#375](https://github.com/wycats/handlebars.js/issues/375) - Escape unicode newlines
1039- [#461](https://github.com/wycats/handlebars.js/issues/461) - Do not fail when compiling `""`
1040- [#302](https://github.com/wycats/handlebars.js/issues/302) - Fix sanity check in knownHelpersOnly mode
1041- [#369](https://github.com/wycats/handlebars.js/issues/369) - Allow registration of multiple helpers and partial by passing definition object
1042- Add bower package declaration ([@DevinClark](https://github.com/DevinClark))
1043- Add NuSpec package declaration ([@MikeMayer](https://github.com/MikeMayer))
1044- Handle empty context in `with` ([@thejohnfreeman](https://github.com/thejohnfreeman))
1045- Support custom template extensions in CLI ([@matteoagosti](https://github.com/matteoagosti))
1046- Fix Rhino support ([@broady](https://github.com/broady))
1047- Include contexts in string mode ([@leshill](https://github.com/leshill))
1048- Return precompiled scripts when compiling to AMD ([@JamesMaroney](https://github.com/JamesMaroney))
1049- Docs updates ([@iangreenleaf](https://github.com/iangreenleaf), [@gilesbowkett](https://github.com/gilesbowkett), [@utkarsh2012](https://github.com/utkarsh2012))
1050- Fix `toString` handling under IE and browserify ([@tommydudebreaux](https://github.com/tommydudebreaux))
1051- Add program metadata
1052
1053[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.10...v1.0.11)
1054
1055## v1.0.10 - Node - Feb 27 2013
1056
1057- [#428](https://github.com/wycats/handlebars.js/issues/428) - Fix incorrect rendering of nested programs
1058- Fix exception message ([@tricknotes](https://github.com/tricknotes))
1059- Added negative number literal support
1060- Concert library to single IIFE
1061- Add handlebars-source gemspec ([@machty](https://github.com/machty))
1062
1063[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.9...v1.0.10)
1064
1065## v1.0.9 - Node - Feb 15 2013
1066
1067- Added `Handlebars.create` API in node module for sandboxed instances ([@tommydudebreaux](https://github.com/tommydudebreaux))
1068
1069[Commits](https://github.com/wycats/handlebars.js/compare/1.0.0-rc.3...v1.0.9)
1070
1071## 1.0.0-rc3 - Browser - Feb 14 2013
1072
1073- Prevent use of `this` or `..` in illogical place ([@leshill](https://github.com/leshill))
1074- Allow AST passing for `parse`/`compile`/`precompile` ([@machty](https://github.com/machty))
1075- Optimize generated output by inlining statements where possible
1076- Check compiler version when evaluating templates
1077- Package browser dist in npm package
1078
1079[Commits](https://github.com/wycats/handlebars.js/compare/v1.0.8...1.0.0-rc.3)
1080
1081## Prior Versions
1082
1083When upgrading from the Handlebars 0.9 series, be aware that the
1084signature for passing custom helpers or partials to templates has
1085changed.
1086
1087Instead of:
1088
1089```js
1090template(context, helpers, partials, [data]);
1091```
1092
1093Use:
1094
1095```js
1096template(context, { helpers: helpers, partials: partials, data: data });
1097```
1098
1099[builds-page]: http://builds.handlebarsjs.com.s3.amazonaws.com/index.html
1100[cdnjs]: http://cdnjs.com/libraries/handlebars.js/
1101[components]: https://github.com/components/handlebars.js
1102[npm]: https://npmjs.org/package/handlebars
1103