Shlink Versions Save

The definitive self-hosted URL shortener

v4.1.0

3 weeks ago

Changed

  • #2034 Modernize entities, using constructor property promotion and readonly wherever possible.

  • #2036 Deep performance improvement in some endpoints which involve counting visits:

    • listing short URLs ordered by visits counts.
    • loading tags with stats.
    • visits overview.

    This has been achieved by introducing a new table which tracks slotted visits counts. We can then SUM all counts for certain short URL, avoiding COUNT(visits) aggregates which are much less performant when there are a lot of visits.

  • #2049 Request ID is now propagated to the background tasks/jobs scheduled during a request.

    This allows for a better traceability, as the logs generated during those jobs will have a matching UUID as the logs generated during the request the triggered the job.

Added

  • #1330 All visit-related endpoints now expose the visitedUrl prop for any visit.

    Previously, this was exposed only for orphan visits, since this can be an arbitrary value for those.

  • #2077 When sending visits to Matomo, the short URL title is now used as document title in matomo.

  • #2059 Add new short-url:delete-expired command that can be used to programmatically delete expired short URLs.

    Expired short URLs are those that have a validUntil date in the past, or optionally, that have reached the max amount of visits.

    This command can be run periodically by those who create many disposable URLs which are valid only for a period of time, and then can be deleted to save space.

  • #1925 Add new integration:matomo:send-visits console command that can be used to send existing visits to integrated Matomo instance.

  • #2087 Allow memory_limit to be configured via the new MEMORY_LIMIT env var or configuration option.

Removed

  • Nothing

Fixed

  • #2095 Fix custom slugs not being properly imported from bitly
  • Fix error when importing short URLs and visits from a Shlink 4.x instance

Deprecated

  • Nothing

v4.0.3

1 month ago

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #2058 Fix DB credentials provided as env vars being casted to int if they include only numbers.
  • #2060 Fix error when trying to redirect to a non-http long URL.

Deprecated

  • Nothing

v3.7.4

1 month ago

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #2021 Fix infinite GeoLite2 downloads.

Deprecated

  • Nothing

v4.0.2

1 month ago

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #2021 Fix infinite GeoLite2 downloads.

Deprecated

  • Nothing

v4.0.1

1 month ago

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #2041 Document missing color and bgColor params for the QR code route in the OAS docs.
  • #2043 Fix language redirect conditions matching too low quality accepted languages.

Deprecated

  • Nothing

v4.0.0

2 months ago

Changed

  • #1935 Replace dependency on abandoned php-middleware/request-id with userland simple middleware.
  • #1988 Remove dependency on league\uri package.
  • #1909 Update docker image to PHP 8.3.
  • #1786 Run API tests with RoadRunner by default.
  • #2008 Update to Doctrine ORM 3.0.
  • #2010 Update to Symfony 7.0 components.
  • #2016 Simplify and improve how code coverage is generated in API and CLI tests.
  • #1674 Database columns persisting long URLs have now TEXT type, which allows for much longer values.

Added

  • #1914 Add new dynamic redirects engine based on rules. Rules are conditions checked against the visitor's request, and when matching, they can result in a redirect to a different long URL.

    Rules can be based on things like the presence of specific params, headers, locations, etc. This version ships with three initial rule condition types: device, query param and language.

  • #1902 Add dynamic redirects based on query parameters.

    This is implemented on top of the new rule-based redirects.

  • #1915 Add dynamic redirects based on accept language.

    This is implemented on top of the new rule-based redirects.

  • #1868 Add support for docker compose secrets to the docker image.

  • #1979 Allow orphan visits lists to be filtered by type.

    This is supported both by the GET /visits/orphan API endpoint via type=... query param, and by the visit:orphan CLI command, via --type flag.

  • #1904 Allow to customize QR codes foreground color, background color and logo.

  • #1884 Allow a path prefix to be provided during short URL creation.

    This can be useful to let Shlink generate partially random URLs, but with a known prefix.

    Path prefixes are validated and filtered taking multi-segment slugs into consideration, which means slashes are replaced with dashes as long as multi-segment slugs are disabled.

Removed

  • #1908 Remove support for openswoole (and swoole).

Fixed

  • #2000 Fix short URL creation/edition getting stuck when trying to resolve the title of a long URL which never returns a response.

Deprecated

  • Nothing

v3.7.3

4 months ago

Changed

  • #1968 Move migrations from data to module/Core.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1967 Allow an empty dir to be mounted in data when using the docker image.

Deprecated

  • Nothing

v3.7.3-beta.1

4 months ago

v3.7.2

4 months ago

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1960 Allow QR codes to be optionally resolved even when corresponding short URL is not enabled.

Deprecated

  • Nothing

v3.7.1

4 months ago

Changed

  • Remove dependency on functional-php library
  • #1939 Fine-tune RoadRunner logs to avoid too many useless info.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1947 Fix error when importing short URLs while using Postgres.

Deprecated

  • Nothing