5.3k stars · MIT · v5.1.6 (2026-09-06)
The short link in the YouTube description, and the only honest answer to 'did that video do anything?'
▶Repo detailsthe review · specs · pros & cons · install
What it is
A self-hosted URL shortener running on your own domain, with a REST API, per-link visit statistics, tags, UTM handling and built-in QR-code generation. One PHP container plus a database, and a separate web UI if you want one.
Why it matters
Your YouTube channel and your website currently have no measurable relationship. You publish a tutorial, some people watch it, some number of visits arrive, and there is no way to connect the two. Dub (Ed.1 #2) was the answer offered on 21 August and it has sat untouched for two weeks, which is itself information: self-hosting a large Next.js application is not the shape of thing you will do on a Tuesday. Shlink is the shape you will. go.yourdomain/ru-map-01 in the description of every video, a QR code on the end card, and a stats endpoint that tells you which videos send people and which merely get watched. That is the number that turns the channel from a hobby into a channel with a job.
- MIT and mature at v5.x, with a real release cadence — the least risky attribution tool in the ledger.
- REST API means n8n or Claude Code can mint a tagged link per video automatically, so you never hand-make one.
- QR codes are built in, which matters for end cards and for slides in a Slidev deck (Ed.5 #4).
- PHP/Symfony — a stack you do not otherwise run, so its upgrades are a separate chore from everything else on the box.
- The admin UI is a second project (
shlink-web-client) you also host; the core is API and CLI only. - A short-link domain needs its own DNS and TLS, and needs guarding — an open shortener gets abused and then blocklisted, which would take your links down mid-campaign.
Pull visit data via the REST API into research.db beside the yt-dlp (Ed.6 #4) video metadata, and "video → clicks → signups" becomes a single SQL join.
Docker on the Hetzner box behind its own short subdomain, pointed at a database.