# Creating Pulumi Projects

Infrastructure in Pulumi is organized into _projects_. In the Pulumi ecosystem, a project represents a Pulumi _program_ that, when run, declares the desired infrastructure for Pulumi to manage. The program has corresponding _stacks_, or isolated, independently configurable instances of your Pulumi program. We’ll talk more about stacks later in the [Building with Pulumi](/content/tutorials/building-with-pulumi/index.html) tutorial.

## Create a directory

Each Pulumi project lives in its own directory. Create one now and change into it by running these commands in your terminal:

```bash
$ mkdir my-first-app
$ cd my-first-app
```

Pulumi will use the directory name as your project name by default. To create an independent project, name the directory differently.

## Initialize your project

Since a Pulumi project is just a directory with some files in it, it is possible for you to create a new one by hand. The `pulumi new` command-line interface (CLI) command, however, automates the process and ensures you have everything you need, so let’s use that command. The `-y` flag answers “yes” to the prompts to create a default project:

- TypeScript
- Python

```bash
$ pulumi new typescript -y
```

```bash
$ pulumi new python -y
```

This command creates all of the files you need, initializes a new stack named `dev` (an instance of the project), and installs any necessary dependencies:

```bash
Created project 'my-first-app'
# ...

Installing dependencies...
# ...

Finished installing dependencies

Your new project is ready to go! ✨

To perform an initial deployment, run 'pulumi up'
```

```bash
Created project 'my-first-app'
# ...
Created stack 'dev'

Creating virtual environment...
# ...
Finished creating virtual environment

Updating pip, setuptools, and wheel in virtual environment...
# ...
Your new project is ready to go! ✨

To perform an initial deployment, run 'pulumi up'
```

## Inspect your new project

The basic project created by `pulumi new` is comprised of multiple files:

- `Pulumi.yaml`: your project's metadata, containing its name and language

- `index.js`: your program's main entrypoint file
- `package.json`: your project's Node.js dependency information
- `requirements.txt`: your project's Python dependency information
- `venv`: a [virtualenv](https://pypi.org/project/virtualenv/) for your project

Open `index.js` in your editor of choice to have a look at its contents:

```typescript
import * as pulumi from "@pulumi/pulumi";
```

```python
"""A Python Pulumi program"""

import pulumi
```

Feel free to explore the other files as well.

Now let’s move on to creating your first real bit of infrastructure with Pulumi: some Docker images!
