Monday, October 27, 2014

ng-europe, Angular 1.3, and beyond

Last week we presented at ng-europe in Paris on the past, present, and future of Angular. In this blog post, we'll recap the main points and announcements.

Angular 1.3

We've just shipped AngularJS 1.3 -- the best Angular yet. With it, you get many features and improvements not found in AngularJS 1.2. Though there are many we focused on:

  • Performance. With many operations like DOM manipulation and digest 3-4x faster, you automatically get snappier apps. 
  • Forms. Simpler and more capable APIs let you write less code and better match user expectations when validating forms
  • ARIA support. With ngAria, you're given a big leg up on adding and removing the correct ARIA attributes to support assistive software like screen readers. 
  • Material Design. We're nearly fully functional on implementing Google's specification for user interface design and interaction. Find it now at material.angularjs.org.

If you are building web applications today, this is the version you should use. This is the tried and true version that we really believe in. With over 1600 apps at Google built with Angular 1.x, we are committed to supporting it as the first class AngularJS version for a long time to come.

One thing that is changing, however, is our support for new features and breaking changes in Angular 1.x. With a few exceptions, these will be deferred to 2.0, and will be better addressed with the new design. We'll still be reviewing PRs and responding to issues but our focus with 1.x will be on stability, security, performance, rather than features.

If you are using Angular 1.2, please check out the migration instructions to find out more about how to transition your code to 1.3.

From 1.3 to 2.0: Angular's Next Step

In the keynotes of ng-conf in January we first mentioned our plans to build Angular 2. In the last few months since then we've been brainstorming what the next evolutionary step will be for Angular. In March, we published our thoughts in design documents. We read your feedback to make sure we understood the types of things you do or wanted to do with Angular. Then we explored different approaches, built prototypes and benchmarks, and iterated on our designs to find the best one we could.

Last week at ng-europe, we presented a look at our vision for Angular 2.0 that resulted from this research and prototyping. In 2.0, you'll find the things that make Angular truly Angular (like DI, HTML-based templating, directives, and testability baked-in). But you'll also find a number of design changes aimed at adapting Angular to the recent tectonic shifts in the web platform (web components, module system, etc.), and making Angular significantly faster and easier to use in ways we couldn't achieve in incremental steps from 1.x.

Specifically:

  • A unified component model that encompases "controllers" and "templates" in Angular 1.x. This means fewer concepts, less boilerplate, and better reusability. 
  • A revised concept of "scope" that makes nested contexts simple to understand, and improves the division of responsibilities between components of your app. 
  • Modular, mobile-first design that also scales to needs of enterprise-grade desktop apps - With over 50% of the world's population yet to connect to internet mainly via mobile, not desktop, and we want to make it easy to develop directly for these users. However desktop web apps remain important, especially in the enterprise space. 
  • Support for Web Components out of the box. Many assumptions we made about the web platform in 1.x are no longer valid, and Angular will change to accommodate these. 
  • Built on top of ES6, with easy transpilation to ES5. This means that you can start writing for tomorrow's JavaScript in today's browsers. Or you can write Angular 2 apps with ES5 just like you do today. It's totally up to you. 
  • We're introducing AtScript, an extension of TypeScript syntax and ES6 that adds optional runtime types and annotations to help large teams build large apps and better document them. Just like ES6, you're not required to use AtScript for building your applications; it's just another tool in your utility belt. 
  • Angular won't rely on jqLite or DOM wrappers in general. The DOM has significantly improved since 2009 and AngularJS doesn't need wrappers any more. In fact, removing them will give us a performance boost. You are still free to use jQuery or other DOM libraries in your directives as you wish.

Many of these ideas come from long discussions we had with Angular developers. Thanks again to everyone who weighed in on these documents! With a stable and performance-focused AngularJS 1.3 out in the world link to blog, we're now turning our attention to building Angular 2.0.

What does this mean for me?

The Angular community is what makes Angular awesome. We're sharing our plans for 2.0 early so that you can be part of the discussion as we move from concept to real code. We want your input and we're excited to hear what you think. For now the best way to do this is by filing issues on GitHub, or reaching out to us on Twitter (Brad, Igor, Brian, Jeff) or Google+, coming to our meetups and following and commenting on our meeting notes.

When can I use Angular 2.0?

If you're interested in Angular 2.0 in its current experimental state, you can follow along on GitHub and through our meeting notes. It's too soon to start building anything with 2.0 code -- we're still in the very early stages of building out the project. In the coming months you should be able to see the pieces falling into place. We're not announcing a release date because we honestly don't know yet, but we're working hard at delivering an early version very soon.

How can I learn more about Angular 2.0?

It's still very early, but watching the videos from ng-europe (when they are available) is the best way to get started. Specifically the keynotes from both days and the session on Angular 2 Core.

If you have more time and want to dig deeper, then check out all the design docs and research we put together and iterated on with the Angular community already.

For people that seek truth in code, there are first bits of code on GitHub in the angular/angular repo. There is lots more to come in the upcoming months!

And lastly you can check out some resources published by our partners, for example a TypeScript blog post that mentions "alignment with ES6" and Angular 2.0, Traceur, EcmaScript 6 and Web Components

What about Migrating from 1.3 to 2.0?

Our goal with Angular 2 is to make the best possible set of tools for building web apps not constrained by maintaining backwards compatibility with existing APIs. Once we have an initial version of Angular 2, we'll start to work on a migration path for Angular 1 apps.

We know that you have invested a lot of time learning how to build web apps with Angular. Since we are preserving most of the core concepts, this knowledge will help you be proficient in Angular 2 much faster.

What's next?

ng-europe was an amazing event for the whole Angular community. We definitely had a blast and are all energized and inspired by presentations, demos, but most importantly by all the informal hallway conversations we had there. Now is the time to start to make the ideas we showed more real and we invite you to be part of it. While 2.0 is under construction, we encourage you to build awesome apps that you want to be proud of with Angular 1.3.

Monday, October 13, 2014

AngularJS 1.3.0 – superluminal-nudge

Today, after eight months of work, over two thousand commits, nineteen beta and six release candidates, we finally released AngularJS 1.3.0 superluminal-nudge!

This release includes many notable new features:

  • One-time bindings – by prefixing an expression with "::", it will only be interpolated once, and then no longer watched.
  • ngAria – a new module that helps make custom components in Angular more accessible by default
  • ngMessages – a new directive that simplifies writting and coordinating feedback for on form validity
  • ngModelOptions – a directive that makes it easy to customize the behavior of bound models. For instance: debouncing, getter-setter-style models, update-on-blur, and more.
  • Strict DI – an option for finding places in your application that will not minify due to use of short-hand DI syntax

Included in this release are over four hundred bug fixes, and nearly one thousand documentation improvements. We also improved the APIs around custom form controls and animations to make them more clear and easier to use.

1.3.0 has substantial performance improvements that reduce memory consumption, increase the speed of common DOM operations, and improve overall latency of Angular apps. You can take a look at the benchmarks in the AngularJS source code on GitHub for more information.

You can read the exhaustive list of changes in our changelog on GitHub.

By popular demand, AngularJS now officially has packages published to npm. You can do npm install angular to get AngularJS 1.3.0. We hope this makes it easier for developers to make use of some of the great tools built around npm for front-end web development.

If you're on Angular 1.2, please refer to the corresponding section of the migration docs to see what breaking changes you should be aware of. And as we announced back in December, AngularJS 1.3.0 no longer supports IE8. This allowed us to make improvements and performance enhancements that otherwise would not be possible. If you're developing an application that does need IE8 support, the good news is that most non-breaking fixes are included in the latest 1.2.x branch.

As always, please try out this new version of Angular and submit issues on GitHub if you find anything amiss.

Last but not least, this 1.3.0 release includes work from over 400 contributors. Thanks to everyone who took time to submit issues, send PRs, improve docs, and give us feedback. We couldn't have done it without you!

Here's the full list of contributors who helped with this release:

ABitTooCalm, Aaditya Talwai, Aaron Wang, Abdessamad Idrissi, Abraham, Adam Bradley, Adam Humphrey, Agam Rafaeli, Ahmad Moussawi, Ahmed Nuaman, Aiden N, Ajay Roopakalu, Akhlesh, Alan Rubin, Alessandro Bahgat, Alex Miller, Alex Muntada, Alex Sanford, Alexander Harding, Alexander Karpan, Alexandre Potvin Latreille, Allon Hadaya, Almar, Amar Patel, Amin Ogarrio, Ammar, Andreas Gruenbacher, Andreas Krummsdorf, Andrei Korzhevskii, Andres Kalle, Andrew Barbarello, Andrew C. Greenberg, Andrew Delikat, Andrew Farrell, Andrew Kulinich, Andrew Mortimer, Andrew Pham, Andrew Silluron, Andrew Silluron-Gonzalez, Andrew Tarry, Andrey Sidorov, Andy Ferra, Anuj More, Archer, Ari, Ariel Mashraki, Arjunkumar, Artem Chivchalov, Artem Tyurin, Artemy Tregubenko, Artiom Neganov, Arturo Guzman, Ashutosh Das, Ayrat Aminev, Baptiste Fontaine, Basem Mostafa, Bastian Buchholz, Ben Harold, Ben Lesh, Ben McCann, Ben Wiklund, Bernhard Hofmann, Bijan Boustani, Bill Neubauer, Blaise Kal, Bobdina, Bocharsky Victor, Boris Serdyuk, Brad Williams, Brady Isom, Brett Porter, Brian, Brian Andersen, Brian Atkinson, Brian Feister, Brian Ford, Brian Hall, Brian Iversen, Brian Nenninger, Brice, Bruce Davidson, Bruno Baia, Buu Nguyen, Caio Cunha, Caitlin Potter, Cameron Spear, Carl Sutherland, Carlo s A. Guillen, Casey Flynn, Casey Garland, Chad Smith, Chaker Nakhli, Chance, Chia-liang Kao, Chirayu Krishnappa, Choi YoonSung, Chris Chua, Chris Constantin, Chris Inch, Chris Kuehl, Chris Rose, Chris Wheatley, ChrisRose, Christian, Christoph Burgdorf, Christophe Krebser, Christopher Rains, Christopher Rose, Chung-Min Cheng, Ciro Nunes, Clark Pan, Colin Casey, Corey Burrows, Cory Boyd, Craig Younkins, Dan Barua, Dan Matthews, Daniel, Daniel Aden, Daniel Luxemburg, Daniel Tabuenca, Daniel Zimmermann, Danielle, Dave Gaeddert, Dave Smith, Dave Wells, David Bennett, David Burrows, David I. Lehn, David Mosher, David Nelson, David Pope, David Rogers, DeK, Deepak Kapoor, Denis Parchenko, Derek Peterson, Derrick Mar, Diego Algorta, Diego Muñoz Escalante, Diego Plentz, Dken, Domenic Denicola, Domenico Matteo, Dominic Watson, Drew Perttula, Dylan, Dylan Semler, Eddie Hedges, Eddie Monge Jr, Edward Brey, Efthymis Sarbanis, Eli Dalbey, Elnur Abdurrakhimov, Elwin Arens, Emile Silvis, Emma Guo, Erich, Erin Altenhof-Long, Evan Winslow, Evgeniy Tkachenko, Firexion, Foxandxss, Franziskus Domig, Frederik Creemers, Freek Wielstra, GSC Leticia, Gaëtan PRIOUR, George Cox, Georgii, Georgios Kalpakas, Gias Kay Lee, GiffenGood, Gonzalo Ruiz de Villa, Greg Fedirko, Grigoriy Beziuk, Gronblom Sam, Guilbert, Guilherme de Souza, Hallvard Nygård, Hari Menon, Hendrixer, Henrik Nyh, Hopiu, Hubert SABLONNIÈRE, Igor Minar, ImaginaryDevelopment, Isaac Shapira, Ivan Alvarez, Iwona Lalik, Izhaki, J. Bruni, Mizael Galvez, J. Michael Palermo IV, JMRodriguez24, Jack Hsu, Jack Wearden, Jake Buob, Jakub Zych, James Brewer, James Ferguson, James Harrison Fisher, James Kleeh, James Kyle, James Roome, James Vanneman, James Wagoner, James Watling, James deBoer, Jamie Krug, Jan, Jan Hancic, Janas Page, Jann Horn, Jarrett Harris, Jason Bedard, Jason Carver, Jason Farnsworth, Jason Hamm, Jason Miller, Jason Schapiro, Jason Travis, Jason Winnebeck, Jay Goldman, Jayson Harshbarger, Jeff Balboni, Jeff Cross, Jeff H. Parrish, Jeff Jewiss, Jeff Sheets, Jeff Whelpley, Jennifer Song, Jens Berthold, Jeremy Likness, Jesse Browne, Jesse Houchins, Jesse Palmer, Joe Pettersson, Joel Hooks, Joey Yang, John K. Paul, John Kurlak, John Lannon, John Papa, John Reilly, Jonathan Gotti, Jonathan Sampson, Jonathan Woodard, Jorg, Joscha Feth, Jose Martinez, Joseph Orbegoso Pea, Joseph Spencer, Josh Kurz, Josh Schreuder, Joshua Flanagan, Juampy, Juan Manuel Palacios, Julie, Julie Ralph, Julien Bouquillon, Julien Sanchez, Justin Walsh, Jürgen Walter, Kamil Pekala, Karl Seamon, Karl Yang, Kasparas Galdikas, Kebabpizza, Ken Sheedlo, Kenneth Lynne, Kent C. Dodds, Kevin Aenmey, Kevin Brogan, Kevin Western, Kindy Lin, Klaus Weiss, Kristian Hellang, Kristof Mattei, Kurt Funai, Lajos Veres, Laurent Curau, Lefteris Paraskevas, Leniel Macaferi, Leonardo Zizzamia, Levi Weiss, Louis Haußknecht, Lucas Galfaso, Lucas Galfasó, Lucas N. Munhoz, Luis Ramón López, Lukas Ruebbelke, Luke Eller, Luke Schoen, M Alix, Maarten Stolte, Maksim, Manan, Marc Lipovsky, Marcy Sutton, Mark Jones, Mark Miyashita, Martin Field, Martin Jezek, Martin Probst, Martin Staffa, Marty Kane, Mateusz Jedruch, Mathew Foscarini, Mathieu Tricoire, Mathis Hofer, Matias Niemelä, Matt Ginzton, Matt Johansen, Matt Kim, Matthew Davies, Matthew Miller, Mattias Holmlund, Mauro, Mauro Carrero, Max, Max Tobias Weber, Maxi Ferreira, Mehul Patel, Melissa Ip, Michael Barton, Michael Benford, Michael Gallagher, Michael Payne, Michael Silver, Michal Kawalec, Michał Gołębiowski, Michel Salib, Michele Beltrame, Mike Haas, MikeMac, MikeMcElroy, Misha Moroshko, Mitch Robb, Miško Hevery, Mohamed Daif, Namolovan Nicolae, Naomi Black, Narretz, NateRedding, Nathan Wiebe, Neil Giarratana, Neil Johnston, Neil Rubens, Nick Carter, Nick Heiner, Nick Van Dyck, Nicolai Skogheim, Nicolas Leger, Nicolás Andrés Gallinal, Nikita Tovstoles, Nikita Vasilyev, Nima Mehanian, Noam Lewis, Oivvio Polite, Ole Michaelis, Ole Weitz, Oliver Schmidt, Olivier Louvignes, Omede Firouz, Paolo Moretti, Pascal Precht, Patrice Chalin, Patrick Hallisey, PatrickJS, Paul Dijou, Paul Harris, Paul Jolly, Pavel Pomerantsev, Pawel Kozlowski, Pete Bacon Darwin, Peter Bacon Darwin, Peter Coles, Peter Deak, Peter Kosa, Phil Westwell, Phillip Alexander, Pop, Praveen, ROUL, Rafał Jagoda, Rahul Doshi, Ralph Giles, Renat Yakubov, René Wilhelm, Reuben Doetsch, Rhys Brett-bowen, Rich Snapp, Richard, Richard Collins, Richard Harrington, Richard Littauer, Rob Wormald, Robert Kielty, Robert Speicher, Robin Böhm, Robin Böhm, Rocky Assad, Rosseyn, Rouven Weßling, Roy Ling, RoyLING, Ryan Hall, Sadaoui Abderrahim, Sagie Maoz, Sam Dornan, Samuel Rats, Sandeep Panda, Sean Griffin, Sebastian K, Sebastian Müller, Sekib Omazic, Sequoia McDowell, Sercan Eraslan, Sergei Z, Sergio Sanguanini, Seth Stone, Shahar Talmi, Shai Reznik, Shane Keller, Shane M. Pelletier, Sharon DiOrio, Shawn Flahave, Siddique Hameed, Simon Taranto, SirTophamHatt, Smith, Smitha Milli, Sorin Gitlan, Stanislav Sysoev, Stephanie Nacios Staub, Stephen Bunch, Stephen Nancekivell, Steve Purcell, Steven Benjamin, Steven Petryk, Stéphane Reynaud, Subra, Søren Louv-Jansen, TLChan, Takashi Nakagawa, Tatham Oddie, Taylor Hutchison, Teddy Wing, Tero Parviainen, The Big Red Geek, TheMrSteve, Thiago Colares, Thom Allen, Thomas Belin, Thomas Guillory, Thomas Junghans, Thomas Tuts, Thomas Wicker, Tiago Ribeiro, Tim Kendrick, Tim Kindberg, Tim Ruffles, Tim Whitbeck, Tim van den Eijnden, Timothée Jeannin, Tobias Bosch, Tobias Leugger - Vibes, Tom Kadwill, Tom Yam, Tomer Chachamu, Tony Bergeron, Tony Cronin, Traxmaxx, Trevor Ewen, Trey Hunner, Tyler Eich, Tyler Kellogg, Tyler McGinnis, Uri Goldshtein, Valentin Waeselynck, Vic Metcalfe, Victor Berchet, Victor Queiroz, Vikram Soni, Vincent Driessen, Vitali Tsevan, Vlad GURDIGA, Vojta Jina, Warlock, Wes Alvaro, Wesley Cho, William Bagayoko, William Chen, Wladimir Coka, Wojciech Fornal, Wojciech Krzystek, XrXr, Yaron Uliel, Yiling Lu, Yuri Sulyma, Yutaka Yamaguchi, Yves Brissaud, Yves Richard, Zach Pomerantz, Zachary Babtkis, Zacky Ma, Zahid Mahir, Zak Johnson, Zhong Liang Ong, Ziang Song, Zorigt Bazarragchaa, active-low, adam77, adeelcap15, ahliddin, akerekes, alexgarrett, alirezamirian, amagee, andre, aschokking, ashley williams, asif22, b9chris, barcahead, benjamingr, bolasblack, bradwheel, bullgare, cexbrayat, cgwyllie, chadfennell, chimney-sweeper, chirag, chrisrhoden, cnlevy, corrupt, cranesandcaff, cwclark, danrbergman, dbwhddn10, deepak-kapoor, dennishall1, desertapple, doodeec, dumpweed, ephigabay, erikrahm, expilo, eydreeyawn, frandroid, fuqcool, fvanderwielen, gabrielbrasil, garetht, gdennie, gdi2290, gipsy86147, gogotanaka, grsmvg, hambyiii, hanstest, jbnizet, jeffavis, jenkins, jerryfan, jesse, jfortunato, jim lyndon, jimmywarting, jody tate, jpsimons, justmiaotou, k-funk, kalvn, kimwz, krusty, letsmakesense, linclark, ltrillaud, m-tretyak, magoswiat, marcin-wosinek, marcwright, markau, martco, matthewhintzen, mbrookes, mgerstenblatt, miknsh5, mishoo78, mjfroehlich, mkolodny, mrmrs, ncuillery, nderoche, nnennajohn, nosideeffects, oojerryoo, oweitz, paranoidandroid522, perek, plmetz, poshest, pyriand3r, raghudodda, rodyhaddad, royling, rsnapp, sanfords, sap9433, scottywakefield, sgrebnov, sixin210, skwakman, smarigowda, snicolai, spacemigas, specialorange, standup75, stucash, sunderls, sunnylost, tamakisquare, thammin, thenickcox, thorn0, tommyangelo, tpiere, ttam3d0, unclejustin, unicodesnowman, vaibhav kohli, vdyckn, venticello, victorbjelkholm, wbyoko, winkler1, winsontam, wjtk, xdhmoore, xi, zahragh, zainengineer, and 刘朋飞