Skip to content

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

255 stars

Watchers

2 watching

Forks

Latest commit

Β 

History

196 Commits

Folders and files

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

Repository files navigation


Stop paying $15/mo for Linktree. LinkBreeze is a free, self-hosted link hub: fast, customizable, with built-in analytics. Install in one command.


✨ Features

πŸ”— Multi-Page Support
Unlimited pages, each with its own slug, theme, links and analytics
🎨 Themes + Customizer
11 presets plus a full token-based customizer with import/export
πŸ“Š Privacy-first Analytics
Views, clicks, referrers, devices. Cookieless, IPs hashed, auto-pruned
🧭 Migration Wizard
Import from Linktree, Bento, Hopp.bio, LittleLink or any HTML/JSON export
πŸ”’ Self-Hosted
Your data, your server. No trackers, no ads, no subscription
🐳 One-Command Install
One curl command. Auto-detects Docker or Podman and you are live
πŸ“± Embed Widgets
YouTube, Spotify, SoundCloud, Vimeo and Bandcamp on your page
🎯 QR Codes
Auto-generated, custom colors, avatar or favicon center, SVG/PNG up to 1024px

⚑ Zero client-side JavaScript. Loads in under 300ms. Pure server-rendered HTML.

✨  All features
  • πŸ”— Link Management - Add, reorder and customize unlimited links with drag-and-drop
  • 🌐 Auto-Favicon Links - Links automatically show the target site's favicon, no icon uploads needed
  • πŸ–ΌοΈ Link Thumbnails - Add images to your links for visual preview cards
  • ⏰ Link Scheduling - Schedule links to appear or disappear automatically with date/time controls
  • 🏷️ Custom Redirect Slugs - Stable, shareable /go/your-name short links that survive delete-and-recreate
  • πŸ“ˆ External Analytics - Inject Plausible, Umami, Matomo or Google Analytics with one paste
  • πŸ–ΌοΈ Social Preview (OG) Images - Share cards auto-rendered from your page's theme, or upload your own with fit, position and zoom control
  • ✏️ Custom CSS - Fine-tune your page with raw CSS injection
  • πŸ“§ Email Capture - Collect subscriber emails on your public page, export to CSV
  • πŸ”” Update Notifications - Dashboard banner when a new version is available. No phone-home, no auto-update
  • πŸ”‘ Fast Admin Panel - Everything above from one clean, instant dashboard

πŸš€ Quick Start

One command. Zero config. Live in 30 seconds:

curl -fsSL https://linkbreeze.omnirise.dev/install.sh | bash

The script detects Docker or Podman, pulls the image and starts the container. Run it with sudo bash and answer y to also enable auto-start on boot.

Then open http://localhost:3000 - the setup wizard takes under 30 seconds.

πŸ” Β Want to inspect the script before running it?
curl -fsSL https://linkbreeze.omnirise.dev/install.sh -o install.sh
less install.sh
bash install.sh

Prefer a different method? Expand one below.

🐳  Docker

No Node.js, no npm, no config files. 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 docker.io/omnirise/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 `
  docker.io/omnirise/linkbreeze:latest

Database migrations run automatically on container startup.

🧩  Docker Compose

Create a docker-compose.yml:

services:
  linkbreeze:
    image: docker.io/omnirise/linkbreeze:latest
    ports:
      - "3000:3000"
    volumes:
      - linkbreeze-data:/app/data
    restart: unless-stopped

volumes:
  linkbreeze-data:
docker compose up -d

Upgrade: docker compose pull && docker compose up -d Β· Logs: docker compose logs -f linkbreeze

Prefer building from source? git clone https://github.com/Manak-hash/LinkBreeze.git && cd LinkBreeze && docker compose up -d --build

☁️  Coolify
  1. + New Resource β†’ Docker Compose Empty
  2. Paste the compose file from the section above
  3. Set a domain (e.g. links.yourdomain.com) - Coolify handles Let's Encrypt automatically
  4. Click Deploy
πŸ“¦ Β Synology NAS

Container Manager (DSM 7.2+):

  1. Pull the image docker.io/omnirise/linkbreeze:latest (Image β†’ Add, if not found)
  2. Create a container: name linkbreeze, port 3000 β†’ 3000, volume /docker/linkbreeze/data β†’ /app/data, restart policy Unless stopped
  3. Click Done - live at http://<nas-ip>:3000

Data persists in the volume across image updates.

πŸ”§ Β Podman
podman run -d --name linkbreeze --restart unless-stopped -p 3000:3000 -v linkbreeze-data:/app/data docker.io/omnirise/linkbreeze:latest

Permission errors on the volume? Run podman volume create linkbreeze-data first. The install script at the top detects Podman automatically.

πŸ–₯️ Β Portainer
  1. Stacks β†’ Add stack, name it linkbreeze
  2. Paste the compose file from the Docker Compose section above
  3. Click Deploy the stack

Updates: Stacks β†’ linkbreeze β†’ Editor β†’ 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

🌍  Go live on your domain

Once deployed, your page is at https://your-domain.com/your-slug.

  1. Point your domain's A record to your server IP
  2. Expose port 3000 or put a reverse proxy in front
  3. Done

Ready-made compose files live in examples/ - one self-contained file per scenario:

What you want Use this file
Automatic TLS, no manual config docker-compose.caddy.yml or docker-compose.https-portal.yml
Automatic TLS with a dashboard (Traefik) docker-compose.traefik.yml
No open ports (zero-trust) docker-compose.cloudflare-tunnel.yml
You already use Nginx + Certbot docker-compose.nginx.yml
Scheduled backups from the UI (no sidecar) Built in - enable in Settings -> Data
Scheduled SQLite backups (raw dump sidecar, S3 offsite) docker-compose.with-backup.yml
Running on Kubernetes kubernetes.yaml

Caddy (recommended - auto HTTPS):

links.example.com {
    reverse_proxy localhost:3000
}

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;
    }
}

Cloudflare Tunnel (no open ports, no domain purchase needed):

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

πŸ“Έ 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 Free - $35/mo Free Free Free Free
Admin Panel βœ… βœ… ❌ ❌ βœ… Fast
Multi-Page ❌ ❌ ❌ ❌ βœ… Unlimited
Auto-Favicon Links ❌ ❌ ❌ ❌ βœ…
Migration Wizard ❌ ❌ ❌ ❌ βœ…
Built-in Analytics Basic, full is paid Basic ❌ ❌ βœ… Full & private
Email Capture Paid ❌ ❌ ❌ βœ…
Embed Widgets Partial ❌ ❌ ❌ βœ…
Link Scheduling Paid ❌ ❌ ❌ βœ…
Themes Paid Limited CSS only Config file βœ… Full token system
QR Codes βœ… βœ… ❌ ❌ βœ… Customizable
Self-Hosted ❌ βœ… βœ… βœ… βœ…
Page Load Hosted PHP app Fast (static) Fast (static) <300ms, zero JS

πŸ’¬ Community

Get help, show off your page, vote on what ships next.

Discord

βš™οΈ Configuration

All configuration is via environment variables. .env.example is the canonical reference - copy it and every variable is documented inline, including the wallet blocks.

Variable Default Description
PORT 3000 Server port
DATABASE_PATH ./data/linkbreeze.db SQLite database file path
BACKUP_DIR ./data/backups Scheduled-backup storage directory (keep inside the persistent ./data volume)
BACKUP_MIN_FREE_MB 50 Skip writing backups when free space drops below this
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)
πŸ’³ Β Wallet pass variables (Google Wallet / Apple Wallet)
Variable Description
GOOGLE_WALLET_ISSUER_ID Numeric issuer ID from the Google Pay & Wallet Console. Enables "Add to Google Wallet" buttons
GOOGLE_WALLET_SERVICE_ACCOUNT_JSON Service-account JSON (client_email + private_key) authorized for the Wallet API
APPLE_WALLET_CERT_PEM Pass Type ID signing certificate (PEM). Enables "Add to Apple Wallet" buttons
APPLE_WALLET_KEY_PEM Private key matching the signing certificate (PEM)
APPLE_WALLET_KEY_PASSPHRASE Passphrase for the signing key, if encrypted
APPLE_WALLET_WWDR_PEM Apple WWDR intermediate certificate (PEM)
APPLE_WALLET_TEAM_ID Your 10-character Apple Team ID
APPLE_WALLET_PASS_TYPE_ID Your Pass Type ID (must start with pass.)

Every public page renders a share block with a "Save contact" button (universal vCard, always on). The wallet buttons light up automatically when the credentials above are configured. Google Wallet: free issuer account, but passes only save for whitelisted test users until Google grants production access. Apple Wallet: requires a paid Apple Developer account and installs from Safari only. Passes are static snapshots - the QR on the pass always opens the live page. Settings β†’ Integration shows per-wallet credential status and warns when the Apple signing certificate is about to expire.

Using external analytics? Paste your provider snippet into Settings β†’ Integration β†’ Analytics script, then add the provider's domain to EXTRA_SCRIPT_SRC so CSP allows it (e.g. EXTRA_SCRIPT_SRC=plausible.io umami.is). Rebuild after changing it - 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.

πŸŽ›οΈ Β What the customizer controls

The theme engine is a CSS custom property (--lb-*) token system - every color, radius, shadow and font on the public page is a token.

  • 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, font scale, weight, letter spacing - or upload your own woff2/woff (max 2 MB). Uploaded fonts are served same-origin, embedded in theme exports and carried through backups
  • 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 / import / export - clone any theme as an editable copy and share it as JSON

πŸ“– Docs & Links

Contributing Β· Security Policy Β· Changelog Β· Troubleshooting Β· Architecture Decisions Β· Configuration reference

Source: GitLab (canonical public mirror, synced automatically) Β· GitHub Β· Image: docker.io/omnirise/linkbreeze

Issues and PRs are welcome on either forge.

🀝 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

255 stars

Watchers

2 watching

Forks

Releases

Packages

Used by

Contributors

Languages