# Supported runtimes {#supported-runtimes}


Shlink supports a number of ways to serve it. Each one of them has pros and cons, and depending on your technical knowledge and needs, you may prefer to choose one or another.

This document offers a comparison of all of them, to help you make the best decision.


## RoadRunner {#roadrunner}


[RoadRunner](https://roadrunner.dev/) is a PHP application server written in go, that can be installed directly with Shlink.

It lets you load Shlink in memory, and serve requests without reloading the service, which makes it very fast.

It also supports running heavy tasks in background (like updating the [GeoLite2](https://sourcey-shlink.pages.dev/documentation/geolite-license-key/index.md) database file or notifying [real-time updates](https://sourcey-shlink.pages.dev/documentation/advanced/real-time-updates/index.md)).

This makes it the current **officially recommended runtime**.

Follow [the documentation](https://sourcey-shlink.pages.dev/documentation/supported-runtimes/serve-with-roadrunner/index.md) in order to know how to get it up and running.


## FrankenPHP {#frankenphp}


Similarly to RoadRunner, [FrankenPHP](https://frankenphp.dev/) is also a PHP application server written in go, with support for worker mode.

It also has a very good performance, but as opposed to RoadRunner, background tasks are not supported with this runtime.

Follow [the documentation](https://sourcey-shlink.pages.dev/documentation/supported-runtimes/serve-with-franken-php/index.md) in order to know how to install it and serve Shlink with it.


## Classic web server {#classic-web-server}


This is the way traditionally PHP apps have been served.

It requires a web server (Nginx, Apache, etc.) and a FastCGI, like [php-fpm](https://www.php.net/manual/en/install.fpm.php).

It is the least performant option, as Shlink needs to be bootstrapped on every request, but at the same time it is the more predictable option and the one you may prefer if you have experience hosting other PHP apps.

Follow [the documentation](https://sourcey-shlink.pages.dev/documentation/supported-runtimes/classic-web-server/index.md) in order to know how to get it working.


## Comparison {#comparison}


Now that you know the options, follow this table in order to decide what's the best one for you and how to install it.

|                                                                              | <img src="/images/logos/roadrunner.png" width="25" class="d-inline me-1" /> RoadRunner | FrankenPHP                                                   | Classic web server                                           |
| ---------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| **Performance**                                                              | <span class="text-success">90</span>                                                   | <span class="text-success">80</span>                     | <span class="text-danger">30</span>                      |
| **Stability under heavy load**                                               | <span class="text-success">100</span>                                                  | <span class="text-success">100</span>                    | <span class="text-warning">70</span>                     |
| **Hard to install**                                                          | <span class="text-success">Easy</span>                                                 | <span class="text-success">Easy</span>                   | Medium                                                       |
| **[Reverse proxy](https://sourcey-shlink.pages.dev/documentation/advanced/exposing-through-reverse-proxy/index.md)** | Recommended                                                                                | <span class="text-success">Not needed</span>             | <span class="text-success">Not needed</span>             |
| **HTTPS support**                                                            | Via reverse proxy                                                                          | <span class="text-success">Built-in</span>               | Yes                                                          |
| **[Real-time updates](https://sourcey-shlink.pages.dev/documentation/advanced/real-time-updates/index.md)**          | Supported <sup><abbr title="When creating short URLs from the CLI, real-time updates are not dispatched.">⚠</abbr></sup>       | Not supported   | Not supported   |
| **GeoLite2 updates**                                                         | Supported                                | Via [long-running tasks](https://sourcey-shlink.pages.dev/documentation/long-running-tasks/index.md) | Via [long-running tasks](https://sourcey-shlink.pages.dev/documentation/long-running-tasks/index.md) |
