---
url: /deployment/building.md
description: >-
  Build Requesto from source on any platform. Clone the repo, install Node.js
  20+ dependencies, and package the desktop app or run the dev server yourself.
---

# Building from Source

## Prerequisites

* Node.js 20+
* npm
* Git

## Setup

```bash
git clone https://github.com/t3rr11/Requesto.git
cd Requesto
npm install
```

This installs dependencies for all workspace apps via npm workspaces.

## Project Structure

```
Requesto/
├── apps/
│   ├── backend/      # Fastify backend server (port 4747)
│   ├── frontend/     # React/Vite UI (port 5173 in dev)
│   ├── electron/     # Electron desktop wrapper
│   ├── website/      # VitePress documentation site
│   └── playwright/   # End-to-end tests
└── package.json      # Root workspace config
```

## Development

```bash
npm run dev              # Backend + frontend (ports 4747 & 5173)
npm run dev:electron     # All three with Electron window
npm run dev:backend      # Backend only
npm run dev:frontend     # Frontend only
```

Frontend and backend both hot-reload on file changes.

## Production Build

```bash
npm run build            # Build all apps
npm run build:backend    # Backend only → apps/backend/dist/
npm run build:frontend   # Frontend only → apps/frontend/dist/
```

## Packaging the Desktop App

```bash
npm run package:electron:win     # Windows (.exe installer + portable)
```

For macOS and Linux, use the workspace scripts directly:

```bash
npm run package:mac -w requesto-electron     # macOS (.dmg, .zip)
npm run package:linux -w requesto-electron   # Linux (.AppImage, .deb)
```

Output goes to `dist/` at the repository root.

## Docker

```bash
docker build -t requesto:custom .
docker run -d -p 4747:4747 -p 4748:4748 -v requesto-data:/app/data requesto:custom
```

Or with Compose:

```bash
docker-compose up --build
```

## Troubleshooting

**Node version** - Make sure you're on Node.js 20+: `node --version`

**Clean reinstall** - If builds break: `rm -rf node_modules apps/*/node_modules && npm install`

**Port conflict** - Backend uses port 4747, frontend dev server uses 5173. Change in `apps/backend/src/config/index.ts` or `apps/frontend/vite.config.ts`.

## Scripts Reference

| Command | Description |
|---------|-------------|
| `npm run dev` | Backend + frontend dev servers |
| `npm run dev:electron` | All three with Electron window |
| `npm run build` | Build all apps for production |
| `npm run package:electron:win` | Windows installer |
| `npm run package:mac -w requesto-electron` | macOS dmg |
| `npm run package:linux -w requesto-electron` | Linux packages |
| `docker-compose up --build` | Build and run Docker image |
