Short links that count clicks, not people.
Self-hosted. Choose the name, share the link, and see where clicks come from without storing who made them.
Everything a short link needs, nothing about who clicked.
What a click leaves behind
Each visit adds one to a few daily counts and is gone. There is no visit log to leak, export or delete.
Counted per day
- The day
- Referring site, host only
- Country
- Device type
- Browser family
- Operating system family
Never stored
IP addressUser-agent stringFull referrer URLCookiesA row per visit
Small enough to forget it’s running
Popular links are answered from memory, in a fraction of a millisecond.
median, p99 0.01 ms
median first hit, before it’s cached
- Ready after start
- 0.21 s
- existing database; first boot 0.49 s
- Memory at idle
- 9 MB
- physical footprint, macOS arm64 build
- Binary size
- 28 MB
- web app included, macOS arm64 build
- Cookies on a redirect
- none
- visitors are never tagged
Release build on an Apple M1 (macOS arm64), local libSQL file with an existing database, measured over loopback.
302 or 301, chosen per link
Temporary links stay editable. Permanent ones answer 301, and deleting one retires its slug, so a printed link never points somewhere new.
docker run viperadnan/tiinyOne container, nothing else to run
Redirects, the API and this web app are one binary with an embedded libSQL database. Add a Turso primary later for a replicated copy.
- Password
- GitHub
Accounts for a whole team
An admin panel, a sign-up switch and optional daily link limits per user. Without SMTP, the operator resets passwords from the command line.
Self-hosted link shortener that counts clicks, not people. Custom slugs, privacy-friendly stats and an admin panel in one small binary.
- Licence
- MIT
- Version
- 2.0.0
- Built with
- Rust, Svelte
- Runs as
- 1 container
Questions
The day, the referring site’s host, the country, and the device, browser and operating-system family. It never stores IP addresses, raw user-agent strings or full referrer URLs.
Temporary links redirect with 302: you can change the destination or the slug, and every click is counted. Permanent links redirect with 301, so browsers may cache them. They can’t be edited, repeat visits from the same browser aren’t counted, and deleting one retires its slug for good.
Yes. Use 3 to 64 letters, numbers, hyphens or underscores. Slugs are case-sensitive, so /Docs and /docs are different links. Leave it blank and tiiny picks a random seven-character slug.
No. Without SMTP, accounts work straight away and the operator resets passwords from the command line. With SMTP, tiiny sends verification and password-reset links.
No. tiiny is built for a single instance: its redirect cache, rate limiter and click buffer live in memory. One container handles a lot of redirects.