Short.io

short.iocontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

A link shortener on your own domain. You paste a long URL, it hands back a short one, and it counts the clicks — with a dashboard for the links you have made and where the traffic came from.

Promptfree, for everyone, and the only version there is
Build me a branded link service that replaces Short.io: short links on my own domains, several team members, and numbers I can defend.

STACK
- Node 20+ with Fastify, SQLite through better-sqlite3, WAL mode
- Caddy in front with on-demand TLS, so a new branded domain works minutes after its DNS points here
- One process. The redirect must answer in single-digit milliseconds

THE DATA MODEL
- domains: id, host, is_default, verified_at, created_by — many domains, one install
- links: id, domain_id, slug, destination, title, tags_json, created_by, created_at, expires_at, max_clicks, password_hash, is_archived, utm_json
- link_versions: id, link_id, destination, changed_by, changed_at — a destination change is appended, never overwritten
- clicks: id, link_id, created_at, referrer_host, referrer_url, country, device, browser, os, ip_hash, bot, is_unique
- rules: id, link_id, kind, match_value, destination — send iOS here, Germany there, and everybody else to the default
- users, teams, memberships, api_tokens with scopes and a last_used_at
- Unique on (domain_id, slug). A slug is unique per domain, not globally

THE REDIRECT
- One prepared statement, one lookup, one 301 or 302 — permanent links get 301 and the interface warns that a 301 can never be re-pointed for anyone who has already followed it
- Rules evaluated in order: country, device, language, then default. The rule that matched is recorded with the click
- UTM parameters merged into the destination: the link's own tags, overridden by anything already on the destination
- Expired, archived or over its click limit answers 410 with a page that says which
- The click is written after the response has been sent
- Unknown slug: a 404 page on that domain, never a redirect to the homepage

TEAMS
- A link belongs to a team; a person can be in several
- Roles: owner, editor, viewer. A viewer sees numbers and cannot change a destination
- Every change carries who made it, and the link's page shows the history
- API tokens are scoped to a team and can be read-only

BULK WORK, WHICH IS WHY PEOPLE PAY FOR THIS
- Import a CSV of destination, slug, title and tags; report the rows that failed and why, import the rest
- Generate N links from a template with a counter or a random slug
- Bulk edit tags, bulk archive, bulk export
- A public API that does everything the interface does, with real status codes and a Retry-After on rate limits

THE NUMBERS
- Clicks and unique visitors per link, per domain, per tag, per day
- A unique visitor is a distinct salted hash of address and user agent inside the window, and the page says so beside the number
- Referrers with host and full URL, countries from a local database file, devices and browsers as coarse buckets
- Bots recorded with a flag and excluded from published figures — and a switch to see them, because 'was that campaign real' is a question worth answering
- Export any view to CSV; a JSON feed per link

QR CODES
- Generated locally, no third-party service, as SVG and PNG
- The QR encodes the short link, so the destination can change after the poster is printed — say that in the interface, because it is the reason to use one

THE INTERFACE
- A table of links: slug, destination, clicks, created, last click. Sortable, searchable, readable on a phone
- Creating a link is one field and a button; everything else is optional
- Copy button on every row
- Dark and light, one accent

OPERATIONS
- .env: DATABASE_PATH, HASH_SALT, SESSION_SECRET, GEOIP_DB_PATH, BASE_DOMAIN
- Migrations on boot, each once
- Caddy's on-demand TLS restricted to verified domains, or somebody will point their DNS at you and get a certificate
- Nightly backup off the machine, restore script tested
- Health endpoint that resolves one link

WHAT MATTERS MOST
The redirect path and multi-domain TLS. Write the redirect first, load-test it at ten thousand requests, then add the second domain — everything else is a table. A link service that is slow or occasionally wrong destroys the campaigns it was bought to measure.

Give me the repository, migrations, the Caddy configuration for on-demand certificates, .env.example, a seed with two domains, and a README with deploy steps.

What you lose

  • Redirects served from an edge network, so a link opens fast from anywhere in the world
  • Click analytics with country, referrer and device already broken out
  • A team dashboard where somebody who does not deploy code can still make a link
  • Bulk import and a QR code per link, both there from the first minute

If you would rather not build

  • A Cloudflare Worker with a KV namespace, which is about forty lines

What it costs

read from their page 17 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$18/mo—17 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Dub

$0

Link management with analytics and custom domains, self-hostable.

dubinc/dubfree · open source

YOURLS

$0

A PHP shortener that has been running on shared hosting for over a decade.

YOURLS/YOURLSfree · open source

Why this verdict

our own opinion · changed only by a person

86/100

Verdict yes at 86: a redirect table and a counter. The only real risk is the one this entry names — links you have already handed out have to keep working forever, which makes the migration, not the build, the hard part.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 1/day
views0130 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Short.io

answered from the record above

Is Short.io free?

No — the plan we track is $18 a month. Pro at $18/month, the entry paid tier since the Personal plan was retired; Team is $48.

Can you replace Short.io by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 86 out of 100, build time one session. Read what you lose before you decide.

How much does Short.io cost?

$18 a month on Pro — $216 a year. Recorded 17 Aug 2026.

What do you lose by replacing Short.io?

Redirects served from an edge network, so a link opens fast from anywhere in the world; Click analytics with country, referrer and device already broken out; A team dashboard where somebody who does not deploy code can still make a link; Bulk import and a QR code per link, both there from the first minute. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Short.io?

Yes: Dub, YOURLS. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 17 in Social media & links

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc