---
myst:
html_meta:
"description": ""
"property=og:description": ""
"property=og:title": ""
"keywords": ""
---
# Installing The Development Environment
First, we need last LTS NodeJS version (8.12.0 at writing time).
We recommend to use nvm to install NodeJS instead of using your OS-based version.
Install nvm on your system using the instructions and provided script at:
Using nvm we will look up the latest lts version of NodeJS and install it
```shell
nvm install --lts
nvm use --lts
```
NodeJS is provided with npm, its package manager, we will use it to install the GatsbyJS CLI
```shell
npm install --g gatsby-cli
```
```{note}
`-g` means the CLI will be available globally in our nvm instance.
```
When you are prompted to use either `yarn` or `npm` to install the GatsbyJS CLI, it's ok to use the default, `yarn`.
# Creating a new GatsbyJS site
The CLI allows to initialize a project:
```shell
gatsby new hello-world
```
This command tells gatsby-cli to create a new GatsbyJS project with the name `hello-world` with a basic default file structure.
There are several boilerplates created by the community that allows to bootstrap an application for different use-cases.
These boilerplates are called "starters" and in the [offical site](https://www.gatsbyjs.com/starters/?v=2) you could
find a complete list of available starters. There are starters with some pre-configured themes (for example material-ui or bootstrap), support for authentication, and so on.
There are also some starters that are specialized in integration with some external sources, such as a CMS like Plone or WordPress.
They create a boilerplate with all the configuration to fetch data from the external sources and give some helper methods to build the pages/interface with that specific data, such as the breadcrumbs or navigation.
Data fetching part is usually managed by a different type of plugins called "source-plugins" that can retrieve data from a specific source.
We will cover "source-plugins" in later chapters.
```{note}
To create a new project with a starter, you need to append the github URL of the desired starter in the cli command: `gatsby new [SITE_DIRECTORY] [URL_OF_STARTER_GITHUB_REPO]`
```
```shell
cd hello-world
gatsby develop
```
This command starts a development server.
You will be able to see and interact with your new site in a development environment at .
Now that we have a working installation, let us go deep inside GatsbyJS to see how it works and what are its main parts.