Skip to content

Latest commit

Β 

History

146 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


Stop paying $15/mo for Linktree. LinkBreeze gives you links, analytics, QR codes, themes, and a real admin panel β€” free, forever, in one Docker command.

πŸ”— Live Demo β€” see the public page in action.

πŸ” Demo Dashboard β€” see the dashboard with all features (read-only).

✨ Features

  • πŸ”— Link Management β€” Add, reorder, and customize unlimited links with drag-and-drop
  • 🌐 Multi-Page Support β€” Create unlimited pages, each with its own slug, theme, links, analytics, SEO, and QR code
  • 🎨 Auto-Favicon Links β€” Links automatically show the target site's favicon β€” no manual icon uploads needed
  • πŸ“₯ Migration Wizard β€” Import existing links and social profiles from Linktree, Bento, Hopp.bio, LittleLink, or any HTML/JSON export
  • πŸ–ΌοΈ Link Thumbnails β€” Add images to your links for visual preview cards
  • 🎡 Embed Widgets β€” Embed YouTube, Spotify, SoundCloud, Vimeo, or Bandcamp directly on your page
  • ⏰ Link Scheduling β€” Schedule links to appear/disappear automatically with date/time controls
  • πŸ“Š Privacy-Respecting Analytics β€” Views, clicks, referrers, device type. Cookieless by design. Visitor IPs are hashed with a daily-rotating salt, never stored. Data older than 90 days is pruned automatically by default (Settings β†’ Data; set 0 to keep everything).
  • πŸ“ˆ External Analytics β€” Inject Plausible, Umami, Matomo, or Google Analytics with one paste
  • πŸ”” Update Notifications β€” Dashboard banner notifies you when a new version is available (no phone-home, no auto-update)
  • 🎨 Themes β€” 11 built-in presets (Aurora, Glassmorphism, Neon Cyberpunk, Editorial Paper, Terminal Mono, Pastel Soft, Brutalist, Retro Sunset, Minimal Light, 8-Bit Retro, Frutiger Aero) + full customizer with CSS token system (colors, 15 fonts + custom font upload, 8 background types, 8 card styles, layout controls, effects) + theme duplicate/import/export
  • ✏️ Custom CSS β€” Fine-tune your page with raw CSS injection
  • πŸ“§ Email Capture β€” Collect subscriber emails on your public page, export to CSV
  • πŸ“± Mobile-First β€” Gorgeous on every screen. Loads in under 300ms. Zero client-side JS bundles.
  • 🎯 QR Codes β€” Auto-generated for your page. Download as SVG or PNG. Customize colors, embed your avatar or favicon in the center, export up to 1024 px for print.
  • πŸ”’ Self-Hosted β€” Your data, your server. No third-party trackers. No ads. No subscription.
  • 🐳 One-Command Deploy β€” Docker compose and you're live

πŸš€ Quick Start

One command β€” zero config β€” live in 30 seconds:

curl -fsSL https://raw.githubusercontent.com/Manak-hash/LinkBreeze/main/scripts/install.sh | bash

The script detects Docker or Podman, pulls the image, starts the container, and optionally sets up a systemd service for auto-start on boot. Want auto-start on boot? Run it with sudo bash instead and answer y when prompted.

Don't like piping to bash?
curl -fsSL https://raw.githubusercontent.com/Manak-hash/LinkBreeze/main/scripts/install.sh -o install.sh
less install.sh
bash install.sh

Then open http://localhost:3000 β€” the setup wizard takes under 30 seconds.

Prefer a different method? Expand one below:

🐳  Docker

No Node.js, no npm, no config files needed. Multi-arch images: linux/amd64 and linux/arm64 (Raspberry Pi 3/4/5, Apple Silicon, ARM VPS).

Linux / macOS / Windows CMD:

docker run -d --name linkbreeze --restart unless-stopped -p 3000:3000 -v linkbreeze-data:/app/data ghcr.io/manak-hash/linkbreeze:latest

Windows PowerShell β€” use backticks for line breaks:

docker run -d `
  --name linkbreeze `
  --restart unless-stopped `
  -p 3000:3000 `
  -v linkbreeze-data:/app/data `
  ghcr.io/manak-hash/linkbreeze:latest

Database migrations run automatically on container startup β€” no manual drizzle-kit migrate needed for Docker deployments.

🧩  Docker Compose

Best if you want to customize ports, add a reverse proxy, or manage updates easily.

Option A β€” Pull the pre-built image:

Create a docker-compose.yml:

services:
  linkbreeze:
    image: ghcr.io/manak-hash/linkbreeze:latest
    ports:
      - "3000:3000"
    volumes:
      - linkbreeze-data:/app/data
    restart: unless-stopped

volumes:
  linkbreeze-data:
docker compose up -d

Option B β€” Build from source:

git clone https://github.com/Manak-hash/LinkBreeze.git
cd LinkBreeze
docker compose up -d --build

Upgrade anytime: docker compose pull && docker compose up -d

Logs: docker compose logs -f linkbreeze

☁️  Coolify

Running Coolify on your VPS?

  1. + New Resource β†’ Docker Compose Empty
  2. Paste:
services:
  linkbreeze:
    image: ghcr.io/manak-hash/linkbreeze:latest
    ports:
      - "3000:3000"
    volumes:
      - linkbreeze-data:/app/data
    restart: unless-stopped

volumes:
  linkbreeze-data:
  1. Set a domain (e.g., links.yourdomain.com) for automatic SSL
  2. Click Deploy β€” Coolify handles Let's Encrypt automatically
πŸ“¦ Β Synology NAS

Running Synology DiskStation with Container Manager (DSM 7.2+)?

  1. Open Container Manager β†’ Container β†’ Create
  2. Image: ghcr.io/manak-hash/linkbreeze:latest (pull it first via Image β†’ Add if not found)
  3. Container settings:
    • Name: linkbreeze
    • Port: Local 3000 β†’ Container 3000
    • Volume: Create /docker/linkbreeze/data and map to /app/data
    • Restart policy: Unless stopped
  4. Click Done β€” live at http://<nas-ip>:3000

Update later: pull the latest image, stop and recreate the container. Data persists in the volume.

πŸ”§ Β Podman

Using Podman instead of Docker (RHEL, Fedora, CentOS)? Replace docker with podman:

podman run -d --name linkbreeze --restart unless-stopped -p 3000:3000 -v linkbreeze-data:/app/data ghcr.io/manak-hash/linkbreeze:latest

If you get permission errors on the volume, create it first: podman volume create linkbreeze-data

For systemd integration with rootless Podman: podman generate systemd after starting the container.

The one-line install script at the top of this section detects Podman automatically.

πŸ–₯️ Β Portainer

Using Portainer to manage containers? Deploy as a Stack.

  1. Go to your environment β†’ Stacks β†’ Add stack
  2. Name it linkbreeze and paste:
services:
  linkbreeze:
    image: ghcr.io/manak-hash/linkbreeze:latest
    ports:
      - "3000:3000"
    volumes:
      - linkbreeze-data:/app/data
    restart: unless-stopped

volumes:
  linkbreeze-data:
  1. Click Deploy the stack

Update: Stacks β†’ linkbreeze β†’ Editor β†’ click Pull and redeploy.

πŸ”¨ Β Manual (without Docker)

Requires Node.js 18+.

git clone https://github.com/Manak-hash/LinkBreeze.git
cd LinkBreeze

npm install

cp .env.example .env
# Edit .env to set your SECRET_KEY and DATABASE_PATH if needed

npm run db:migrate
npm run dev

For production: npm run build && npm start

🌐 Making Your Page Public

LinkBreeze runs on your server. Once deployed, your page is accessible to anyone at https://your-domain.com/your-slug. Here's how to get it online:

Quick start: Point your domain

  1. Point your domain's A record to your server IP
  2. Expose port 3000 or add a reverse proxy
  3. Done β€” your page is live at https://your-domain.com/your-slug

Advanced deployment scenarios

For production setups β€” reverse proxies with automatic TLS, zero-trust tunnels, Kubernetes, scheduled backups β€” see the examples/ directory. Each example is a single, self-contained file with a header comment explaining when to use it.

Quick reference: which example for which scenario?
What you want Use this file
Automatic TLS without manual config docker-compose.caddy.yml or docker-compose.https-portal.yml
Automatic TLS with a dashboard (Traefik) docker-compose.traefik.yml
Expose without opening ports (zero-trust) docker-compose.cloudflare-tunnel.yml
You already use Nginx + Certbot docker-compose.nginx.yml
Scheduled SQLite backups docker-compose.with-backup.yml
Running on Kubernetes cluster kubernetes.yaml

Option 1: Reverse Proxy with Your Domain

Point your domain's A record to your server IP, then use a reverse proxy with automatic HTTPS:

Caddy (recommended β€” auto HTTPS)
links.example.com {
    reverse_proxy localhost:3000
}

For a complete Docker Compose setup with Caddy, see examples/docker-compose.caddy.yml.

nginx
server {
    server_name links.example.com;
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

For a complete Docker Compose setup with Nginx, see examples/docker-compose.nginx.yml.

Option 2: Cloudflare Tunnel (no open ports)

No domain purchase or port forwarding needed:

cloudflared tunnel --url http://localhost:3000

For a complete Docker Compose setup with Cloudflare Tunnel, see examples/docker-compose.cloudflare-tunnel.yml.

πŸ“Έ Screenshots

Click to expand
Public Page Admin Dashboard
Public Page [Aurora Theme] Admin Dashboard
Links Profile
Links Page Profile Page
Theme Live Preview Pane
Theme Page Live Preview Pane
Settings [General] Settings [Appearance]
Settings Page [General Tab] Settings Page [Appearance Tab]
Settings [Security] Settings [Data]
Settings Page [Security Tab] Settings Page [Data Tab]

πŸ†š Comparison

Feature Linktree LinkStack LittleLink Shako LinkBreeze
Price $15/mo Free Free Free Free
Admin Panel βœ… Slow ❌ ❌ βœ… Fast
Multi-Page βœ… (paid) ❌ ❌ ❌ βœ…
Auto-Favicon Links ❌ ❌ ❌ ❌ βœ…
Migration Wizard ❌ ❌ ❌ ❌ βœ…
Database Theirs MySQL None None SQLite
Built-in Analytics Paid Basic ❌ ❌ βœ… Full
External Analytics βœ… βœ… ❌ ❌ βœ…
Email Capture Paid ❌ ❌ ❌ βœ…
Embed Widgets Paid ❌ ❌ ❌ βœ…
Link Thumbnails βœ… ❌ ❌ ❌ βœ…
QR Codes βœ… βœ… ❌ ❌ βœ…
Link Scheduling Paid ❌ ❌ ❌ βœ…
Themes Paid Limited CSS only Config βœ… Full Token System + Import/Export
Custom CSS ❌ ❌ βœ… ❌ βœ…
Self-Hosted ❌ βœ… βœ… βœ… βœ…
Language Closed PHP HTML Astro TypeScript
Docker Deploy N/A Complex Simple Simple One command
Page Load ~2-3s ~1-2s Fast Fast <300ms
License Closed AGPL MIT GPL MIT

πŸ› οΈ Tech Stack

Layer Technology
Framework Next.js 16 (App Router, Server Components, ISR)
Database SQLite via better-sqlite3 (WAL mode)
ORM Drizzle ORM (type-safe, zero overhead)
Auth Cookie-based HMAC sessions, bcrypt
UI shadcn/ui + Tailwind CSS 4
Drag & Drop dnd-kit
Charts Recharts
QR Codes qrcode (server-side SVG/PNG)
Validation Zod
Icons Lucide + custom social SVGs

πŸ“– Documentation

βš™οΈ Configuration

All configuration is via environment variables (.env):

Variable Default Description
PORT 3000 Server port
DATABASE_PATH ./data/linkbreeze.db SQLite database file path
SECRET_KEY Auto-generated HMAC signing key for sessions
EXTRA_SCRIPT_SRC (empty) Space-separated analytics domains for CSP (e.g. plausible.io umami.is)

Using external analytics (Plausible, Umami, Matomo, Google Analytics):

The built-in analytics covers views, clicks, referrers, and device type with no setup needed. If you want to add a third-party analytics provider, paste your <script> snippet into Settings -> Integration -> Analytics script, then add the provider's domain to EXTRA_SCRIPT_SRC so CSP allows it to load:

EXTRA_SCRIPT_SRC=plausible.io umami.is

Rebuild after changing this variable (CSP is baked into the build).

Runtime settings (page slug, title, SEO, theme) are managed via the admin dashboard and stored in the database β€” no code changes needed.

🎨 Theme System

11 presets are included out of the box: Aurora (animated flagship), Glassmorphism, Neon Cyberpunk, Editorial Paper, Terminal Mono, Pastel Soft, Brutalist, Retro Sunset, Minimal Light, 8-Bit Retro, and Frutiger Aero (glossy mid-2000s water-and-air look β€” gel bubble buttons, frosted glass cards, a bubbles video background with an aqua gradient fallback, and the Nunito font).

The theme engine uses a CSS custom property (--lb-*) token system β€” every color, radius, shadow, and font is a token consumed by the public page components. The customizer gives you full control over:

  • Background β€” 8 types (solid, gradient, radial, mesh, aurora, animated gradient, image, pattern) with angle, overlay, and opacity controls
  • Colors β€” accent, secondary, text, muted text, card background, card border (hex or rgba)
  • Typography β€” 15 curated Google Fonts (Inter, Poppins, Playfair Display, JetBrains Mono, Space Grotesk, DM Sans, Lora, Bebas Neue, Sora, Outfit, Nunito, Montserrat, Caveat, Pacifico, Abril Fatface), font scale, weight, letter spacing β€” plus your own: upload any woff2/woff (max 2 MB) in the Typography tab and pick it like a bundled font. Uploaded fonts are served same-origin, embedded in theme export files, and carried through backups. Deleting one resets themes using it to Inter (with a confirmation listing the affected themes).
  • Card style β€” 7 link styles (pill, rounded, sharp, glass, outline, neon, pixel), hover effects, button size, corner radius, border width, shadow strength
  • Layout β€” container width, alignment (left/center/right), density (compact/normal/relaxed)
  • Effects β€” glow with custom color, glass blur, noise texture, reveal animation
  • Duplicate β€” clone any theme (preset or custom) as a new editable copy

All changes apply with zero client-side JS bundles β€” the public page ships no React runtime and renders as pure server-side HTML. (mailto/tel/social links use a tiny inline onclick beacon for best-effort click tracking; http/https links use the JS-free /go/:id redirect.)

πŸ’¬ Community

🀝 Contributing

Contributions are welcome! See CONTRIBUTING.md for guidelines.

πŸ“œ License

MIT β€” do whatever you want. See LICENSE.

🏒 About

Built by Manak-hash Β· An OmniRise project.

About

The self-hosted Linktree alternative. Import from any competitor in 30 seconds. Multi-page, privacy-respecting analytics, one-line install.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

230 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages