Skip to content

Releases: shlinkio/shlink

v3.5.3

31 Mar 20:13
f713a1f
Compare
Choose a tag to compare

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1715 Fix short URL creation/edition allowing long URLs without schema. Now a validation error is thrown.
  • #1537 Fix incorrect list of tags being returned for some author-only API keys.
  • #1738 Fix memory leak when importing short URLs with many visits.

Deprecated

  • Nothing

v3.5.2

16 Feb 18:43
0e9ea50
Compare
Choose a tag to compare

Changed

  • #1696 Migrated to PHPUnit 10.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1698 Fixed error 500 in robots.txt.
  • #1688 Fixed huge performance degradation on /tags/stats endpoint.
  • #1693 Fixed Shlink thinking database already exists if it finds foreign tables.

Deprecated

  • Nothing

v3.5.2-beta.1

12 Feb 18:58
Compare
Choose a tag to compare
v3.5.2-beta.1 Pre-release
Pre-release
Fix performance issues

v3.5.1

04 Feb 17:03
9cd97c2
Compare
Choose a tag to compare

Changed

  • #1685 Changed loosely mode to loose, as it was a typo. The old one keeps working and maps to the new one, but it's considered deprecated.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1682 Fixed incorrect case-insensitive checks in short URLs when using Microsoft SQL server.
  • #1684 Fixed entities metadata cache not being cleared at docker container start-up when using redis with replication.

Deprecated

  • Nothing

v3.5.0

28 Jan 10:15
5cec697
Compare
Choose a tag to compare

Changed

  • Nothing

Added

  • #1557 Added support to dynamically redirect to different long URLs based on the visitor's device type.

    For the moment, only android, ios and desktop can have their own specific long URL, and when the visitor cannot be matched against any of them, the regular long URL will be used.

    In the future, more granular device types could be added if appropriate (iOS tablet, android table, tablet, mobile phone, Linux, Mac, Windows, etc).

    In order to match the visitor's device, the User-Agent header is used.

  • #1632 Added amount of bots, non-bots and total visits to the visits summary endpoint.

  • #1633 Added amount of bots, non-bots and total visits to the tag stats endpoint.

  • #1653 Added support for all HTTP methods in short URLs, together with two new redirect status codes, 307 and 308.

    Existing Shlink instances will continue to work the same. However, if you decide to set the redirect status codes as 307 or 308, Shlink will also return a redirect for short URLs even when the request method is different from GET.

    The status 308 is equivalent to 301, and 307 is equivalent to 302. The difference is that the spec requires the client to respect the original HTTP method when performing the redirect. With 301 and 302, some old clients might perform a GET request during the redirect, regardless the original request method.

  • #1662 Added support to provide openswoole-specific config options via env vars prefixed with OPENSWOOLE_.

  • #1389 and #706 Added support for case-insensitive short URLs.

    In order to achieve this, a new env var/config option has been implemented (SHORT_URL_MODE), which allows either strict or loosely.

    Default value is strict, but if loosely is provided, then short URLs will be matched in a case-insensitive way, and new short URLs will be generated with short-codes in lowercase only.

Removed

  • Nothing

Fixed

  • #1639 Fixed 500 error returned when request body is not valid JSON, instead of a proper descriptive error.

Deprecated

  • #1676 Deprecated GET /short-urls/shorten endpoint. Use POST /short-urls to create short URLs instead.
  • #1678 Deprecated validateUrl option on URL creation/edition.

v3.4.0

16 Dec 22:00
067d1cc
Compare
Choose a tag to compare

Changed

  • #1563 Moved logic to reuse command options to option classes instead of base abstract command classes.
  • #1569 Migrated test doubles from phpspec/prophecy to PHPUnit mocks.
  • #1329 Split some logic from VisitRepository and ShortUrlRepository into separated repository classes.

Added

  • #1612 Allowed to filter short URLs out of lists, when validUntil date is in the past or have reached their maximum amount of visits.

    This can be done by:

    • Providing excludeMaxVisitsReached=true and/or excludePastValidUntil=true to the GET /short-urls endpoint.
    • Providing --exclude-max-visits-reached and/or --exclude-past-valid-until to the short-urls:list command.
  • #1613 Added amount of visits coming from bots, non-bots and total to every short URL in the short URLs list.

    Additionally, added option to order by non-bot visits, by passing nonBotVisits-DESC or nonBotVisits-ASC.

  • #1599 Added support for credentials on redis DSNs, either only password, or both username and password.

  • #1616 Added support to import orphan visits when importing short URLs from another Shlink instance.

  • #1519 Allowing to search short URLs by default domain.

  • #1555 and #1625 Added full support for PHP 8.2, updating the docker image to this version.

Removed

  • Nothing

Fixed

  • #1618 Fixed imported short URLs and visits dates not being set to the target server timezone.
  • #1578 Fixed short URL allowing an empty string as the domain during creation.
  • #1580 Fixed FLUSHDB being run on Shlink docker start-up when using redis, causing full cache to be flushed.

Deprecated

  • Nothing

v3.3.2

18 Oct 17:13
c12db75
Compare
Choose a tag to compare

Changed

  • Nothing

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1576 Fixed error when trying to retry visits location from CLI.

Deprecated

  • Nothing

v3.3.1

30 Sep 15:43
5b9a1e1
Compare
Choose a tag to compare

Changed

  • #1474 Added preliminary support for PHP 8.2 during CI workflow.
  • #1551 Moved services related to geolocating visits to the Visit\Geolocation namespace.
  • #1550 Reorganized main namespaces from Core module.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1556 Fixed trailing slash not working when enabling multi-segment slugs.

Deprecated

  • Nothing

v3.3.0

18 Sep 17:40
c8acb5d
Compare
Choose a tag to compare

Changed

  • #1339 Added new test suite for CLI E2E tests.
  • #1503 Drastically improved build time in GitHub Actions, by optimizing parallelization and adding php extensions cache.
  • #1525 Migrated to custom doctrine CLI entry point.
  • #1492 Migrated to immutable options objects, mapped with cuyz/valinor.

Added

  • #1221 Added experimental support to run Shlink with RoadRunner instead of openswoole.

  • #1531 and #1090 Added support for trailing slashes in short URLs.

  • #1406 Added new REST API version 3.

    When making requests to the REST API with /rest/v3/... and an error occurs, all error types will be different, with the next correlation:

    • INVALID_ARGUMENT -> https://shlink.io/api/error/invalid-data
    • INVALID_SHORT_URL_DELETION -> https://shlink.io/api/error/invalid-short-url-deletion
    • DOMAIN_NOT_FOUND -> https://shlink.io/api/error/domain-not-found
    • FORBIDDEN_OPERATION -> https://shlink.io/api/error/forbidden-tag-operation
    • INVALID_URL -> https://shlink.io/api/error/invalid-url
    • INVALID_SLUG -> https://shlink.io/api/error/non-unique-slug
    • INVALID_SHORTCODE -> https://shlink.io/api/error/short-url-not-found
    • TAG_CONFLICT -> https://shlink.io/api/error/tag-conflict
    • TAG_NOT_FOUND -> https://shlink.io/api/error/tag-not-found
    • MERCURE_NOT_CONFIGURED -> https://shlink.io/api/error/mercure-not-configured
    • INVALID_AUTHORIZATION -> https://shlink.io/api/error/missing-authentication
    • INVALID_API_KEY -> https://shlink.io/api/error/invalid-api-key

    If you make a request to the API with v2 or v1, the old error types will be returned, until Shlink 4 is released, when only the new ones will be used.

    Non-error responses are not affected.

  • #1513 Added publishing of the docker image in GHCR.

  • #1114 Added support to provide an initial API key via INITIAL_API_KEY env var, when running Shlink with openswoole or RoadRunner.

    Also, the installer tool now allows to generate an initial API key that can be copy-pasted (this tool is run interactively), in case you use php-fpm or you don't want to use env vars.

  • #1528 Added support to delay when the GeoLite2 DB file is downloaded in docker images, speeding up its startup time.

    In order to do it, pass SKIP_INITIAL_GEOLITE_DOWNLOAD=true when creating the container.

Removed

  • Nothing

Fixed

  • Nothing

Deprecated

  • Nothing

v3.2.1

08 Aug 17:54
28b9cd0
Compare
Choose a tag to compare

Changed

  • #1495 Centralized how routes are configured to support multi-segment slugs.
  • #1497 Updated to latest shlink dependencies with support for PHP 8.1 only.

Added

  • Nothing

Removed

  • Nothing

Fixed

  • #1499 Fixed loading of config options as env vars, which was making all default configurations to be loaded unless env vars were explicitly provided.

Deprecated

  • Nothing