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 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 database file or notifying real-time updates).

This makes it the current officially recommended runtime.

Follow the documentation in order to know how to get it up and running.

RoadRunner support was added in Shlink 3.3.0

Openswoole

Openswoole is a native PHP extension, that needs to be installed with pecl.

It provides the same capabilities as RoadRunner, but it’s a bit harder to install, and has proved to have some low-level issues (memory leaks, expiring DB connections, etc.) for which it is currently not the recommended option.

Follow the documentation in order to get it installed.

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.

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 in order to know how to get it working.

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.

RoadRunner OpenswooleClassic web server
Performance9010030
Stability under heavy load1008070
Hard to installEasyMediumMedium
Reverse proxyRecommendedRecommendedNot needed
HTTPS supportVia reverse proxyVia reverse proxyYes
Real-time updates
GeoLite2 updatesVia long-running tasks