A simple, self-hosted wishlist app for sharing gift ideas with family and friends.
Most wishlist apps are bloated with features you don't need, require accounts for everyone, or lock you into a platform. This app solves a simple problem: you want to share what you'd like as gifts, and your friends and family want to claim items without spoiling the surprise.
Features:
- Simple - No complex features, just wishlists and items
- Easy to Share - Send a single URL, no signups required
- Multiple Purchase Links - Add multiple store links for each item so people can choose where to buy
- Public/Private Wishlists - Keep lists private while you're working on them, then make them public when ready
- No Peeking! - Admins can't see claimed items from the dashboard - you'd have to visit the specific wishlist's public URL to spoil the surprise
- Privacy-Focused - Self-hosted, your data stays with you
- Transparent - Anyone viewing the list can see what's been claimed to avoid duplicates
- Low Maintenance - Single Docker container with SQLite, no database setup needed
- URL Scraping - Auto-fill item details from product URLs (Coming Soon)
# Clone and configure
git clone https://github.com/Reggio-Digital/wishlist
cd wishlist
cp .env.example .env
# Edit .env with your admin credentials
nano .env
# Start with Docker Compose
docker-compose up -dVisit http://localhost:3000
docker run -d \
-p 3000:3000 \
-e PUID=1000 \
-e PGID=1000 \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=your-secure-password \
-v wishlist-data:/app/data \
--name wishlist \
reggiodigital/wishlist:latestFor Unraid users: Set -e PUID=99 -e PGID=100
Data is stored in /app/data:
/app/data/db- SQLite database files/app/data/uploads- Uploaded images
Create a .env file:
# Required - Admin Credentials
ADMIN_USERNAME=admin
ADMIN_PASSWORD=changeme
# Optional - User/Group IDs for docker-compose (defaults to 1000:1000)
# For Unraid, use PUID=99 and PGID=100
PUID=1000
PGID=1000
# Optional - JWT Secret (auto-generated if not provided)
# Generate with: openssl rand -base64 32
SECRET=
# Optional - Cookie Security
# Set to 'false' for HTTP access (e.g., local LAN without HTTPS)
# When unset, auto-detects HTTPS via X-Forwarded-Proto header
COOKIE_SECURE=falseThe container automatically handles file permissions using PUID/PGID environment variables (LinuxServer.io pattern):
- Default:
1000:1000(standard Linux user) - Unraid: Set
PUID=99andPGID=100(nobody:users) - Find your IDs: Run
idon your system
Example for Unraid in .env:
PUID=99
PGID=100The entrypoint script automatically:
- Creates the user/group if needed
- Sets correct ownership on data directories
- Ensures proper file permissions for uploads
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm start/admin/login- Admin authentication/admin- Admin dashboard (manage wishlists and items)/[slug]- Public wishlist view
MIT
Made with ❤️ by Reggio Digital



