include ../../../../_includes/_util-fns :marked Having an existing Angular 1 application doesn't mean that we can't begin enjoying everything Angular 2 has to offer. That's beause Angular 2 comes with built-in tools for migrating Angular 1 projects over to the Angular 2 platform. One of the keys to a successful upgrade is to do it incrementally, by running the two frameworks side by side in the same application, and porting Angular 1 components to Angular 2 one by one. This makes it possible to upgrade even large and complex applications without disrupting other work. The `upgrade` module in Angular 2 has been designed to make incremental upgrading seamless. In this chapter we will look at a complete example of preparing and upgrading an application using the `upgrade` module. The app we're going to work on is [Angular PhoneCat](https://github.com/angular/angular-phonecat) from [the original Angular 1 tutorial](https://docs.angularjs.org/tutorial), which is where many of us began our Angular adventures. Now we'll see how to bring that application to the brave new world of Angular 2. During the process we'll learn - How to prepare and align an Angular 1 application with Angular 2 - How to use the SystemJS module loader and TypeScript with Angular 1 - How to develop and test a hybrid Angular 1+2 application - How to migrate an application to Angular 2 one component at a time To follow along with the tutorial, clone the [angular-phonecat](https://github.com/angular/angular-phonecat) repository and apply the steps as we go .alert.is-important :marked If you do clone this repository, note that it doesn't look like this guide assumes yet. There's [a pull request](https://github.com/angular/angular-phonecat/pull/289) that will change this. Meanwhile, you'll find a good starting point from [this commit](https://github.com/teropa/angular-phonecat/commit/d6fb83e1c2db9d1812c7c478fdb8d92301ef0061). .l-main-section :marked ## Preparing for the Upgrade In terms of project structure, this is where our work begins .filetree .file angular-phonecat .children .file bower.json .file package.json .file app .children .file js .children .file core .children .file checkmark.filter.js .file core.module.js .file phone.factory.js .file phone_detail .children .file phone_detail.html .file phone_detail.module.js .file phone_detail.controller.js .file phone_list .children .file phone_list.html .file phone_list.module.js .file phone_list.controller.js .file app.module.js .file css .children .file animations.css .file app.css .file img .children .file ... .file phones .children .file ... .file index.html .file test .children .file e2e .children .file scenarios.js .file unit .children .file checkmark.filter.spec.js .file phone_detail.controller.spec.js .file phone.factory.spec.js .file phone_list.controller.spec.js .file karma.conf.js .file protractor-conf.js :marked This is actually a pretty good starting point. In particular, this organization follows the [Angular Style Guide](https://github.com/johnpapa/angular-styleguide), which is an important [preparation step](preparation.html) before a successful upgrade. * Each controller, factory, and filter is in its own source file, as per the [Rule of 1](https://github.com/johnpapa/angular-styleguide#single-responsibility). * The `core`, `phoneDetail`, and `phoneList` modules are each in their own subdirectory. Those subdirectories contain the JavaScript code as well as the HTML templates that go with each particular feature. This is in line with the [Folders-by-Feature Structure](https://github.com/johnpapa/angular-styleguide#style-y152) and [Modularity](https://github.com/johnpapa/angular-styleguide#modularity) rules. :marked ## TypeScript And Module Loading Since we're going to be writing our Angular 2 code in TypeScript, it makes sense to bring in the TypeScript compiler even before we begin upgrading. In order to use TypeScript's ES2015 module system to `import` and `export` code, we're going to need a JavaScript module loader. Our application doesn't currently use one, and is just using plain old `