> For the complete documentation index, see [llms.txt](https://docs.fylr.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fylr.io/for-system-administrators/installation/windows.md).

# Windows

There are now two ways to do this:

* The fully automated installer made by Attention Solutions: <https://attention.dk/docs/att/doku.php?id=winfylr:start> - needs a paid subscription with Attention Solutions.
* Use fylr directly from the developer Programmfabrik GmbH and download the 3rd party tools by yourself. This is what the rest of this page guides you through:

## Download fylr.exe

* Go to the newest release in <https://docs.fylr.io/releases>
* Download `fylr_v6.`X.Y`_windows_amd64.zip` and unpack.

It contains:

* `fylr.exe` fylr native for Windows amd64.
* `fylr.yml` a starting configuration already adjusted with Windows path syntax and for the following instructions.
* `fylr.example.yml` most configuration parameters. Look here for reference.
* `fylr.default.yml` compiled-in default values. Just as a copy for you to look them up.
* `LICENSE` legal information on who may use fylr.
* A folder with plugins.

## Windows path length

The shorter the path of your fylr installation directory, the less likely your installation will fail processing files due to exceeding the [length limit](https://learn.microsoft.com/en-us/windows/win32/fileio/maximum-file-path-limitation?tabs=registry). So prefer `C:\fylr` over `C:\user\jane doe\Desktop\software-project\fylr-v6.17.0\unpacked`. fylr newer than v6.3.1 will try to use only short internal file names, but every little bit helps. Same for Libre Office installation (more about that below).

## Get the dependencies

Bare bone minimum: Elasticsearch or OpenSearch

### OpenSearch

OpenSearch is our default and recommendation.

We installed OpenSearch as described in <https://opensearch.org/docs/latest/install-and-configure/install-opensearch/windows/>

* Version 3.6.0, downloaded and unzipped.
* We disabled security and let it explicitly listen only on localhost, thus protecting it, in `opensearch-3.6.0\config\opensearch.yml`:

```
network.host: 127.0.0.1
plugins.security.disabled: true
```

* We extended one limit for fylr in `opensearch-3.6.0\config\jvm.options`:

```
-Dopensearch.xcontent.depth.max=10000
```

* We installed the one needed plugin:

```
opensearch-3.6.0> .\bin\opensearch-plugin install analysis-icu
```

* Started OpenSearch with

```
opensearch-3.6.0> .\opensearch-windows-install.bat
```

### Elasticsearch

Elasticsearch has been the default until 2023. Now we recommend OpenSearch instead.

What we tested:

* Download from <https://www.elastic.co/guide/en/elasticsearch/reference/current/zip-windows.html>
* We recommend Elasticsearch `7.17`.
* If you start a new instance or have problems with ElasticSearch, we recommend OpenSearch, see above.
* Since writing the next lines, we found a <mark style="background-color:red;">problem</mark> with Versions `8.5` and newer, about indexing letters *Q* and *W*, of all things. Thus our recommendation for Elasticsearch `7.17`. The remainder of the text still mentions `8.6.1`, to stay true to what we actually did under Windows.
* Unpack official windows release file elasticsearch-8.6.1-windows-x86\_64.zip

  Other Versions should also be fine. This is true for all the below mentioned tools.
* Disable security with ...

```
xpack.security.enabled: false
```

... in elasticsearch-8.6.1\config\elasticsearch.yml

* Got the analysis-icu plugin from <https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-icu.html> for offline installation (it was <https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-icu/analysis-icu-8.6.1.zip>)
* Unpacked into `elasticsearch-8.6.1\plugins\analysis-icu\` (no further subfolders).
* Start, for example in a Windows powershell:

```
.\elasticsearch-8.6.1\bin\elasticsearch.bat
```

Elasticsearch then used the default address `http://localhost:9200`, which is also configured in `fylr.yml`.

### Start fylr with minimal dependencies

Edit fylr.yml to not use any 3rd part tools for the moment if you want to test/start with minimal effort:

```
fylr+:
  [...]
  services+:
  [...]
    execserver+:

      commands:
        fylr:
          prog: fylr.exe
      services:
```

You are now ready to start fylr, although most asset processing tools are still missing: (no previews)

```
.\fylr.exe server -c fylr.yml
```

... in the folder where fylr.exe is.

Output lines with `WRN` can usually be ignored.

Harmless Errors known to appear are e.g.

* `Error occurred in NewIntrospectionRequest` and `Accepting token failed`, when a browser tries to use old credentials.

#### Access the web frontend

Browse <http://localhost>

Default login credentials are:

* **Username**: *root*
* **Password**: *admin*

### More than bare bone minimum

For a full installation it is recommended to install all of the following and un-comment them in `fylr.yml`.

"Un-comment" = turning the comments into configuration.

### PostgreSQL

* We installed 15.2 from <https://www.enterprisedb.com/downloads/postgres-postgresql-downloads>
* We started pgadmin and created a role "fylr" (with LOGIN and INHERIT, the defaults), with password "fylr"; and a database "fylr" owned by role "fylr".
* We un-commented these lines in fylr.yml:

```
    driver: postgres
    dsn: "host=localhost port=5432 user=fylr password=fylr dbname=fylr sslmode=disable"
```

* And we disabled the lines configuring sqlite, by turning them into comments:

```
    #driver: sqlite3
    #dsn: "data\\sqlite.db"
```

* For a consistent state we also did the next step: cleanup.

#### cleanup

If you want to go back to a fresh state between two test runs:

* Stop fylr.exe and the indexer (opensearch or elasticsearch). Optionally check that java / openjdk is stopped alongside elasticsearch.
* Remove the directory `data` and elasticsearch's `data/*` .
* Start elasticsearch as shown at the beginning.
* If you use PostgreSQL, remove and recreate the database.

### pdf tools

* We downloaded the newest release zip (at the time `Release-26.02.0-0.zip`) from [https://github.com/oschwartz10612/poppler-windows](https://github.com/oschwartz10612/poppler-windows/releases) (*not* xpdf-tools from <https://www.xpdfreader.com>)
* fylr only uses `pdfinfo.exe` from poppler: PDF text extraction is done by tika, PDF page rendering by mupdf's mutool (both below).
* We unpacked the release and configured the path to pdfinfo.exe in fylr.yml. Alternatively, we tested successfully to add the containing directory to the PATH.

### magick.exe (ImageMagick)

* We downloaded the newest portable archive (at the time `ImageMagick-7.1.2-26-portable-Q16-HDRI-x64.7z`) from <https://imagemagick.org/script/download.php#windows>
* We put `magick.exe` from the download into `C:\fylr\utils`. It is the only ImageMagick binary fylr needs; compositing etc. run as subcommands of `magick.exe`. (`convert.exe` and `composite.exe` are not used by fylr and are no longer part of current ImageMagick anyway.)

**Use a current ImageMagick, and fylr v6.34.0 or newer.** Two version traps around ImageMagick:

* Current ImageMagick no longer accepts the deprecated `magick convert` command form. fylr up to v6.33 called ImageMagick that way, so previews fail with ``NoDecodeDelegateForThisImageFormat `convert'``. fylr v6.34.0 and newer calls `magick` in the modern form, which works with old and new ImageMagick 7.
* ImageMagick Windows builds from before mid-2024 embed a libheif older than 1.18, which cannot decode HEIC photos taken by newer iPhones (iOS 18 and later): previews fail with `Too many auxiliary image references`. To check what your magick.exe embeds, run the following — the version in parentheses is the libheif version and must be 1.18 or newer:

```
C:\fylr\utils> .\magick.exe -list format | findstr /i heic
     HEIC  HEIC      rw+   High Efficiency Image Format (1.22.2)
```

Hint from the [download page](https://imagemagick.org/script/download.php#windows):

> If you have any problems, you likely need vcomp140.dll. To install it, download Visual C++ Redistributable Package(<https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads>).

### Exiftool.exe

We downloaded the newest 64-bit Windows Executable (at the time `exiftool-13.59_64.zip`) from <https://exiftool.org>

We have put the contents of the zip — exiftool(-k).exe and (in newer packages) the `exiftool_files` folder next to it — into `C:\fylr\utils`.

We renamed exiftool(-k).exe to exiftool.exe as recommended by the ExifTool install notes.

### Ffmpeg.exe and ffprobe.exe

We downloaded a current release build (at the time `ffmpeg-n8.1-latest-win64-gpl-8.1.zip`) from <https://github.com/BtbN/FFmpeg-Builds/releases>

We suggest you avoid the LGPL version as testing showed it has less features (x264 and x265).

We have put ffmpeg.exe and ffprobe.exe into `C:\fylr\utils`.

### Node

We downloaded the current LTS version (at the time `node-v24.18.0-win-x64.7z`) from <https://nodejs.org/en/download>

We put just node.exe into `C:\fylr\utils`.

### Python

We downloaded "Windows embeddable package (64-bit)" at <https://www.python.org/downloads/windows/> (explained [here](https://docs.python.org/3/using/windows.html#windows-embeddable))

We unpacked the whole package as the folder "python3" inside `C:\fylr\utils`.

### Java

For extracting information from assets, fylr needs a "java" command. We made sure to have java installed and that it can be started by the command `java` (for that, it has to be in the system environment variable PATH, which already was the case after java installation).

### Saxon

This replaces *xsltproc* in fylr v6.19.

We downloaded **SaxonJ-HE 12.5** from <https://www.saxonica.com/download/java.xml>

* The unpacked file was `C:\fylr\utils\saxon\saxon-he-12.5.jar` .

```
fylr+:
  services+:
    execserver+:
      commands:
        saxon:
          prog: java
          args:
            - "-jar"
            - "C:\\fylr\\utils\\saxon\\saxon-he-12.5.jar"
```

### Ghostscript

We downloaded `Ghostscript 10.05.0 for Windows (64 bit)` from <https://ghostscript.com/releases/gsdnld.html>

We installed to `C:\Program Files\gs\gs10.05.0` .

The `bin` directory was added automatically to the system `%PATH%` by the Ghostscript installer.

We then copied `gswin64c.exe` to `gs.exe` so that other programs are able to find it in `%PATH%`.

```
PS C:\Program Files\gs\gs10.05.0\bin> dir
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----    Mi, 12.03.2025     13:58          93696 gs.exe
-a----    Mi, 12.03.2025     13:58          93696 gswin64c.exe
```

We also added to the system path: `C:\Program Files\gs\gs10.05.0\lib`.

The latter is needed for the generation of previews for `.eps`-files via `ps2pdf` and [inkscape](#inkscape).

### Libreoffice

We installed LibreOffice ([ https://de.libreoffice.org/donate/dl/win-x86\_64/24.8.4/de/LibreOffice\_24.8.4\_Win\_x86-64.msi ](https://de.libreoffice.org/donate/dl/win-x86_64/24.8.4/de/LibreOffice_24.8.4_Win_x86-64.msi))

and configured in fylr.yml:

```
fylr+:
  services+:
    execserver+:
      commands:
        soffice:
          prog: "C:\\Program Files\\LibreOffice\\program\\soffice.exe"
```

\
As an alternative we successfully tested `LibreOfficePortable_7.4.5_MultilingualStandard.paf.exe` from <https://www.libreoffice.org/download/portable-versions/> to `C:\LibreOfficePortable`.

Fair warning: If you make your installation path too long, libre office will not work.

Example for too long: `C:\Users\Klaus Thorn\Desktop\pf\fylr_v6.2.4_windows_amd64\utils\LibreOfficePortable\`.

We then configured the path to `soffice.exe` in `fylr.yml`.

### Inkscape

We installed Inkscape 1.4 via its default Installer.

Version 1.4 is needed for the generation of previews for `.eps`-files via `ps2pdf` and inkscape.

We added Inkscape's `bin` directory to the Windows System `%PATH%` like this:

1. In the Windows Start Menu, we typed `env`, then selected `Edit the system environment variables`
2. We clicked the `Environment Variables...` button
3. In the lower section titled `System variables` , we selected the line starting with `Path`.
4. We clicked `Edit...`
5. In the new window, we clicked `New` and pasted `C:\Program Files\Inkscape\bin` .
6. We clicked `OK`.
7. We closed and opened a new window for `fylr.exe` so that the new `%PATH%` is known to the window and thus to fylr.

We tested Inkscape integration by uploading a svg file into fylr and check whether a preview is generated.

### tika

We downloaded from <https://tika.apache.org/download.html> the newest tika-app jar file (at the time `tika-app-3.3.1.jar`).

We configured in fylr.yml:

```
fylr+:
  services+:
    execserver+:
      commands:
        tika:
          prog: java
          args:
            - "-jar"
            - "C:\\fylr\\utils\\tika-app-3.3.1.jar"
```

### tesseract

From <https://github.com/UB-Mannheim/tesseract/wiki> we downloaded and started the installer `tesseract-ocr-w64-setup-5.5.0.20241111.exe` (64 bit)

* In the installer dialogs we chose all languages and script data
* We installed to `C:\fylr\utils\tesseract`
* We configured in `fylr.yml`:

```
fylr+:
  services+:
    execserver+:
      commands:
        tesseract:
          prog: "C:\\fylr\\utils\\tesseract\\tesseract.exe"
```

### mupdf tools

We downloaded `mupdf-1.25.2-windows.zip` from <https://mupdf.com/releases> and unpacked it into `C:\fylr\utils\mupdf\` .

In `fylr.yml` we configured:

```
fylr+:
  services+:
    execserver+:
      commands:
        mutool:
          prog: "C:\\fylr\\utils\\mupdf\\mutool.exe"
```

### dot

from <https://www.graphviz.org/download/>

### calibre

from <https://calibre-ebook.com/download_windows>

### libvips

Optional but recommended. fylr requires libvips 8.16 or newer.

From [https://www.libvips.org](https://www.libvips.org/) we followed `Download` and `Windows binaries` to then download the newest `vips-dev-w64-all-`X.Y.Z`.zip` (at the time [vips-dev-w64-all-8.18.3.zip](https://github.com/libvips/build-win64-mxe/releases/download/v8.18.3/vips-dev-w64-all-8.18.3.zip)). Use the `all` variant — it includes the loaders (e.g. HEIF) that fylr benefits from.

We unpacked this zip file to `C:\fylr\utils\vips-dev-8.18`.

In `fylr.yml` :

```
fylr+:
  services+:
    execserver+:
      commands:
        vips:
          prog: "C:\\fylr\\utils\\vips-dev-8.18\\bin\\vips.exe"
```

### chrome

**Optional**. Only needed for the plugin called `server-pdf` in the plugin manager. this plugin is not packaged with fylr by default. We mention it here to show the config under Windows as an example.

* If you have at least version 1.1.0 of the plugin: <https://github.com/programmfabrik/fylr-plugin-server-pdf/releases/tag/v1.1.0> it is ready for fylr under Windows.
* Install the browser **Chrome**
* configure the location of chrome in `fylr.yml`:

```
fylr+:
  env:
    SERVER_PDF_CHROME: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
```

To update the plugin automatically, use this URL: <https://github.com/programmfabrik/fylr-plugin-server-pdf/releases/latest/download/fylr-plugin-server-pdf.zip>

## Configure the tools in fylr.yml

Here is how to configure all these tools in fylr.yml:

* ***before***, the tools in `fylr.yml` look like this (minimal, no 3rd party tools):

```
fylr+:
  [...]
  services+:
  [...]
    execserver+:

      commands:
        fylr:
          prog: fylr.exe
      services:
      
```

* ***after*** we have added the tools: (remember to instead use paths valid on *your* installation)

```
fylr+:
  env:
    SERVER_PDF_CHROME: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
  [...]
  services+:
  [...]
    execserver+:
      commands:
        fylr:
          prog: fylr.exe
        # ffmpegthumbnailer: not under Windows. ffmpeg is used instead as a fallback
        soffice:
          prog: "C:\\Program Files\\LibreOffice\\program\\soffice.exe"
        magick:
          prog: "C:\\fylr\\utils\\magick.exe"
        vips:
          prog: "C:\\fylr\\utils\\vips-dev-8.18\\bin\\vips.exe"
        exiftool:
          prog: "C:\\fylr\\utils\\exiftool.exe"
        ffmpeg:
          prog: "C:\\fylr\\utils\\ffmpeg.exe"
        ffprobe:
          prog: "C:\\fylr\\utils\\ffprobe.exe"
        node:
          prog: "C:\\fylr\\utils\\node.exe"
        python3:
          #prog: "C:\\fylr\\utils\\python3\\python.exe"
          # is searched in PATH variable:
          prog: "python.exe"
        pdfinfo:
          prog: "C:\\fylr\\utils\\poppler-pdf\\Library\\bin\\pdfinfo.exe"
        java:
          prog: java.exe
        inkscape:
          prog: inkscape.exe
        saxon:
          prog: java
          args:
            - "-jar"
            - "C:\\fylr\\utils\\saxon\\saxon-he-12.5.jar"
        dot:
          prog: "C:\\fylr\\utils\\Graphviz\\bin\\dot.exe"
        tika:
          prog: java
          args:
            - "-jar"
            - "C:\\fylr\\utils\\tika-app-3.3.1.jar"
        tesseract:
          prog: "C:\\fylr\\utils\\tesseract\\tesseract.exe"
        mutool:
          prog: "C:\\fylr\\utils\\mupdf\\mutool.exe"
        ebook-meta:
          prog: "C:\\fylr\\utils\\Calibre2\\ebook-meta.exe"
        ebook-convert:
          prog: "C:\\fylr\\utils\\Calibre2\\ebook-convert.exe"
```

Check that each indentation level is **two** spaces. (No tab characters, just space characters).

***

## Start fylr as a service

After testing, you may want to switch to

```
fylr.exe server -c fylr.yml --service install
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.fylr.io/for-system-administrators/installation/windows.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
