Self-hosted music history manager with stats, reports and charts, inspired by maloja.
- 📊 Statistics & Analytics: Track your listening habits with detailed stats
- 📈 Charts & Reports: View yearly, monthly, and all-time reports
- 🎤 Entity Detail Pages: In-depth artist, album, and track pages with stats and charts
- 📅 Timeline: Browse your complete listening history
- 🔄 Multi-source Import: Import from Last.fm and ListenBrainz
- 🚫 Deduplication: Automatic prevention of duplicate scrobbles
- 🐳 Docker Support: Easy deployment with Docker and docker-compose
- ⚡ Lightweight: Minimal dependencies, fast and efficient
- 🗄️ SQLite Database: Simple, portable database storage
- Backend: Rust with Axum web framework
- Database: SQLite with rusqlite
- Frontend: Vanilla HTML/CSS/JavaScript (no frameworks)
- Deployment: Docker & docker-compose
# Development environment
nix develop
# Run directly
nix run
# Build the package
nix build- Create a
.envfile in the project root with your Last.fm API key:
LASTFM_API_KEY=your_lastfm_api_key_here- Start the application:
docker-compose up -dThe application will be available at http://localhost:3000
Note: To enable artist/album images in the UI, you need a Last.fm API key. Get one for free at https://www.last.fm/api/account/create
# Build the application
cargo build --release
# Run the application
cargo run --releaseCreate a .env file in the project root:
# Database configuration
DATABASE_PATH=footprints.db
# Server configuration
PORT=3000
# Logging level
RUST_LOG=footprints=info
# Last.fm API key for artist/album images
# Get your API key at: https://www.last.fm/api/account/create
LASTFM_API_KEY=your_lastfm_api_key_hereImportant: The LASTFM_API_KEY is required to display artist and album images. Without it, the application will still work but will show gradient placeholders instead of images.
-
Access the Web Interface: Open
http://localhost:3000in your browser -
Import Data (One-time):
- Go to the "Import" tab
- For Last.fm: Enter your username and API key (get one at https://www.last.fm/api/account/create)
- For ListenBrainz: Enter your username (token is optional)
- Click import and wait for the process to complete
-
Automatic Sync (Optional):
- Set up automatic sync via the API (see Sync API section below)
- Configure sync interval (default: 60 minutes)
- Sync runs in the background and fetches only new scrobbles
- No duplicates will be created thanks to database constraints
Inspired by maloja - a self-hosted music scrobble database
