Getting started
Setting up your development environment​
This guide will help you set up your development environment to start contributing to homarr.
Prerequisites​
- Node.js 24.18 or newer: You can download it from the official website.
- Corepack: Run
corepack enableso the repository selects its pinned pnpm version. - Git: You can download it from the official website.
- Docker or Docker Desktop: Required for the Redis service and the developer Docker CLI.
- Go 1.25+: Required only for the developer Docker CLI. You can download it from the official website.
- GitHub CLI: Required only for pull-request image features. Install it from the official website, then authenticate with
gh auth login.
Setting up the project​
- Fork the repository by clicking on the "Fork" button on the top right corner of the repository page.

- Clone the repository to your local machine with
git clone. You can find the url to use by clicking on the "Code" button on the top right corner of your forks repository page.

-
Change directory to the project folder with
cd homarr. -
Install the dependencies with
pnpm install. -
Create
.envfrom.env.example. In a POSIX shell, runcp .env.example .env; in PowerShell, runCopy-Item .env.example .env. SetDB_URLto an absolute path for your SQLite file. -
Start Redis in the background with
pnpm docker:dev:upif your development workflow needs it. -
Create or update the database with
pnpm db:migration:sqlite:run. This also seeds the default data. To run the seed explicitly later, usepnpm db:seed. -
Start the development server with
pnpm devand wait for a message that says✓ Ready in 10.7s -
Open your browser and navigate to http://localhost:3000. (Loading the page might take up to 2 minutes the first time)
Useful npm scripts​
During development​
pnpm dev: Start the Next.js development server.pnpm dev:benchmark: Run the local authenticated-board benchmark. SetDEV_BENCHMARK_BOARD_URLandDEV_BENCHMARK_STORAGE_STATE; readiness-only measurements require the explicit--smokeflag and are not suitable for performance claims.pnpm dev:cli -- dev: Browse and run local images and remote pull-request images.pnpm dev:cli -- build <name>: Build the current checkout ashomarr:<name>.pnpm dev:cli -- build --pr <number>: Build a pull request locally from a temporary checkout.pnpm dev:cli -- rebuild <name>: Rebuild a local image from its recorded checkout or pull request.pnpm dev:cli:install: Optionally install the developer CLI as ahomarrbinary.pnpm cli: Run cli commands.pnpm db:migration:sqlite:run: Run the migrations to create or update the sqlite db file.pnpm db:seed: Explicitly seed the default database data.pnpm docker:dev:up: Start the Redis development service in the background.pnpm db:migration:sqlite:generate: Generate a new migration file for the sqlite db. Also works withmysql.pnpm db:studio: Open a visual studio for the database.pnpm package:new: Create a new package in the monorepo.
Checking code quality​
pnpm lint: Run the linter to check for code quality issues.pnpm format:fix: Run the formatter to fix code style issues.pnpm test: Run the tests. You can also usepnpm test:uito get a UI for the tests.pnpm typecheck: Run the typescript type checker.
Building the project​
pnpm build: Build the project for production.pnpm dev:cli -- build <name>: Build ahomarr:<name>image and record its checkout for later rebuilds.docker build -t homarr .: Build a docker image for the project.docker run -p 7575:7575 -e SECRET_ENCRYPTION_KEY='your_64_character_hex_string' homarr:<name>: Run the created docker image.