# Installation

> Every way to install Profilarr, what it needs to run, and how to configure it.

A page from the Profilarr documentation by https://github.com/santiagosayshey, https://github.com/Delavicci, last updated 2026-10-01 (commit: https://github.com/Dictionarry-Hub/profilarr.com/commit/92a5c54a149c3c94cd38a300e6082dc70a368f93). Web version: https://profilarr.com/installation. Edit on GitHub: https://github.com/Dictionarry-Hub/profilarr.com/edit/develop/src/routes/(docs)/installation/+page.svx

Profilarr is a self-hosted web app that runs continuously, like Radarr and Sonarr. It keeps everything in one folder: its SQLite database, logs, backups, and the databases you link. Testing custom formats and quality profiles requires the Profilarr parser, a small companion service that runs as its own container.

## Requirements

- A Docker host running Linux kernel 3.17 or newer, on `linux/amd64` or `linux/arm64`.
- [Sonarr](https://sonarr.tv) `v4.0.9.2386` or newer.
- [Radarr](https://radarr.video) `v5.10.4` or newer.

> **Info:** Profilarr crashes at startup with `getentropy failed` on kernels older than 3.17. [Deno](https://deno.com), the runtime Profilarr is built on, relies on the `getrandom` system call, which Linux added in 3.17. This mostly affects older NAS devices, such as Synology DSM installs that still run kernel 3.10. See [issue #650](https://github.com/Dictionarry-Hub/profilarr/issues/650) for more details.

## Installation Methods

Profilarr is currently distributed as a Docker image. Standalone binaries for Windows, macOS, and Linux are a work in progress.

| Method | Runs on | Status |
| --- | --- | --- |
| [Docker](https://profilarr.com/installation/docker) | Any Docker host, amd64 or arm64 | Available |
| [Unraid](https://profilarr.com/installation/docker#unraid) | Unraid, from Community Applications | Available |
| Windows binary | Windows | Planned |
| macOS binary | macOS | Planned |
| Linux binary | Linux | Planned |

## The Parser

The parser is a small companion service that reads release titles the way Radarr and Sonarr do. It's written in `C#`, like Radarr and Sonarr, so it uses the same parsing logic and the same `.NET` regex engine they do. That means test results match what your Arrs will actually decide.

Profilarr uses it for:

- Custom format testing
- Quality profile testing, including Quick Parse
- Checking that a regular expression is valid
- Running Regex101 unit tests

The parser was built mostly for the development side of Profilarr: building and testing configurations. If you're only linking a database and syncing it to your Arrs, without changing its configs, you can skip the parser entirely and lose nothing you'd use (and save about 50 MB of RAM). Without it, Profilarr hides custom format and quality profile testing, and regex checks and Regex101 tests show no results.

## Release Channels

Profilarr is published under a few tags, so you can choose how it updates. New features land on `develop` first for beta testers, and a batch becomes a stable release once it's verified. How you keep Profilarr up to date depends on how you installed it. For Docker, see [Updating](https://profilarr.com/installation/docker#updating).

| Tag | What you get |
| --- | --- |
| `latest` | The newest stable release, including future major versions. |
| `2` | The newest stable release within v2. It never moves to a new major version. |
| `2.1.0` | One specific release. It never updates. |
| `develop` | Pre-release builds still being tested. Not guaranteed to be stable. |

Use `latest` unless you specifically want to test upcoming changes. The parser publishes the same tags. Keep both containers on the same one.

## Environment Variables

Profilarr is configured with environment variables. Most are read by Profilarr itself and work the same way with any installation method. The ones marked Docker only are handled by the container's startup script, so they won't apply to the standalone binaries.

### General

| Variable | Default | Description |
| --- | --- | --- |
| `PUID` (Docker only) | `1000` | User ID that Profilarr runs as. Its config folder is owned by this user. |
| `PGID` (Docker only) | `1000` | Group ID that Profilarr runs as. Its config folder is owned by this group. |
| `UMASK` (Docker only) | `022` | File creation mask for files Profilarr writes. |
| `TZ` | `UTC` | Timezone used for schedules, such as Australia/Adelaide. |
| `PORT` | `6868` | Port the web UI listens on. |
| `HOST` | `0.0.0.0` | Address the web UI binds to. |

### Authentication

| Variable | Default | Description |
| --- | --- | --- |
| `AUTH` | `on` | Turns login on or off. See [Authentication](https://profilarr.com/installation/authentication). |
| `OIDC_DISCOVERY_URL` | Not set | Discovery URL of your OIDC provider. |
| `OIDC_CLIENT_ID` | Not set | Client ID registered with your OIDC provider. |
| `OIDC_CLIENT_SECRET` | Not set | Client secret registered with your OIDC provider. |
| `ORIGIN` | Not set | The URL you reach Profilarr at behind a reverse proxy, such as https://profilarr.example.com. See [Reverse Proxy](https://profilarr.com/installation/reverse-proxy). |
| `PROFILARR_API_KEY` | Not set | An API key with full access, for scripts and automated deployments. See [Authentication](https://profilarr.com/installation/authentication). |

Set all three `OIDC_` variables to turn on SSO.

### Parser

See [The Parser](#the-parser) for what it does and whether you need it.

| Variable | Default | Description |
| --- | --- | --- |
| `PARSER_HOST` | `localhost` | Host name of the parser service, such as its service name in your compose file. |
| `PARSER_PORT` | `5000` | Port of the parser service. |

### Outbound Proxy

Profilarr has no proxy setting of its own. It follows these standard variables for everything it fetches: database updates from GitHub, notifications, TMDB, and announcements.

| Variable | Default | Description |
| --- | --- | --- |
| `HTTPS_PROXY` | Not set | Proxy for outbound https:// requests. |
| `HTTP_PROXY` | Not set | Proxy for outbound http:// requests. |
| `ALL_PROXY` | Not set | Proxy for both http:// and https:// requests. |
| `NO_PROXY` | Not set | Comma-separated hosts, IPs, or ranges that skip the proxy. |

- Proxy URLs take the form `scheme://user:pass@host:port`, where the scheme is `http`, `socks5`, or `socks5h`. Use `socks5h` to send DNS lookups through the proxy too.
- Special characters in the username or password need to be URL-encoded, such as `@` as `%40` and `:` as `%3A`.

> **Warning:** Add your Radarr and Sonarr instances and the parser to `NO_PROXY`. Any host that isn't listed is sent to the proxy, and the proxy usually can't reach services on your local network. This matters most when `HTTP_PROXY` or `ALL_PROXY` is set, since those also cover plain `http://` addresses.

For example, this routes Profilarr through a proxy container named `gluetun`, while your Arrs and the parser stay direct:

`compose.yml`

```yaml
environment:
  - HTTPS_PROXY=http://user:pass@gluetun:8888
  - NO_PROXY=localhost,127.0.0.1,parser,radarr,sonarr
```

### Announcements

| Variable | Default | Description |
| --- | --- | --- |
| `PROFILARR_BULLETIN_URL` | `https://raw.githubusercontent.com/Dictionarry-Hub/bulletin/main` | Where announcements and release information are fetched from. Only change it to point at a mirror. |

### Secrets from Files

Docker only. Any variable can be read from a file instead by adding `_FILE` to its name and setting it to the file's path. This works with Docker secrets, so values like the OIDC client secret don't have to sit in your compose file:

`compose.yml`

```yaml
environment:
  - OIDC_CLIENT_SECRET_FILE=/run/secrets/oidc_client_secret
```

The startup script reads the file, strips any newlines, and sets the variable without `_FILE` from it. If the file doesn't exist, it logs a warning and leaves the variable unset.

---

Index of this site's Markdown pages: https://profilarr.com/llms.txt
