---
title: Local Setup
icon: TbDeviceDesktop
image: /images/user-guide/fields/field.png
info: Mostly for contributors or curious developers
---


Follow this guide if you would like to setup the project locally to contribute.

## Prerequisites

<ArticleTabs label1="Linux and MacOS" label2="Windows (WSL)">
<ArticleTab>

Before you can install and use Twenty, make sure you install the following on your computer:
- [Git](https://git-scm.com/book/en/v2/Getting-Started-Installing-Git)
- [Node v18](https://nodejs.org/en/download) 
- [yarn v4](https://yarnpkg.com/getting-started/install)
- [nvm](https://github.com/nvm-sh/nvm/blob/master/README.md)

<ArticleWarning>
`npm` won't work, you should use `yarn` instead. Yarn is now shipped with Node.js, so you don't need to install it separately.
You only have to run `corepack enable` to enable Yarn if you haven't done it yet.
</ArticleWarning>

</ArticleTab>

<ArticleTab>

1. Install WSL
Open PowerShell as Administrator and run: 
```powershell
wsl --install
```
You should now see a prompt to restart your computer. If not, restart it manually.

Upon restart, a powershell window will open and install Ubuntu. This may take up some time.
You'll see a prompt to create a username and password for your Ubuntu installation.

2. Install and configure git

```bash
sudo apt-get install git

git config --global user.name "Your Name"

git config --global user.email "youremail@domain.com"
```

3. Install nvm, node.js and yarn
<ArticleWarning>

Use `nvm` to install the correct `node` version. The `.nvmrc` ensures all contributors use the same version.

</ArticleWarning>

```bash
sudo apt-get install curl

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
```
Close and reopen your terminal to use nvm. Then run the following commands.

```bash

nvm install # installs recommended node version

nvm use # use recommended node version

corepack enable
```

</ArticleTab>
</ArticleTabs>

---

## Step 1: Git Clone

In your terminal, run the following command. 


<ArticleTabs label1="SSH (Recommended)" label2="HTTPS">
<ArticleTab>
If you haven't already set up SSH keys, you can learn how to do so [here](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/about-ssh). 
```bash
git clone git@github.com:twentyhq/twenty.git
```
</ArticleTab>
<ArticleTab>

```bash
git clone https://github.com/twentyhq/twenty.git
```

</ArticleTab>
</ArticleTabs>

## Step 2: Position yourself at the root

```bash
cd twenty
```

You should run all commands in the following steps from the root of the project.

## Step 3: Set up a PostgreSQL Database
You can access the database at [localhost:5432](localhost:5432), with user `twenty` and password `twenty` .

<ArticleTabs label1="Linux" label2="Mac OS" label3="Windows (WSL)">
  <ArticleTab>
    <b>Option 1:</b> To provision your database locally:
    Use the following link to install Postgresql on your Linux machine: [Postgresql Installation](https://www.postgresql.org/download/linux/)
    ```bash
      psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" -c "CREATE USER twenty PASSWORD 'twenty';" -c "ALTER ROLE twenty superuser;"
    ```

    <b>Option 2:</b> If you have docker installed:
    ```bash
      make postgres-on-docker
    ```
  </ArticleTab>
  <ArticleTab>
    <b>Option 1:</b> To provision your database locally with `brew`:

    ```bash
      brew install postgresql@16
      export PATH="/opt/homebrew/opt/postgresql@16/bin:$PATH"
      psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" -c "CREATE USER twenty PASSWORD 'twenty';" -c "ALTER ROLE twenty superuser;"
    ```

    <b>Option 2:</b> If you have docker installed:
    ```bash
      make postgres-on-docker
    ```
  </ArticleTab>
  <ArticleTab>
    All the following steps are to be run in the WSL terminal (within your virtual machine)

    <b>Option 1:</b> To provision your Postgresql locally:
    Use the following link to install Postgresql on your Linux virtual machine: [Postgresql Installation](https://www.postgresql.org/download/linux/)
    ```bash
      psql postgres -c "CREATE DATABASE \"default\";" -c "CREATE DATABASE test;" -c "CREATE USER twenty PASSWORD 'twenty';" -c "ALTER ROLE twenty superuser;"
    ```

    <b>Option 2:</b> If you have docker installed:  
    Running Docker on WSL adds an extra layer of complexity.
    Only use this option if you are comfortable with the extra steps involved, including turning on [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
    ```bash
      make postgres-on-docker
    ```
  </ArticleTab>
</ArticleTabs>

## Step 4: Set up a Redis Database (cache)
Twenty requires a redis cache to provide the best performances

<ArticleTabs label1="Linux" label2="Mac OS" label3="Windows (WSL)">
  <ArticleTab>
    <b>Option 1:</b> To provision your Redis locally:
    Use the following link to install Redis on your Linux machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)

    <b>Option 2:</b> If you have docker installed:
    ```bash
      make redis-on-docker
    ```
  </ArticleTab>
  <ArticleTab>
    <b>Option 1:</b> To provision your Redis locally with `brew`:
    ```bash
    brew install redis
    ```

    <b>Option 2:</b> If you have docker installed:
    ```bash
      make redis-on-docker
    ```
  </ArticleTab>
  <ArticleTab>
    <b>Option 1:</b> To provision your Redis locally:
    Use the following link to install Redis on your Linux virtual machine: [Redis Installation](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/install-redis-on-linux/)

    <b>Option 2:</b> If you have docker installed:
    ```bash
      make redis-on-docker
    ```
  </ArticleTab>
</ArticleTabs>

## Step 5: Setup environment variables

Use environment variables or `.env` files to configure your project.

Copy the `.env.example` files in `/front` and `/server`:
```bash
cp ./packages/twenty-front/.env.example ./packages/twenty-front/.env
cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
```

## Step 6: Installing dependencies
To build Twenty server and seed some data into your database, run the following command:
```bash
yarn
```

## Step 7: Running the project

Start your redis server:
<ArticleTabs label1="Linux" label2="Mac OS" label3="Windows (WSL)">
  <ArticleTab>
    Depending on your Linux distribution, Redis server might be started automatically.
    If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro.
  </ArticleTab>
  <ArticleTab>
    ```bash
    brew services start redis
    ```
  </ArticleTab>
  <ArticleTab>
    Depending on your Linux distribution, Redis server might be started automatically.
    If not, check the [Redis installation guide](https://redis.io/docs/latest/operate/oss_and_stack/install/install-redis/) for your distro.
  </ArticleTab>
</ArticleTabs>


Setup your database with the following command:
```bash
npx nx database:reset twenty-server
```

Start the server, the worker and the frontend services:
```bash
npx nx start twenty-server
npx nx worker twenty-server
npx nx start twenty-front
```

Alternatively, you can start all services at once:
```bash
npx nx start
```

Twenty's server will be up and running at [http://localhost:3000](http://localhost:3000). The GraphQL API can be accessed at [http://localhost:3000/graphql](http://localhost:3000/graphql), and the REST API can be reached at [http://localhost:3000/rest](http://localhost:3000/rest).

Twenty's frontend will be running at [http://localhost:3001](http://localhost:3001). Just log in using the seeded demo account: `tim@apple.dev` (password: `Applecar2025`) to start using Twenty.


## Troubleshooting

#### CR line breaks found [Windows]

This is due to the line break characters of Windows and the git configuration. Try running:

```
git config --global core.autocrlf false
```

Then delete the repository and clone it again.

#### Missing metadata schema

During Twenty installation, you need to provision your postgres database with the right schemas, extensions, and users.
If you're successful in running this provisioning, you should have `default` and `metadata` schemas in your database.
If you don't, make sure you don't have more than one postgres instance running on your computer.

#### Cannot find module 'twenty-emails' or its corresponding type declarations.

You have to build the package `twenty-emails` before running the initialization of the database with `npx nx run twenty-emails:build`

#### Missing twenty-x package

Make sure to run yarn in the root directory and then run `npx nx server:dev twenty-server`. If this still doesn't work try building the missing package manually.

#### Lint on Save not working

This should work out of the box with the eslint extension installed. If this doesn't work try adding this to your vscode setting (on the dev container scope):

```
"editor.codeActionsOnSave": {

  "source.fixAll.eslint": "explicit"

}
```

<ArticleEditContent></ArticleEditContent>