 Hello. So I'm going to talk about Polymer tools for helping you stay productive, tools for everything from building apps and elements through to tools that can help make sure that your projects are lean when you're shipping them down the line. I'm also going to talk about a few new tools that we've been working on that we think you're going to find a little bit useful. And before I talk about any tools, I'm going to tell you a little bit of a story. So I was in Japan a few weeks ago. And it's a place that's really big on automation. Automation being this idea that you should take repetitive tasks and try to get a system or a tool to help you avoid having to do that work yourself. Now, one example of where they're really good when it comes to automation is the idea of parking bikes. Now, if you're from Amsterdam or you live here, you're probably aware that every single person in Amsterdam owns 3 million bikes. That seems accurate. Now, in Japan, they've actually taken that idea of trying to park a bike, and they've taken it to a whole other level. So this is the eco cycle. It's a system that will take your bike, it'll have a robotic arm, pull it down into the ground, and then find you a parking spot for your bike. If this is the first time you're seeing this, you're probably wondering, what sort of matrix sorcery is this? It's amazing. I kind of want that. But that's kind of cool. Now, the reason that I care so much about automation is that I very much believe in this phrase. I believe that if you want to be fast, you have to give up on the things that are keeping you slow. Now, this applies equally to reasons for automation. It applies equally to performance as well. So if you want to be fast, you have to give up the things that are keeping you slow. Now, you can't automate absolutely everything. If we did, we'd probably be out of a job. Now, in Japan, they actually make a really good balance. They strike a good balance between how much automation they apply and how much manual craftsmanship is still in place. One example of this, I remember I was staying at a hotel. And every time that I would get lunch, someone would make me like a little paper crane. So this is like something manual someone's gone and made. Now, paper cranes are sort of really elegant. They're like these really well crafted things. They're really pretty. And I thought that I would go and try making one of these myself. You know, I know Java script. Surely this can't be too difficult. And it just didn't quite. No one is more horrified. than the paper crane itself. And I'm not really allowed back in Japan anymore. But if you've been working with web components and Polymer for a while, you probably have asked yourself some point, where are the tools for this declarative shift? The JavaScript ecosystem has got a huge amount of tools available for every task you might want to achieve. When it comes to HTML, there are still a few areas that we find are a little bit rough. Things like maybe I want to lint my HTML and all the assets inside of there. Maybe I want to run additional processes against the files that are making up that import. And the good news is that tooling for HTML and tooling for imports and web components are getting a lot better. Today I'm going to walk through a new Polymer toolbox, a toolbox of things that we've been maturing. There are some new tools in there, stuff like linting that we teased in the keynote. And some things that I'm really excited about, things like the new Polymer CDN that we're working on. Now before we dive into that, some quick tooling requirements, it's very important to cover this. So the Polymer team primarily use two package managers. The first is Bower, which is a front-end package manager. It serves us pretty well at the moment. And the other is NPM. Now if you've never heard of NPM, it's basically Tinder for node modules. You never quite know what quality thing you're going to get in there. But yay JavaScript. So let's dive in. Now the first thing we're going to look at is how we write reusable elements. We put together this package called seed element for this. And seed element is kind of neat because we actually use a very similar structure when we're building out things like the paper elements and the iron elements. Seed element comes with boilerplate right out of the box for helping you create your own element. Now one of the first things it gives you is structure. So it gives you the same structure that we use. Out of the box it includes things like a demo directory, a test directory, and some of these other files like seed element and index.html and your bower.json file. Let's dive into those. Now you might be thinking if you haven't played around with seed element before that your index is where your demo lives. But this isn't actually the case. The index file is actually where a component called iron component page lives. This is powered by another tool called hydrolysis. What this gives you is basically the ability to scrape your element and pick up API documentation. I know what every single person in this room is thinking. API docs, oh my God, that's amazing. Now the API docs that we give you, once they've rendered, they look a little bit like this. So you get a summary of all the properties that are inside your page. You get access to being able to toggle back and forth your private and public API. You get a summary of all of your methods and the different events that you're firing off. It's kind of neat. And it inspires you to do a little bit more of sort of documentation driven development. If we look at the index for the demo itself, this is basically where you go and you show the world what you've created. Some people go all out. They style this thing. It looks really, really neat. But you can go as basic or as far out as you want. This is just where you demo the thing that you've built. And then we've got seed element itself. Now seed element is where you have the logic for your element. Out of the box for seed element, we actually give you a lot of comments the whole way through the file. So it's very clear where properties should exist, where your template logic should go, where styles should go. And this is basically the single place where you put things like your styles, your template, and lower down is where you put your JavaScript. I thought it'd be interesting if we were to try doing something with seed element. Now I'm a really big fan of emoji. So I thought it'd be kind of neat if we put together an emoji text element, something that you could just throw some text at and it'll pick the relevant emoji for it. This is backed by a little library that Monica wrote. So here, for example, I've got it saying text equals tier and it's showing up a tier. And if I switch it over to tier clap, it'll pick out the right emoji for us. What we can do for seed element here is we can actually move all of our logic for the emoji text element into seed elements, boilerplate. We can replace the JavaScript lower down, replace all the properties, replace what's inside the template, add some of our own documentation. And it slowly starts to look kind of neat. We've got our render documentation customized for this element. And before we forget, we've also got a Bower install. We've got to install the dependencies necessary for seed element. Things like properly picking up Polymer and the Iron Component page element that we're using. And then we get onto another tool called PolyServe. Now PolyServe just makes it really, really convenient for you to serve up your elements. You don't have to really worry about using a Bower configuration file, no Bower RC file or anything like that. It'll just take care of all of that for you. So you go and you get PolyServe and you just install it globally, CD into your seed element and you can go and serve off your elements. It just sort of works. Now a quick pro tip, if you don't like the default port number and I know some people get like, they really like customizing the port numbers, you can just use the dash P option to customize the port for PolyServe. What this gives you is a page that looks like this. So this is the customized version of our Iron Component page with my elements documentation. When you're sharing elements with other people, this is generally the first page that they will see. In the very top corner, they can go and they can then toggle a demo of your element. So here's the demo for the emoji text element that I've been working on. And as you can see, I'm typing in some text here and you're noticing that the emoji text is automatically translating. So I'm saying, hey people, let's sit on planes that don't read, listen to, or watch anything. You look like serial killers, which is probably accurate. Now let's say that you then want it to go and deploy your element to somewhere like GitHub Pages. We have a workflow for that. I'm not gonna dive into too much detail here because we've got a guide on the site that covers this. But the basic idea is if you go and grab this particular repo, so the Polymer Tools repo, it's got a script in there called gp.sh. You can use gp.sh to just publish elements that you're working on, straight to GitHub Pages, and it literally just takes a minute or two. It's super convenient, I use it every day and it's kind of neat. Now how many people here suffer from element guilt? So you've written an element using Polymer 0.5 and you haven't ported it over to 1.0 just yet. So lots of people have got element guilt. Polyup helps with this quite a lot. We saw a preview of it a little bit earlier and this just helps you automate moving your elements from 0.5 to 1.0. So I actually had my emoji text element written in 0.5 and I wanted to port it over, but I didn't necessarily wanna do all of that stuff myself. So I went and I installed Polyup, so it's a global install, and then I can run it against that element and that just magically takes all of my stuff to 1.0. Now some of the stuff that Polyup takes care of for you are things like HTML transformations. So converting the 0.5 idioms like Polymer element name to DOM module, things like the template ifs to template DOM ifs and things like your template repeats to template is DOM repeats for the proper syntax. Now in our case, once I've actually ported this over, most of it worked, I didn't really have to do a lot of work to tweak it, like one or two small things, but not a lot. Here's an example of some of the places where it fixed things up. It just made sure that the syntax was exactly what I expected it to be for 1.0. Now quick pro tip, if you have an entire app written in Polymer 0.5 and you wanna try using Polyup on it, you can actually recursively upgrade. So this quick one liner will allow you to go and find all the different HTML files that are currently inside your directory and just run Polyup against them and overwrite any of the files there. I've used this on an app or two and it just gives you a really quick baseline that you can iterate on. I think that's a nice little one. Polyup has also got an online tool available, so if you've got, you know, something that I ran into last night was I wanted to port an element for use in an app that was still written in 0.5 by somebody else. I just dumped it into the Polyup online tool. And this is just a really neat quick online thing, don't have to install anything. Just dump your code into here, copy paste, and it'll actually just let you see what the transformed code looks like. Next let's talk about unit testing. So there was a recent survey done in the front end community where they found out, and this is sort of shocking to everyone, that almost nobody writes unit tests. It's just a wonder, I didn't really expect that to be the case. But on the Polymer team, we care about unit testing and we do think that people should write unit tests. So we created Web Component Tester for this. Now Web Component Tester is pretty convenient. It basically gives you a tool that works on top of Mocha, which is a really great unit testing framework for writing asynchronous tests, and Chai, which has got some great assertion helpers. You install this globally the same way that you install the other tools, and then you just run Web Component Tester against your tests, and it'll just go and run them. Now in seed element, we actually include some boilerplate tests for you out of the box. This is an example of HTML suite. So you can write tests in separate like HTML documents. So here, I'm just loading up. So I'm using WCT's namespace, and I'm loading up a test called basic test. When you start off, you're not gonna have any tests written, and when you load up your page, nothing's really going to happen. You might get a message in the console that looks a little bit like this, saying that you evaluated your tests in a millisecond because they do not yet exist. Here's another example of what a JavaScript suite looks like. So I'm testing out my emoji text element, and I'm gonna just focus on this little section because I'm a little bit proud of this. This is the first opportunity I've had in my career to include emoji in-unit tests, which is, I feel good. So I'm able to run my tests here, and as you can see, you can run web component tests in the browser. You can also run them in the command line, but here we're just getting a summary inside the browser, but also inside the console, and we can dive in if we happen to find that there are issues with any of our tests. When you run web component tester or the command line, you basically get something that looks a little bit like this. It'll go and fire off all the different browsers that it's trying to run your tests against. It'll pipe the output from those browsers back into the command line, and then it'll close them. I thought it'd be useful to just remind folks there are a few pro tips there that can help. If you wanna run web component tester with just a single browser, you can do that. Just use the dash L option. If you want to keep browsers alive after your tests have run. So for example, if you wanted to continue debugging and ensure you're finding in one browser but not another in your tests, you can just use the dash P option. And if you only want to test files that you specify directly, you can also do that too. Next let's talk about adding elements to an app. We're gonna do this using Polymer Starter Kit. So we announced Polymer Starter Kit a few months ago, Google I.O. And Rob talked a little bit about it earlier, but it basically includes a few different things right out of the box. It includes first class support for components, end-to-end tooling, offline first support, responsive app layout, and a few other nice bits and pieces. Now this morning, Taylor told you that the total number of downloads of Polymer Starter Kit was something around 65,000. I checked this last night and I found out that the total number was 66,000. And I checked it right before this talk and it's now at 67,000. So I'm assuming you guys are finding this useful. At least I hope so. You guys have been building some really neat things with Polymer Starter Kit. You've been building everything from sites that help empower kids to ride safely using the neon animation elements. You've been building 3D model viewers. This is my favorite example so far. You're building this really bad ass looking character. You've been building things like this using WebGL and Polymer. You've been building DevFest sites. You've been building meal helper sites using Ripples all over the place. It's been kind of neat to see this like the progression of apps being built. Now one thing I thought was missing was an emoji quiz app. I found my niche in the market in case anyone wants to invest. But we're gonna be building this today. So the first thing we're gonna need for an emoji quiz app is an emoji quiz card. Something that allows us to throw a question at the card, render it to the screen using the correct emoji, and then we wanna have people be able to enter in text representing what they think that particular movie or emoji actually represents. And we wanna run some validation rules against it. Paper input is really powerful and it's a great utility for helping us achieve this. So we use paper input and paper button on this particular element. Next we have an emoji quiz questions element. This is just a small piece of the logic, but the basic idea is that I'm gonna be doing a quiz using emoji in movies, and I'm just gonna feed it a list of different movies in and it's gonna iterate over that whole list and output all of the cards to the screen. Finally, we're gonna need emoji quiz categories. So something that allows you to select what category you want on screen. And we've also got sort of emoji quiz questions being used here so that I can actually just make sure that we're showing you the right list of things. This app is gonna use neon animated pages because I just love transitions. Now, if you're a front end developer or someone that's been developing on the web for a while, you're probably aware there are quite a few different build tools and task runners available today. Everything from grunt to broccoli to NPM scripts. On the Polymer team, we're really big fans of Gulp and we'll be using it for a bunch of the tools today. I know that some people still consider make as a good tool to use. Unfortunately, make is the only modern build tool that doesn't have its own logo. And I thought long and hard about this and thought that the adequate logo for make was the platypus. So we're gonna just go and NPM install and Bauer install all of the things that we need. This is a single one liner for anyone that's experienced with these tools. If you're not, we actually walk through like all these individual steps for you in the docs. But if you're familiar with NPM or you aren't just yet but you might be in the future, something that you're probably also familiar with is the idea of NPM installing all of the internet. We're trying, we're working with the NPM team. We're trying to see if we can fix this stuff. But sometimes it'll take a few minutes. Think of it as a good time to go learn a new hobby or bake a cake or something. But in a few minutes it's done, it doesn't take that long. It takes like three or four minutes. But it's worth it. So once we've installed all of our dependencies, we just go and we do a gulp serve. And what we end up with is this application. So this is my emoji quiz app. And what I'm gonna do is I'm just gonna go and select an option here. So I'm gonna select the movies option, tap on that. And here's our first question. So this movie is Ant-Man. So just gonna go and enter that in. It looks like I was right. Next one is Princess Diaries, still looking good. This is Bloody Needle and Rink. I don't know what this is, and I fail. But this app is kind of working. Kind of working, it could be a real thing. Now I did wanna mention one thing. So Monica gave a really great talk earlier. We've talked about custom properties. And I think probably everyone in this room knows that CSS is just the best thing ever. It's truly, truly amazing. Do you wanna know something funny? This actually renders correctly on this screen, but it doesn't up there? This just goes to show you how broken CSS really is. CSS is awesome, but custom properties make it a whole lot better. And if you're building an app using Polymer Starter Kit, I do recommend checking out materialpalette.com. It's a site that has a number of different options for selecting a primary color and an accent color. And what you can actually do now is there's a Polymer option in the very bottom of the screen that will generate you a theme file, an app theme file, using custom properties. And you can just go and drag that into your Polymer Starter Kit app and it'll re-theme your whole, your entire app. It'll like re-theme your toolbars, your paper drawer panel, your buttons. And it's, you know, it's pretty low friction. I tend to use this whenever I'm building out demos and I find it really useful. Next let's talk about productionizing our apps. So I believe that a build process is kind of important if you're building anything other than a prototype today. It's sort of a promise to your users that you're gonna make sure whatever you're shipping down the line is as small as possible. You know, respect their bandwidth and respect their data plans. Now the build process in Polymer Starter Kit looks a little bit like this. We've got tools for quality and testing, for minification. We've got things like browser sync for cross-device editing and reload. But I'm not really gonna talk about this too much. I'm gonna focus on the Polymer tooling in our workflow that I think it's useful for you to just be aware of. And there's some new tools in here that are good to preview. So the first tool is Vulcanize. Now Vulcanize is really useful for concatenating all of your HTML imports into a single file for production. You might be wondering why there's a picture of Spock in the very corner of the screen. I thought that, you know, we should just say screw it to Vulcan tradition. It's okay for Spock to smile. So Spock is smiling. Enjoy. Now Vulcanize is useful for reducing an app and its dependence into a single file. We install it globally using NPMs similar to the other tools. And then we can just run Vulcanize against our emoji app and convert it into a build file. So all of those dependencies end up in the exact same file. It's kind of neat. It's also able to do things like inline our external assets into a single page. Now you might want slightly more control over what's happening with Vulcanize. We've got a number of options. We've got things like being able to specify whether or not your scripts get inlined inside the page. You can also specify whether you want your style sheets, your polymerized style sheets to be inline too. And we've got an option for that as well. Now if you happen to be working with content security policy and you're concerned about things like XSS and so on, CRISPR is a great tool to be aware of because it can help make your HTML files CSP compliant. So one of the things it can do is just like split your inline scripts from your files for CSP. Here we globally install it. We can then run CRISPR. We have a source option that allows you to just take a current index that HTML file. You can specify then where your build at HTML and build at JS files you're gonna end up. And if you happen to be using Vulcanize, CRISPR actually works pretty well with that too. So here we're taking advantage of piping at the command line. It's just that like thin line. We're taking advantage of piping at the command line to take the output from Vulcanize where we've passed in the inline script option and we're just gonna throw that over the fence to CRISPR which is then going to go and split those out into two separate files for CSP. Now another new tool that we've recently been working on is called PolyBuild. I know that we've talked about a bunch of different tools already so far and you might find it hard to keep track of them. PolyBuild basically tries to combine the best in class of things like Vulcanize, CRISPR and another little known tool we wrote called Poly Clean which helps us keep your HTML clean by removing white space and stuff. And it's sort of the megazord of the polymer world. I don't know how many people here grew up around Power Rangers. I did and the one thing that Power Rangers taught me was that if you've got an adversary or you've got anyone that you don't sort of get along with, if you stand in front of them looking aggressively for as long as you can, eventually they will explode. Thankfully PolyBuild doesn't quite do this. It works. So one of the things PolyBuild helps us avoid is this insanity. So rather than piping all of our different tools together, like Vulcanize with all of the options, Poly Clean after that, CRISPR after that, probably needing to drink some beer after that, you can just run this, just install PolyBuild globally and run it against your files. Good news is that we're already using PolyBuild in Polymer Starter Kit today. It's replaced some of the current Vulcanize pipeline and it works really well with Gulp. So the Polymer Starter Kit Gulp file is already using PolyBuild and we found that it works really well so far. So we hope you try out PolyBuild. PolyBuild has also got a maximum crush option. I was in the engineering meeting when they actually decided to call this option maximum crush. So it's a decent option. Basically, it helps you decide whether or not your output JavaScript should be minified or just have whitespace removed. And there's a good reason why I thought that a wrestler image in the corner would be sort of good here. Wrestling is a sport that I don't totally understand because you basically have people that don't wear any pants fighting over a belt. It just doesn't quite make sense to me. Let's get on to some work in progress tools. The first of these is called PolyLint and we actually just open sourced this less than an hour ago. Go last minute. So PolyLint basically helps you by helping linting your elements and your imports. This helps you stay true to the patterns and semantics that the Polymer team think make really high quality elements but also makes you just make sure you're just catching errors that you think will probably not render your elements correctly. So you can go and NPM install PolyLint globally and run it against your files. And it does a few things that I think are kind of neat. So let's say that you ran it against a file and the output that it gave you was the expression square brackets myvars bounce the attribute class should be using dollar equals instead of equals. Now, just doing this thing at the very top was a little bit more of a Polymer 0.5 idiom rather than 1.01. And what you should be doing is using the dollar sign at the very end instead. So dollar equals. And it just helps you to make sure that you're actually following the right semantics when you're trying to bind to different variables. Here's another example. So let's say that it says property myvar was not found in properties for the specific element. What's happening here is I've tried to use data binding on a particular variable called myvar when it doesn't exist at all. What you should be doing is just making sure that anything you're trying to bind in there has got a valid reference inside of the properties object at the very bottom and you're setting up your types and values correctly. One more example, this one is kind of cool because it says, you know, computed binding using property not a function which is not in fact a function for element that we're using. And if you take a look at the very top, what you see is we're trying to compute. We've got a function that we're referencing called data function, it's a computed function. We're passing in some variables but not a function has for whatever reason been defined as a number instead of a function at the very bottom. What you should be doing is making sure that those are valid functions that you can actually pass variables to actually get valid output from. And there are lots of other use cases where Polylint just makes sure that you're writing code that makes sense. So I think Polylint is kind of cool, I hope you'll try it out and please file bugs. Another thing that I'm really excited about is polygit. Now, something that I love doing is working on prototypes. I particularly like using JS bin for this. And one of the challenges I've had before is being able to load in imports from multiple destinations, lots of different servers, it's the same place and have them still apply the rules of deduping without any issue. I don't really want to have to worry about that, I don't have to worry about like cross domain issues. And polygit is sort of a stateless CDN that's compatible with deduping and it solves some of these problems. And one of the first things that lets us do is let's say that we're inside a new bin on JS bin or one of the other services that are a little bit like it. We can actually reference elements on polygit.org. So it has a directory path called components, we can reference an element name by the Polymer team and then the name of the import. So in this top example, we're loading up Polymer and the paper toolbar. I don't really like the idea of writing these really like long paths for everything. So we can take advantage of the HTML base tag to just simplify this a little bit. So at the very top inside of our head we'll include a base href that points to polygit.org slash components and then I can just reference Polymer very, very conveniently. Let's take a look at a slightly more advanced set of examples. Auto organization selection. So the Polymer team work across a few different organizations. We've got the Polymer org, we've got Polymer elements, Google web components, web components. And Polygit is actually smart enough to allow you to load in lots of different paths and it'll just resolve this stuff behind the scenes for you. So I can easily include paper button on my page as well as Google sign in. They'll just take care of the resolutions for me. If you're wondering whether you can do even more complex things, here are some of the ideas that we're exploring at the moment. Ideas like being able to specify what version number of a particular component you want to load in. What branch and org you wanna load those in from. And whether you wanna specify a completely different org, like I might have an org of my own components of my own version of Polymer even and I don't wanna be able to try testing this out. Most of these examples actually work today and you can try them out on polygit.org. So we hope you'll try out polygit.org. It's very new, it's still sort of an experimental phase so user prototypes don't quite use it for production just yet, but we hope you'll try it out and give us feedback on what you think. And then we've got some bonus tools. Things that I just thought were super neat. So the first is an extension called Polymer Ready. If you're into Polymer and I have a feeling one or two of you might be, you might be interested in just surfing the web and seeing what pages are using Polymer and how they're using them. It might be using different elements that you're suffering using. On that note, I'm also happy to share with you that Chrome is now using Polymer for a number of our pages. So here is the brand new downloads page in Chrome. You can see that it's using Polymer 1.0, it's using some paper header panel, they're using paper material, lots of their own custom elements. This is the new Polymer powered PDF viewer in Chrome. We dive into here, we'll see that they've got lots of their own custom elements, but they're also using things like Paper Toolbar and some other elements in there too. And this is a preview of the new upcoming material design settings page. It's not quite ready just yet, but it's also powered using Polymer and things like our paper drawer panel and Paper Toolbar. So Polymer is being used all over Chrome today and I just think that's super neat. Another thing that I use in my daily workflow is Rob Dodson's Sublime and Atom Snippets package. Now what this basically allows you to do is let's say that you wanted to start prototyping an element. You can just type in like PH, it'll scaffold you out, like what you need for a demo page. Let's say we wanted to create a new element called awesome form. I can type in HI and it'll expand that into a HTML import for me. I can then include a reference to Polymer. I can use another HI to refer to something like iron form. And if I wanted to go and write a new element now, I can just type in PE tab and it'll scaffold that out for me. This is what my sort of daily workflow looks like. I go inside my element, I wanna start using something. It's also got auto completions for most of the iron elements and the paper elements. So I don't even need to necessarily go back and forth between the docs and the doc demos to get started. This is kind of a really neat package available for Sublime and Atom. Something else that was released just a day or two ago is a tool called Polysearch. It's a Chrome extension. But basically what this lets you do is look up the paper elements and the iron elements super easily. You just type in like a prefix, like paper. It'll list all the possibilities and then it'll just help you dive right up to the elements page. So that's Polysearch. One thing I wanted to suggest folks do is build an experiment. If you find that there are particular workflows or particular tools that you'd like to use with Polymer and you don't see that they're necessarily officially supported just yet, please play around with them. Show us the things that you're building. Last night, I was actually quite interested in how well Polymer might work with something like Browserify. And so I started building a Gravatar element that would just like show a photo on a page. I found that there was a node module called Gravatar that basically did most of the logic that I needed for my element. So I went and I grabbed this node module and I wanted to create basically this, a Gravatar photo element where I could give it an email address and a size and it would just render the right photo on my page. So, you know, needing a user's avatar is a pretty common use case for apps today. Now, this is what this looks like. We have our Gravatar photo.html element. We have a script that references an external version of our script. So we've got Gravatar photo. That's gonna be the source. We've got a file that's gonna be Browserified using the require statement. So Browserify helps us use those require statements. Then I just have a gulp file that's gonna help build out that code for me. So please go experiment. If there are workflows you find, work really well with Polymer. Please share them with us. Now on to the future. We're currently working on two kind of exciting tools that we think are gonna find useful. The first is the Polymer DevTools extension. This is a new DevTools extension. It's sort of still very much work in progress that it's gonna help you with performance and both Eric Bidelman and Paul Irish are gonna tease some more stuff about that in their talks. We're also working on a brand new version of the Polymer Designer. This is an electron based sort of desktop app. You can also run it in the browser. That lets you go and work on your Polymer elements. We think that you're gonna find this stuff neat and we highly encourage you to also send us your ideas. PRs are also very, very welcome. And last but not least, there's a brand new version of Polymer starter kit available today. This includes everything from recipes for working on ES6 using Babel, to web performance recipes, to recipes for getting Polymer starter kit working with Chrome Dev Editor. It has a brand new build process workflow using things like PolyBuild and plenty of bug fixes. I'm particularly excited about the ES6 support using Babel because I just really, really love ES6 and slash ES2015, whatever your preference is for it. And our support also includes things like just making sure that you're using JSCS to properly style check your code. So I've talked quite a lot about all of our tools. One last thing I'd like to ask you to do, possibly, is give a big hand for all of our tool makers, the people that make our lives a little bit easier on the Polymer team. So that's it for me. Thank you very much.