selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

fli.so logo

Self-host fli.so

v1.0.1

Self-hosted URL shortener with custom branding and analytics

ReleaseOpen SourceAGPL-3.0
Updatedlast year
LanguageSvelte
Setup difficultyModerate
Stars
499
Ports
3000 (SvelteKit application), 8090 (PocketBase admin and API)
Requires
PocketBase
Install with Docker Compose
fli.so screenshot 1fli.so screenshot 2fli.so screenshot 3fli.so screenshot 4

What is fli.so?

Fli.so is a self-hosted URL shortener built with SvelteKit 2.0 and PocketBase. It provides a clean interface for creating custom branded short links with full control over link previews (meta tags), instant QR code generation, smart tag organization, password protection, and expiry dates. The app includes keyboard shortcuts for power users. It runs via Docker Compose with two services: a SvelteKit frontend on port 3000 and PocketBase (SQLite) on port 8090. The self-hosted edition is free with unlimited URLs, while a hosted Pro tier adds custom domains. Licensed under AGPL-3.0.

Should you self-host fli.so?

fli.so scores 46/100 on selfhost.directory (how scoring works) and ranks #13 of 23 in URL Shortener. It has 499 GitHub stars.

There was no stable release in the past 12 months, so check the repository's recent activity before you rely on it.

Setup is moderate: expect some configuration beyond a single command. It is AGPL-3.0-licensed and written mostly in Svelte.

Its closest alternative on selfhost.directory is dub-links (74/100, 24 961 stars). It scores higher overall, so compare the two before you pick. See fli.so vs dub-links side by side.

Features

  • Analytics
  • Custom domainsSelf-hosted edition includes unlimited custom domains
  • Custom URLs
  • Keyboard Shortcuts
  • Link Expiry
  • Meta Controls
  • Password Protection
  • QR codes
  • REST API
  • Smart Tags

fli.so README

How to install fli.so

Install fli.so with Docker Compose

Docker and Docker Compose

version: "3.8"

services: pocketbase: image: ghcr.io/muchobien/pocketbase:0.22.27 container_name: pocketbase restart: unless-stopped ports: - "8090:8090" volumes: - ./pocketbase/pb_data:/pb_data - ./pocketbase/pb_public:/pb_public - ./pocketbase/pb_hooks:/pb_hooks networks: - app_network environment: - ORIGIN=http://localhost:3000 # Allow CORS requests from SvelteKit during development

sveltekit-app: build: context: . dockerfile: Dockerfile container_name: sveltekit-app ports: - "3000:3000" depends_on: - pocketbase env_file: - .env environment: - PUBLIC_POCKETBASE_URL=http://pocketbase:8090 # Use Docker network service name - PUBLIC_APPLICATION_NAME=${PUBLIC_APPLICATION_NAME} - PUBLIC_APPLICATION_URL=${PUBLIC_APPLICATION_URL} - ENCRYPTION=${ENCRYPTION} - POCKETBASE_ADMIN_EMAIL=${POCKETBASE_ADMIN_EMAIL} - POCKETBASE_ADMIN_PASSWORD=${POCKETBASE_ADMIN_PASSWORD} - METADATA_SCRAPER_URL=${METADATA_SCRAPER_URL} - HASH_ALGORITHM=${HASH_ALGORITHM} - HASH_KEY=${HASH_KEY} - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY} - STRIPE_WEBHOOK_SECRET=${STRIPE_WEBHOOK_SECRET} - STRIPE_PRO_PRICE_ID=${STRIPE_PRO_PRICE_ID} - STRIPE_ENTERPRISE_PRICE_ID=${STRIPE_ENTERPRISE_PRICE_ID} - PUBLIC_SITE_URL=${PUBLIC_SITE_URL} - STRIPE_PRODUCT_ID=${STRIPE_PRODUCT_ID} - ORIGIN=http://localhost:3000 networks: - app_network volumes: - .:/app - /app/node_modules

networks: app_network: driver: bridge

Requires .env file with all environment variables configured

More in Link Management

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…