Self-Hosting LittleLink Server with Docker
What Is LittleLink Server?
LittleLink Server is a self-hosted link-in-bio page — a single page that lists links to your social profiles, projects, and content. It’s a Linktree replacement built on the LittleLink template, wrapped in a Node.js server, and configured entirely through environment variables.
No database. No persistent volumes. No admin panel. You define your page in docker-compose.yml, run docker compose up -d, and you’re done. The 63 MB Docker image starts in seconds.
Official site: github.com/techno-tim/littlelink-server
Prerequisites
- A Linux server (Ubuntu 22.04+ recommended)
- Docker and Docker Compose installed (guide)
- 100 MB of free disk space
- 64 MB of RAM
- A domain name (optional, for custom URL like
links.yourdomain.com)
Docker Compose Configuration
Create a docker-compose.yml file:
services:
littlelink:
image: ghcr.io/techno-tim/littlelink-server:latest # No versioned Docker tags published — :latest is the only option
container_name: littlelink
ports:
- "8080:3000"
environment:
# Page metadata
- META_TITLE=Your Name - Links
- META_DESCRIPTION=All my links in one place
- META_AUTHOR=Your Name
- LANG=en
# Profile
- NAME=Your Name
- BIO=Developer | Writer | Self-Hoster
- AVATAR_URL=https://your-avatar-url.com/avatar.jpg
- AVATAR_2X_URL=https://your-avatar-url.com/avatar@2x.jpg
- FAVICON_URL=https://your-avatar-url.com/favicon.png
# Appearance
- THEME=Dark
- FOOTER=© 2026 Your Name
# Social links — add your URLs, remove any you don't use
- GITHUB=https://github.com/yourusername
- TWITTER=https://twitter.com/yourusername
- YOUTUBE=https://youtube.com/@yourchannel
- MASTODON=https://mastodon.social/@you
- BLUESKY=https://bsky.app/profile/you.bsky.social
- LINKEDIN=https://linkedin.com/in/yourusername
- DISCORD=https://discord.gg/yourinvite
- EMAIL=mailto:you@example.com
- WEBSITE=https://yourdomain.com
# Button order — controls which buttons appear and in what order
- BUTTON_ORDER=GITHUB,TWITTER,YOUTUBE,MASTODON,BLUESKY,LINKEDIN,DISCORD,EMAIL,WEBSITE
- BUTTON_TARGET=_blank
# Analytics (optional — uncomment one)
# - GA_TRACKING_ID=G-XXXXXXXXXX
# - UMAMI_WEBSITE_ID=your-umami-id
restart: unless-stopped
Start the container:
docker compose up -d
Your link page is live at http://your-server-ip:8080.
Configuration
LittleLink Server has no config files or admin panel. Everything is an environment variable in your Compose file.
Supported Platforms
LittleLink Server includes button presets for 100+ platforms. Set the environment variable to your profile URL to enable a button:
| Variable | Platform | Variable | Platform |
|---|---|---|---|
GITHUB | GitHub | MASTODON | Mastodon |
TWITTER | X/Twitter | BLUESKY | Bluesky |
YOUTUBE | YouTube | TWITCH | Twitch |
DISCORD | Discord | REDDIT | |
LINKEDIN | INSTAGRAM | ||
TIKTOK | TikTok | SPOTIFY | Spotify |
PATREON | Patreon | KO_FI | Ko-fi |
PAYPAL | PayPal | EMAIL | |
STEAM | Steam | WEBSITE | Custom website |
For the full list, see the LittleLink Server README.
Custom Buttons
Add custom buttons with numbered variables:
environment:
- CUSTOM_BUTTON_TEXT_ONE=My Blog
- CUSTOM_BUTTON_URL_ONE=https://blog.example.com
- CUSTOM_BUTTON_COLOR_ONE=#333333
- CUSTOM_BUTTON_TEXT_COLOR_ONE=#ffffff
- CUSTOM_BUTTON_ICON_ONE=fas fa-blog
You can add multiple custom buttons using _ONE, _TWO, _THREE, etc.
Analytics Integration
LittleLink Server supports three self-hosted analytics platforms. Uncomment the one you use:
environment:
# Google Analytics
- GA_TRACKING_ID=G-XXXXXXXXXX
# Umami (self-hosted)
- UMAMI_WEBSITE_ID=your-website-id
# Matomo (self-hosted)
- MATOMO_URL=https://matomo.example.com
- MATOMO_SITE_ID=1
See our guides: Self-Host Umami | Self-Host Matomo
Themes
Two built-in themes:
environment:
- THEME=Dark # Dark background, light text (default)
# - THEME=Light # Light background, dark text
Reverse Proxy
To serve your link page on a custom domain (e.g., links.yourdomain.com), set up a reverse proxy pointing to port 8080.
With Nginx Proxy Manager, create a proxy host with:
- Domain:
links.yourdomain.com - Scheme:
http - Forward IP: your server’s IP
- Forward Port:
8080 - SSL: Request a new Let’s Encrypt certificate
For other reverse proxy options: Reverse Proxy Setup
Backup
LittleLink Server is stateless — there’s nothing to back up. Your entire link page is defined in docker-compose.yml. If the container is destroyed, docker compose up -d recreates it identically.
Keep your docker-compose.yml in version control (Git) and you have automatic backup and history.
For your broader backup strategy: Backup Strategy
Troubleshooting
Buttons not appearing
Symptom: You set a platform URL but no button shows up.
Fix: The platform must be listed in BUTTON_ORDER. If BUTTON_ORDER is set, only platforms listed there will appear, regardless of whether their URL is set. Either add the platform to BUTTON_ORDER or remove the BUTTON_ORDER variable entirely to show all buttons with URLs.
Avatar not loading
Symptom: The page shows a broken image where the avatar should be.
Fix: AVATAR_URL must be an absolute URL accessible from the internet, not a local file path. If you don’t have a hosted image, remove the AVATAR_URL variable to use the default placeholder.
Container healthy but page blank
Symptom: Port 8080 responds but the page is empty.
Fix: Check that at least one platform URL is set and NAME is defined. The page needs a minimum of one button and a name to render.
Resource Requirements
- RAM: ~50 MB
- CPU: Negligible — serves static content
- Disk: 63 MB (Docker image, amd64)
- Network: Minimal bandwidth — single page with no media
This is one of the lightest Docker containers you can run.
Verdict
LittleLink Server is the simplest self-hosted link page. The “everything as environment variables” approach means zero maintenance — no database migrations, no updates to apply, no volumes to back up. For a personal profile page that changes a few times a year, this is exactly the right level of complexity.
If you need a web admin panel, multi-user support, or custom themes, use LinkStack instead. If you want stateless simplicity and are comfortable editing a Compose file, LittleLink Server is the better choice.
FAQ
Can I use a custom CSS file or theme beyond Dark/Light?
Not natively. LittleLink Server only supports THEME=Dark and THEME=Light via environment variables. For fully custom themes, CSS overrides, and template editing, use LinkStack instead — it has a web admin panel with theme support.
Does LittleLink Server support multiple users or pages?
No. Each container serves a single link page. To create separate pages for different people, run multiple containers on different ports. Since each instance is stateless and uses ~50 MB of RAM, running several is trivial.
Why does the Docker image only have a :latest tag?
The project doesn’t publish versioned Docker tags. The :latest tag is the only option. This is documented in the Compose file comment. Pin by digest (@sha256:...) if you need reproducible deployments, but for a stateless link page this rarely matters.
Can I add a custom favicon?
Yes. Set the FAVICON_URL environment variable to a publicly accessible URL of your favicon image. The image must be hosted somewhere accessible from the internet — local file paths won’t work.
How do I change the button order?
Set the BUTTON_ORDER environment variable to a comma-separated list of platform names in your desired order: BUTTON_ORDER=GITHUB,YOUTUBE,TWITTER. Only platforms listed in BUTTON_ORDER will appear. Remove the variable entirely to show all buttons with URLs set in default order.
Is there an admin panel to edit links without touching Docker Compose?
No. LittleLink Server is configured entirely through environment variables — there’s no web UI for editing. Every change requires updating the Compose file and recreating the container. If you want browser-based editing, use LinkStack which has a full admin panel.
Related
Get self-hosting tips in your inbox
Get the Docker Compose configs, hardware picks, and setup shortcuts we don't put in articles. Weekly. No spam.
Comments