Create Apollo App
Create Apollo App is a command-line tool that generates a fully configured starter Apollo (GraphQL) project with only essential dependencies. With Create Apollo App, you can start developing a client, server, or mobile app, or a universal application in no time.
Create Apollo App relieves you from the pain of installing and configuring an Apollo project while making it easy to change project configurations if necessary.
Generating a Project with Create Apollo App
Install the following dependencies:
- Node.js 6.x or higher (Node.js 8.x is recommended)
Besides the dependencies for Node.js, you may also need to install and set up additional tools for mobile development:
- iOS Simulator or Android emulation software
- Xcode (optional; an IDE for iOS development)
- Android Studio (optional; an IDE for Android development)
Installing Expo Client is also optional. If you set up iOS Simulator or a similar tool, Create Apollo App will automatically download Expo Client if it's not installed.
Generating a Project
Start a new project with Create Apollo App using the following command (the default NPM utility is used):
npx create-apollo-app new-apollo-app
If you’re using Yarn, run:
yarn create apollo-app my-app
yarn createwill automatically prefix
create-. For more information, you can consult this blog post on Yarn.
From this point onward, we'll use Yarn in our examples for running the project.
During installation, the terminal will prompt the following six options:
❯ @server-web: TypeScript, Apollo (GraphQL), Express server, React for web @server-mobile: TypeScript, Apollo (GraphQL), Express server, React Native for mobile @universal: TypeScript, Apollo (GraphQL), Express server, React for web, React Native for mobile @server: TypeScript, Apollo (GraphQL), Express server @web: TypeScript, Apollo (GraphQL), React web app @mobile: TypeScript, Apollo (GraphQL), React Native for mobile
You can select the necessary project template using the arrow keys on your keyboard. Alternatively, you can start typing the name of the template to filter the list.
You can also specify the name of the template by attaching the
@name_of_the_template after the project name, for
yarn create apollo-app my-app@web
If you run the command above, Create Apollo App will create a
my-app/ project directory with the
@web template meaning
the client-side Apollo app. Similarly, add
@universal, or other template name instead of
choose a particular template.
Consult the Apollo Project Templates section to know what templates are currently available.
Select the first (default) option
@server-web from the list and press Enter. Create Apollo App will generate a
Note that it may take a while (usually up to a minute) for all dependencies to be installed and for the project to be configured. The terminal will confirm when the project is ready.
Running the Project in Development Mode
Once the installation is complete, run:
cd my-app yarn start
A development build will be generated. You can start changing the source code in the project files located in the
Generating the Production-Ready Code
If you want to build a production version of the app (i.e., the code will be minified), run:
The production-ready code will be saved to
packages/web/build/ directories for
server-side and client-side code respectively.
Apollo Project Templates
Create Apollo App provides you with the default configurations for different kinds of projects. For example, if you need
to build only a client-side application, you can select a respective template –
@web – during installation.
Overall, you can choose one of the six templates:
@webfor a client-side application.
@serverfor a server-side application.
@mobilefor a mobile application.
@server-web– (default) a complete solution for building a client-server app.
@server-mobile– a complete solution for building a server-side app and mobile front end.
@universal– the most comprehensive solution for building an app for the client, server, and mobile.
We'll review the structure of the
@universal project, meaning it will have the
packages under the
packages/ directory. The
@server-web template that you installed comes without the mobile package.
Here's an overview of the
@universal project structure:
my-apollo-app ├── node_modules/ ├── packages/ ├── mobile ├── node_modules/ ├── src/ ├── App.tsx ├── AwakeInDevApp.js └── index.ts ├── typings/ ├── app.json ├── package.json ├── tsconfig.json └── tslint.json ├── server/ ├── node_modules/ ├── src/ ├── index.ts ├── resolvers.ts ├── schema.graphql ├── schema.ts └── server.ts ├── typings/ ├── package.json ├── tsconfig.json └── tslint.json └── web/ ├── src/ ├── App.tsx └── index.tsx ├── typings/ ├── package.json ├── tsconfig.json └── tslint.json ├── .gitignore ├── package.json ├── tsconfig.json ├── tslint.json └── yarn.lock
You'll work with the files located in
packages/web/src/ when working
on your Apollo project. In those directories, you can view the default project files, which you may freely change or