# Start contributing to [Project AIRI](https://github.com/moeru-ai/airi)
Hello! Thank you for your interest in contributing to this project. This guide will help you get started.
## Prerequisites
- [Git](https://git-scm.com/downloads)
- [Node.js 23+](https://nodejs.org/en/download/)
- [corepack](https://github.com/nodejs/corepack)
- [pnpm](https://pnpm.io/installation)
Windows setup
0. Download [Visual Studio](https://visualstudio.microsoft.com/downloads/) and follow the instructions here: https://rust-lang.github.io/rustup/installation/windows-msvc.html#walkthrough-installing-visual-studio-2022
> Make sure to install Windows SDK and C++ build tools when installing Visual Studio.
1. Open PowerShell
2. Install [`scoop`](https://scoop.sh/)
```powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
```
3. Install `git`, Node.js, `rustup`, `msvc` through `scoop`
```powershell
scoop install git nodejs rustup
# For Rust dependencies
# Not required if you are not going to develop on either crates or apps/tamagotchi
scoop install main/rust-msvc
# Rust & Windows specific
rustup toolchain install stable-x86_64-pc-windows-msvc
rustup default stable-x86_64-pc-windows-msvc
```
> https://stackoverflow.com/a/64121601
4. Install `pnpm` through `corepack`
```powershell
corepack enable
corepack prepare pnpm@latest --activate
```
macOS setup
0. Open Terminal (or iTerm2, Ghostty, Kitty, etc.)
1. Install `git`, `node` through `brew`
```shell
brew install git node
```
2. Install `pnpm` through `corepack`
```shell
corepack enable
corepack prepare pnpm@latest --activate
```
Linux setup
0. Open terminal
1. Follow [nodesource/distributions: NodeSource Node.js Binary Distributions](https://github.com/nodesource/distributions?tab=readme-ov-file#table-of-contents) to install `node`
2. Follow [Git](https://git-scm.com/downloads/linux) to install `git`
3. Install `pnpm` through `corepack`
```shell
corepack enable
corepack prepare pnpm@latest --activate
```
4. If you would love to help to develop the desktop version, you will need those dependencies:
```shell
sudo apt install \
libssl-dev \
libglib2.0-dev \
libgtk-3-dev \
libjavascriptcoregtk-4.1-dev \
libwebkit2gtk-4.1-dev
```
## If you have already contributed to this project before
> [!WARNING]
>
> If you haven't cloned this repository, skip this section.
Make sure your local repository is up to date with the upstream repository:
```shell
git fetch --all
git checkout main
git pull upstream main --rebase
```
If you have a working branch, to make your branch up to date with the upstream repository:
```shell
git checkout
git rebase main
```
## Fork this project
Click on the **Fork** button on the top right corner of the [moeru-ai/airi](https://github.com/moeru-ai/airi) page.
## Clone
```shell
git clone https://github.com//airi.git
cd airi
```
## Create your working branch
```shell
git checkout -b
```
## Install dependencies
```shell
corepack enable
pnpm install
# For Rust dependencies
# Not required if you are not going to develop on either crates or apps/tamagotchi
cargo fetch
```
> [!NOTE]
>
> We would recommend to install [@antfu/ni](https://github.com/antfu-collective/ni) to make your script simpler.
>
> ```shell
> corepack enable
> npm i -g @antfu/ni
> ```
>
> Once installed, you can
>
> - use `ni` for `pnpm install`, `npm install` and `yarn install`.
> - use `nr` for `pnpm run`, `npm run` and `yarn run`.
>
> You don't need to care about the package manager, `ni` will help you choose the right one.
## Choose the application you want to develop on
### Stage Tamagotchi (Desktop version)
```shell
pnpm dev:tamagotchi
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr dev:tamagotchi
> ```
### Stage Web (Browser version for [airi.moeru.ai](https://airi.moeru.ai))
```shell
pnpm dev
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr dev
> ```
### UI Storyboard
Browse the live UI component storyboard at [airi.moeru.ai/ui](https://airi.moeru.ai/ui/).
### Documentation site
```shell
pnpm dev:docs
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr dev:docs
> ```
### Telegram bot integration
A Postgres database is required.
```shell
cd services/telegram-bot
docker compose up -d
```
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Migrate the database
```shell
pnpm -F @proj-airi/telegram-bot db:generate
pnpm -F @proj-airi/telegram-bot db:push
```
Run the bot
```shell
pnpm -F @proj-airi/telegram-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/telegram-bot dev
> ```
### Discord bot integration
```shell
cd services/discord-bot
```
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Run the bot
```shell
pnpm -F @proj-airi/discord-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/discord-bot dev
> ```
### Minecraft agent
```shell
cd services/minecraft
```
Start a Minecraft client, export your world with desired port, and fill-in the port number in `.env.local`.
Configure `.env`
```shell
cp .env .env.local
```
Edit the credentials in `.env.local`.
Run the bot
```shell
pnpm -F @proj-airi/minecraft-bot start
```
> [!NOTE]
>
> For [@antfu/ni](https://github.com/antfu-collective/ni) users, you can
>
> ```shell
> nr -F @proj-airi/minecraft-bot dev
> ```
## Commit
### Before commit
Please make sure lint (static checkers) and TypeScript compilers are satisfied:
```shell
pnpm lint && pnpm typecheck
```
If you are committing images, consider using AVIF format instead of PNG, JPG etc. You can convert existing images to AVIF by running:
```shell
pnpm to-avif ...
```
> [!NOTE]
>
> If you have [@antfu/ni](https://github.com/antfu-collective/ni) installed, you can use `nr` to run the commands:
>
> ```shell
> nr lint && nr typecheck
> ```
### Commit
```shell
git add .
git commit -m ""
```
### Push to your fork repository
```shell
git push origin -u
```
You should be able to browse the branch on your fork repository.
> [!NOTE]
>
> If this is your first time contributing to this project, you need to add the upstream repository too:
>
> ```shell
> git remote add upstream https://github.com/moeru-ai/airi.git
> ```
## Creating Pull Request
Navigate to [moeru-ai/airi](https://github.com/moeru-ai/airi) page, click on the **Pull requests** tab, and click on the **New pull request** button, click on the **Compare across forks** link, and select your fork repository.
Review the changes, and click on the **Create pull request** button.
## Whooo-ya! You made it!
Congratulations! You made your first contribution to this project. You can now wait for the maintainers to review your pull request.