Esprima 2.1 Released

Posted on by

We’ve just released Esprima 2.1.0! This release introduces support for several new pieces of ES6 syntax: Classes, Rest Parameters, Computed Property Names, let and const. See the release notes below for full details. We’ve also made various improvements to our testing infrastructure to make the codebase more contributor friendly. A big thank you to all those who contributed patches to this release: Ariya Hidayat, Bei Zhang, Brandon Mills, Mike Rennie, Mike Sherov.

While working on bringing more ES6 features to Esprima, we began collaborating with other JavaScript parsers and parser consumers to help define a community standard for JS AST generation. The result of that effort is the ESTree spec, located here: We wanted to say thank you to all who are contributing, which includes members from Esprima, the Mozilla SpiderMonkey parser, the Acorn parser, and Babel, to name a few. A full list of contributors is located here:

Expect a 2.2 release to follow in a few weeks bringing even more ES6 support. If you’d like to help contribute, we hang out in the #esprima room on Freenode IRC, and have a weekly meeting at 2PM ET on Wednesdays in #esprima-meeting on Freenode IRC as well. We look forward to seeing you there!

Release Notes

  • Support ES6 class #1001
  • Support ES6 rest parameter #1011
  • Support ES6 computed property name #1037
  • Support ES6 lexical declaration #1065
  • Expand the location of property getter, setter, and methods #1029
  • Enable TryStatement transition to a single handler #1031
  • Tolerate unclosed block comment #1041

Getting on Point

Posted on by

We’re excited to announce that the Pointer Events specification has become a W3C Recommendation! As we’ve said before, we love Pointer Events because they support all of the common input devices today – mouse, pen/stylus, and fingers – but they’re also designed in such a way that future devices can easily be added, and existing code will automatically support the new device. While reaching Recommendation status is a monumental moment, there’s still much work to do.

Pointer Events aren’t a viable solution until they’re usable in all of the browsers that developers are supporting. While that day may seem far away, the jQuery Foundation is dedicated to getting usable Pointer Events in every developer’s hands as soon as possible. We’re working on PEP, our Pointer Events polyfill that Google transferred from the Polymer project to the jQuery Foundation. PEP will be integrated into projects such as jQuery UI, jQuery Mobile, and Dojo. We’re hoping to get out our first release in the next few weeks. If you’re interested in helping out, let us know.

Microsoft is already shipping a full implementation of Pointer Events in IE11 and they had a mostly complete, prefixed implementation in IE10. Mozilla also has a full implementation for Firefox on Windows Metro, though it’s not currently enabled. Both implementation are passing 100% of the W3C Pointer Events test suite. You can follow Mozilla’s progress for all of their supported platforms on

Of course, the world ain’t all sunshine and rainbows. There’s still no sign that Apple will ever implement Pointer Events. Because of this, Google has decided not to ship Pointer Events in Blink, but rather to try to extend Touch Events to have the power of Pointer Events. The work to extend Touch Events is happening in the Touch Events Community Group to ensure interoperability and standardization. However, there is reasonable concern that adding several extensions to Touch Events will just result in an even more fragmented landscape, eventually worsening the situation rather than improving it. It’s not clear that Apple would implement all of these features anyway, and adding support for hover would require awkward APIs due to the logic that already exists in Touch Events. Even if the power of Pointer Events were added to Touch Events, the awkward event interface isn’t nearly as nice or easy to transition to from Mouse Events.

Despite Google’s current position, they’re willing to continually re-evaluate if shipping Pointer Events will help move the web forward. We’re hopeful that Google will reverse their decision in the future and Apple will eventually be compelled to implement Pointer Events once Safari is the only major browser without support. The Chromium issue for implementing Pointer Events is already in the the 99th percentile of all issues (open and closed) based on number of stars.

As a community, we can shape the future of the web right now. We need to stop letting Apple stifle the work of browser vendors and standards bodies. Too many times, we’ve seen browser vendors with the best intentions fall victim to Apple’s reluctance to work with standards bodies and WebKit’s dominance on mobile devices. We cannot let this continue to happen. The jQuery Foundation is dedicated to driving standards, like Pointer Events, to improve the developer experience and in turn, make the web a better, more accessible place for everyone. Together, we can push the web forward and let standards and better APIs win. We can choose Pointer Events over Touch Events. And we can do it right now, with PEP.

jQuery Foundation 2014 Annual Report

Posted on by

The jQuery Foundation exists to support web developers in creating web content built on open standards that is accessible to all users. We accomplish this through the development and support of open source software, and collaboration with the development community. The Foundation houses open source projects that are essential to this vision.

What we’ve accomplished

We’ve always been known for our namesake projects and their excellent documentation. In the past year, the jQuery Foundation has continued its quest to ensure that web developers have the tools and information they need to get their jobs done, beyond just jQuery, jQuery UI, and jQuery Mobile.

The past few months in particular have been incredibly productive. In October, we adopted the jQuery Mousewheel plugin. In December, Google transferred ownership of the Pointer Events Polyfill (PEP) to the jQuery Foundation. Finally, in January, we announced adoption of the Esprima project, a JavaScript parser that is used by dozens of developer tools. We’re working to foster the continued development of all of these projects, and welcome contributions from the community.

In 2014 we started work on the Chassis project to create an open standard for CSS libraries. We’ve had discussions with developers from Topcoat, Zurb Foundation, Filament Group, Cardinal,, Yandex, WordPress, Automattic, 10up, 960grid, Unsemantic, jQuery Mobile, jQuery UI, Intel App Framework, Cascade CSS, Portland Webworks, Adobe, Hulu, and Bootstrap. We’re looking for additional contributors and input from the community about what you want in a CSS framework.

Our year by the numbers

Today, the jQuery Foundation hosts 45 open source repositories at GitHub. These include both code and documentation.

If you need evidence that jQuery Foundation projects are used everywhere, look no further than our Content Delivery Network (CDN) powered by MaxCDN. The 290 billion requests in 2014 transferred nearly 11 petabytes of data. That, of course, does not include the requests for locally hosted copies of jQuery and to other CDNs such as Google, Microsoft, or CDNJS. No doubt the overall number of requests is in the trillions.

Even the best code project can be unusable without good documentation. Web developers don’t just tell us our documentation is good, they tell us that it’s excellent. There were 149 million page views of jQuery Foundation documentation in 2014, coming from 230 countries. All of our documentation sites are available on GitHub so that developers can open issues and make pull requests to improve them. Open source isn’t just for code, it works equally well for documentation!

The jQuery Foundation also hosted, licensed, and participated in 10 events around the world during the past year, including jQuery Conferences in San Diego, Chicago, Vienna Austria, Toronto Canada, and Oxford England. These events always include a wide variety of subjects, and are not just about projects hosted by the jQuery Foundation. The common thread in all the conferences is that they cover topics that web developers should learn in order to do their jobs well.

Future plans

This year we will continue to drive standards forward based on the needs of web developers. Our participation in groups such as EcmaScript TC39 and the W3C has given web developers a say in this process that, until recently, was primarily controlled by large for-profit companies and browser makers. We also plan to increase our participation in the Unicode Consortium as we ramp up our investment in Globalize, so that developers can easily make their software usable worldwide.

Our recent adoption of Esprima highlights another area where web developers could use some more help: development tools. The tools landscape for processing JavaScript, CSS, and HTML is incredibly fragmented. There are multiple processes for authoring, creating, modularizing, and consuming JavaScript, none of which have established themselves as a standard. There are more than a dozen package managers, each with its own unique set of advantages and drawbacks. We’d like to work with developers to settle on a smaller set of options that impose fewer burdens on both the producers and consumers of JavaScript libraries.

2014 Financial Information

Thanks to generous contributions from members and sponsors, we were able to fund a variety of activities that gave back to the cause of open source. The majority of our investments were dedicated to fostering development of jQuery Foundation projects and furthering the use of those projects through events and educational opportunities.

2014 Revenue Chart2014 Expenses Chart


We’re proud of the accomplishments of the jQuery Foundation, all of which were realized by the continuing hard work of our team members. Many thanks also to the web developers who take the time to report issues, fix documentation, or contribute code patches. By improving jQuery Foundation projects, you’ve improved web development for everyone.

We’re also grateful for our jQuery Foundation members and their support. In the past year, companies such as IBM and have joined and provided resources that allow us to accomplish our mission. Let’s all go out and do even more in 2015!

Esprima 2.0 Released

Posted on by

Last week, the jQuery Foundation announced our adoption of the Esprima project, the widely used JavaScript parser that powers many code analysis tools. Today we’re pleased to announce the release of version 2.0, now available on npm.

Up until now, the official releases of Esprima have only parsed ECMAScript 5 standard syntax. However, the experimental “harmony” branch has been adding ECMAScript 2015 (also popularly known as ES6) features for quite some time. A lot of the work there has been driven by Facebook. Now that the syntax for many ES6 features has stabilized and even shipped on some browsers, there is a need for tools that support the new syntax.

Esprima 2.0 introduces many stable ES6 features brought from the harmony branch, where they’ve been pretty reliable. This new baseline for Esprima makes it possible for tools such as code coverage analysis, style checkers, and linters to start to process the new ES6 syntax.

Since ES5 is likely to be with us for quite a while longer, Esprima 1.x will continue to be maintained for now in order to provide ES5-only parsing. Tools that currently use Esprima 1.x can continue to do so until they are ready and able to process ES6 constructs.

The 2.1 release of Esprima should follow relatively quickly, based on feedback on the stability of the 2.0 release. That means the Esprima team needs feedback from the makers of Esprima-based tools to know whether there are any problems. If you have built an Esprima-based tool and have problems with this release, please report them. (Note that the project is now using GitHub for issues rather than Google Code.)

We’re excited to see where Esprima goes next!

jQuery Foundation adopts Esprima

Posted on by

The jQuery Foundation is excited to announce that we are now hosting the Esprima project! The Abstract Syntax Tree generated by this JavaScript parser is used by many important developer tools such as ESLint, Istanbul, JSDoc and JSCS.

Ariya Hidayat has decided to transfer ownership of the Esprima project and its repo to the jQuery Foundation. We’re glad that Ariya has taken this step, since Esprima is such an important part of so many projects and is downloaded more than 2.5 million times every month from npm. Many thanks to Ariya for entrusting this project to us.

The adoption of the Esprima project, following the recent adoption of the Pointer Events polyfill, are the initial steps in a big shift toward realizing our mission to improve the open web and make it accessible to everyone. The jQuery Foundation looks to ensure that other important tools and emerging standards are also given the chance to grow and shape the open web.

The jQuery Foundation is committed to providing support to Esprima and opening it up for contributions. If you’ve been a contributor to this project already, we want you to continue that work and are always open to new contributors. Please stay tuned, we’ll be making more announcements soon.

jQuery UK: Europe’s jQuery Conference

Posted on by

jQuery UK will take place on March 6, 2015 in Oxford, UK. This event is organised by White October Events with support from the jQuery Foundation.

jQuery UK is the UK’s largest front-end developer conference. Now in its fourth year, two packed tracks will feature the biggest names in front-end, including Bootstrap creator Mark Otto, Standardista Estelle Weyl, Google Engineer Addy Osmani and Jenn Schiffer of Bocoup.

Practical sessions will cover topics including architecting client-side code for resilience, making your code more readable and expressive, and designing for displays that don’t exist yet.

There are four hands-on workshops taking place the day before the conference. Choose from:

  • Practical & powerful HTML, CSS, and JavaScript
  • Advanced jQuery Techniques
  • AngularJS Foundations
  • Web Developers Workflow

Space for these workshops is strictly limited, so book early to secure your spot!

Tickets are on sale now at £190 + VAT.

To book tickets or sign up for updates, visit You can also track jQuery UK on and follow @jquk for updates. Joins the jQuery Foundation

Posted on by

In case you haven’t heard, Famous Industries ( announced today that they are joining the jQuery Foundation as a Founding-level member. joins our other Founding-level members, WordPress and IBM, and our growing list of member companies, who recognize the power and importance of the jQuery Foundation’s open governance for JavaScript technologies.

For those who are not familiar with, they offer a free, open source JavaScript platform that enables engineers to build beautiful, cross-platform web apps. It is the only framework that provides an open source 3D layout engine fully integrated with a 3D physics-based animation engine that can render to DOM, Canvas, or WebGL. also provides extensive free training, examples, and tutorials through University. Their live coding environment allows students to see their code rendered in real time and work through topics at their own pace. We plan on taking advantage of their passion for education by partnering with to deliver a top notch developer event in San Francisco in mid 2015 (stay tuned!).

Today, jQuery continues to be one of the most preferred JavaScript libraries available with 8 out of 10 of the top JavaScript enabled websites and over 60% of the top one million websites* choosing jQuery-enabled libraries. As our community grows and continues to innovate, so do we. This makes the support of our members more critical than ever.

We are working on a number of new initiatives: Making improvements to how our innovative technical community collaborates. has a number of widgets they intend to make available as jQuery plugins and we look forward to taking advantage of their support and expertise as we work to improve the extended community guidance around jQuery plugins. developers will be joining our technical efforts so please say ‘hello’ and make them feel welcome. Co-founder and CEO Steve Newcomb has been elected to the jQuery Foundation board of directors. We look forward to benefiting from the unique perspectives, business acumen and life experiences Steve will bring to our board in helping us move forward toward accomplishing our mission.

It’s going to be a great partnership and a busy New Year. With that, please join us and give a shout out and welcome them to the jQuery Foundation!

*stats from

jQuery 1.11.2 and 2.1.3 Released – Safari Fail-Safe Edition

Posted on by

Season’s greetings! After a thoughtful review of the Naughty and Nice lists, we have decided to leave a small present under the tree to finish 2014: jQuery 1.11.2 and 2.1.3! These releases include several bug fixes to make your cross-browser development experience better.

The most significant fix in this release is a workaround for a serious querySelector bug in Safari 8.0 and 7.1. When this bug popped up we were hopeful that it would be fixed in patch releases but that did not happen. Apple is by far the least transparent browser maker, and we have very little information about when the Webkit patch for this bug might be pulled into Safari. As a result, we have decided to patch this in Sizzle, the selector engine used by jQuery.

A bug like this one emphasizes the benefit of using a library like jQuery rather than going directly to the DOM APIs. Even modern browsers can suffer from bugs that aren’t fixed for a long time, and there are still cross-browser feature differences with several browsers in wide use such as Android 2.3. Special-case code for obscure browser issues can seem unnecessary until you spend a day trying to debug a problem in your own code caused by one. Or worse, lose a paying customer because they couldn’t use your site from their old phone.

Another bug that makes it difficult for us to test jQuery on iOS 8 is that the user agent of the simulator is incorrect so the iOS 8 simulator is not recognized by our unit test infrastructure. The fix for that issue is very simple but Apple won’t tell us if we can count on it being done. For now we’re doing our iOS 8 testing manually.

In addition, this release includes several changes inside jQuery to avoid holding onto DOM elements unnecessarily. Although the old code generally wouldn’t cause things to run incorrectly, web pages might run slowly and use more memory than necessary.

You may notice that we skipped a patch release number in the 2.x branch. We didn’t actually skip it, we built it and found a problem that caused problems when jQuery was used with node. (Many thanks to Denis Sokolov for letting us know immediately and prodding us to fix it!) Rather than shipping those files to the other CDNs, we decided to create new releases.

As far as the potential for compatibility or regression issues, we believe this is a very low-risk upgrade for anyone currently using 1.11.1 or 2.1.1. We are making this release ahead of jQuery 3.0 to ensure that you can use a Safari-safe version of jQuery without the need to review your code for compatibility with changes being anticipated in jQuery 3.0. If you do encounter bugs, in upgrading from the previous version, please let us know.

You can include these files directly from the jQuery CDN if you like, or copy them to your own local server. The 1.x branch includes support for IE 6/7/8 and the 2.x branch does not.

These updates are already available as the current versions on npm and Bower. Information on all the ways to get jQuery is available at Public CDNs receive their copies today, please give them a few days to post the files and don’t be impatient. If you’re anxious to get a quick start, just use the files on our CDN until they have a chance to update.

Many thanks to all of you who participated in this release by testing, reporting bugs, or submitting patches, including Chris Antaki, Denis Sokolov, Jason Bedard, Julian Aubourg, Liang Peng, Michał Gołębiowski, Oleg Gaidarenko, PashaG, Richard Gibson, Rodrigo Rosenfeld Rosas, Timmy Willison, and TJ VanToll.

Since the last release of jQuery we have moved from a Trac installation to GitHub issues, so there are currently tickets for this release in both bug trackers. References to the Trac tickets have been migrated to GitHub issues, however, so you can use this GitHub Issues query to review all the tickets.

Thanks for all your support, and see you at jQuery 3.0!

Improving the Pointer Events Polyfill

Posted on by

Today, we’re excited to announce that Google has transferred its Pointer Events polyfill to the jQuery Foundation. This polyfill was originally written by Google’s Polymer team but since Google has chosen to put their Pointer Event implementation on hold, we engaged to ensure that the polyfill is maintained and continues to be a tool developers can use as a path to the eventual native implementation in all browsers. Many thanks to Google and the Polymer Team for allowing us to build off their work and continue development.

The jQuery Foundation has been, and continues to be a strong proponent of standards and we are specifically strong proponents of the Pointer Events standard because it will simplify the way web developers handle user interactions. Today developers are saddled with two very different event models for mouse and touch, even though they share many similarities. The result is often code that has a myriad of special cases, particularly when the device itself generates “fake” mouse events from touches. The jQuery Foundation hopes to drive developer adoption of this unified event system. Our goal is to have all browsers implement this standard natively.

Just yesterday, the W3C took the Pointer Events specification to the Proposed Recommendation stage. This makes Pointer Events one step closer to a finished standard and gives browsers a solid base on which to implement these APIs. Some browsers have even begun their implementation. Unsurprisingly Internet Explorer, where the first implementation of Pointer Events began before being submitted to the W3C for standardization, has implemented Pointer Events and Firefox has a branch of their code base implementing Pointer Events which they intend to port to all version of Firefox. Both of these implementations recently passed 100% of the Pointer Events test suite so implementation is progressing nicely.

We want to thank Microsoft Open Technologies for their hard work on Pointer Events and their continued support. We also want to thank IBM, Mozilla, Google, Dojo and the many other organizations and individuals that have helped and continue to help make developers lives easier through the creation, fostering and promotion of new standards like Pointer Events. If you want to get involved or just want to start using Pointer Events in your projects, head over to the new Pointer Events repo and check it out.

QUnit 1.16 Release and Roadmap

Posted on by

We’ve just released QUnit 1.16, an important milestone for the project. This release introduces several new APIs that will become the default in QUnit 2.0. To help migrate to these APIs, you can start using them today in 1.16. Our 2.x upgrade guide provides all the details you need to change your existing test suite to the new APIs.

Here’s a quick overview of the new APIs:

QUnit.test( "assert.async() test", function( assert ) {
  var done = assert.async();
  var input = $( "#test-input" ).focus();
  setTimeout(function() {
    assert.equal( document.activeElement, input[0], "Input was focused" );

You still define tests by calling QUnit.test and passing a name and a callback. The callback receives a assert argument that contains all assertion methods. The assert.async() method is brand new, replacing the old stop() method. The returned callback, here named done is later called when the test is finished, replacing the old start() method.

In addition, QUnit 1.16 contains several improvements and new features:

  • Promise support: As an enhancement for the async control, test blocks are now Promise aware, meaning QUnit will wait for the test to resolve with the pass or fail statement.
  • QUnit asynchronous tests can also now be defined using the new var done = assert.async() method instead of the old stop()/start(), making them specific to the test block.
  • QUnit.skip: This method can be used to define tests that aren’t executed, as placeholders or to temporarily disable an existing test (instead of commenting it out). The skipped test is still displayed in the HTML reporter, marked prominently as “SKIPPED”.
  • testId URL parameter: When clicking the “Rerun” link for a single test, a hash of the test name is now used to reference the test, called testId, instead of the previous testNumber. Using a hash makes sure that the order of tests can change, and QUnit will still rerun the same test you’ve selected before.
  • CommonJS exports: QUnit now also looks for a exports object and uses that to export itself, making QUnit usable on Rhino with the -require option.
  • There are a few more minor changes. For a full list, check out the changelog.


For future releases, we have several improvements planned as well:

Standardized reporter interface

Currently integration of any unit testing library into other tools like PhantomJS or browserstack-runner or Karma requires custom integration code, a combination of library and tools. We’ve started an effort to create a standard reporter interface that all testing libraries could implement, called js-reporters, to be consumed by those tools. Coordinating between the various projects and getting them to agree on and implement a common API takes time, but will yield better testing infrastructure for everyone.

Better diff output

When writing unit tests that compare objects with deep structures or many properties, like Ember models or Moment instances, the current diff output is slow and inefficient. There are also comparisons where the diff is hard to read. Replacing the diff library and implementing custom optimizations, like only showing diffs for leafs in big objects, will make QUnit’s HTML reporter even more developer friendly. We have a list of all diff-related issues.

Better support for writing custom assertions

Custom assertions are a powerful method of abstraction in test suites. They are currently underused. We want to investigate better APIs for writing custom assertions, along with better documentation of existing and new APIs.

Support for nested modules

Nesting modules, like Jasmine and Mocha support it, gives more flexibility in structuring test suites. There is existing discussion and prototypes, but no consensus on the API, yet.

For any breaking changes, we’ll apply the same migration model that we’re currently using. All backwards compatible changes will make it into the next minor release, any incompatible changes will be introduced with a migration layer in a minor release, removing the migration layer in the next major release.

The QUnit Team

The QUnit team also would like to use this opportunity to introduce itself:

At the jQuery Conference in Chicago, September 2014, from left to right: Jörn Zaefferer, Timo “Krinkle” Tijhof, James M. Greene, and Leonardo Balter