DSLF
Your links, on your own box.
Damn Small Link Forwarder is a self-hosted link shortener and link-index page. The configuration is a CSV file. There is no database, no dashboard and no account, because a redirect does not need any of them.
redirects.csv pick one
url,target,status
on the wire
GET /gh HTTP/1.1
301 Moved Permanently
location: https://github.com/you
content-length: 0GET /blog HTTP/1.1
301 Moved Permanently
location: https://yourblog.com
content-length: 0GET /promo HTTP/1.1
302 Found
location: https://you.com/offer
content-length: 0rust ·5 MB binary·under 10 MB resident·0 databases·amd64 and arm64
Run it
The image ships with example configuration, so it starts before you have written anything of your own.
docker run -p 3000:3000 \
-v $(pwd)/redirects.csv:/app/redirects.csv \
ghcr.io/vpetersson/dslf:latest
Write one row per link: the path, where it goes, and 301 or 302. Mount the file at
runtime, or bake it into an image. Then point a domain at it. Any host that can run a
container will do, because it is one process listening on one port.
The second file, if you want it
redirects.csv is the only file you need. Add link-index.yaml and the root path
serves a link-index page instead of a 404.
profile:
name: "Your Name"
bio: "Short line about you"
theme:
preset: mocha # mocha | macchiato | frappe | latte
buttonStyle: glass # glass | solid | outline
Both files can be mounted at runtime, so changing a link is a file edit and a restart rather than a deploy.
What you get
Real redirects
Proper 301 and 302 responses with a Location header, so curl, scripts and link checkers follow them the way browsers do.
No database
Configuration is a CSV file and an optional YAML file. Nothing to migrate, back up, or wake up for at 3am.
No tracking
No analytics, no cookies, no third-party requests. Visitors are redirected and that is the end of it.
A link-index page
An optional landing page in place of a hosted link-in-bio service, themed with Catppuccin.
Import what you have
Pull your existing short links out of Rebrandly with a single command.
Published with an SBOM
Every release publishes a software bill of materials, so what is inside the image is a matter of record.
Apache-2.0 licensed, built in Rust.
Source,
issues,
and images at ghcr.io/vpetersson/dslf.