Deployments on 1.0.31 or earlier cannot take an image update without changing their compose file and .env, and nothing in the repo said so. Document the migration from the two-container setup to the single flashpoint-web image, the environment variables added, removed, and changed since 1.0.31, and per-version release notes for 1.0.32-1.0.36. Link it from the README and both documentation indexes.
Flashpoint Web
A modern web interface for the Flashpoint Archive
Browse and play 200,000+ preserved Flash games and animations directly in your browser.
What is Flashpoint Web?
Flashpoint Web is a self-hosted web application for accessing your local Flashpoint Archive collection. It provides a modern, browser-based alternative to the Flashpoint Launcher with multi-user support, play tracking, and an intuitive interface.
Key Features
- Browse & Search - Fast search across 200,000+ games with advanced filtering by platform, developer, tags, and more
- Downloaded View - A dedicated page and filter for games whose data is already on disk, so a curated collection is one click away
- Play in Browser - Flash games via Ruffle emulator, HTML5 games natively
- Multi-User Support - Individual accounts with role-based permissions (admin, moderator, user, guest)
- Play Tracking - Track playtime, completion status, and view play statistics
- Playlists & Favorites - Organize your game collection with custom playlists
- 22 Theme Palettes - Customizable dark/light modes with multiple color schemes
- Responsive Design - Works on desktop and mobile devices
- Database Hot-Reload - Automatically syncs when Flashpoint Launcher updates metadata
Getting Started
Prerequisites
- Docker and Docker Compose
- Flashpoint Archive installed locally
1. Create a project directory
mkdir flashpoint-web && cd flashpoint-web
2. Create docker-compose.yml
services:
flashpoint-web:
image: darkraise/flashpoint-web:${IMAGE_TAG:-latest}
container_name: flashpoint-web
restart: unless-stopped
ports:
- "${WEB_PORT:-80}:3100"
volumes:
- ${FLASHPOINT_HOST_PATH:?FLASHPOINT_HOST_PATH is required}:/data/flashpoint
- ${DATA_PATH:-./data}:/app/data
- ${LOGS_PATH:-./logs}:/app/logs
environment:
- PUID=${PUID:-1000}
- PGID=${PGID:-1000}
- NODE_ENV=production
- TZ=${TZ:-UTC}
- DOMAIN=${DOMAIN:-http://localhost:${WEB_PORT:-80}}
- LOG_LEVEL=${LOG_LEVEL:-info}
- JWT_SECRET=${JWT_SECRET:?JWT_SECRET is required}
- ENABLE_LOCAL_DB_COPY=${ENABLE_LOCAL_DB_COPY:-false}
- SQLITE_CACHE_SIZE=${SQLITE_CACHE_SIZE:--64000}
- SQLITE_MMAP_SIZE=${SQLITE_MMAP_SIZE:-268435456}
- ENABLE_CACHE_PREWARM=${ENABLE_CACHE_PREWARM:-true}
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:3100/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
The Flashpoint directory is mounted read-write: the app records which games are
downloaded in flashpoint.sqlite and saves downloaded game data under
Data/Games. Mount it read-only and browsing still works, but downloads and the
Downloaded page do not.
3. Create .env
Two values are required. This is a complete, working .env:
FLASHPOINT_HOST_PATH=/srv/Flashpoint
JWT_SECRET=paste-the-output-of-openssl-rand-hex-32-here
Generate the secret with openssl rand -hex 32. Everything else has a working
default; add only what you need:
# WEB_PORT=8080 # Host port for the app (UI + API) (default: 80)
# PUID=1000 # Host user ID (Linux — run 'id -u')
# PGID=1000 # Host group ID (Linux — run 'id -g')
# LOG_LEVEL=info # debug, info, warn, error
# TZ=UTC # Timezone
# DATA_PATH=./data # Persistent app data
# LOGS_PATH=./logs # Log files
# Extra allowed origins, comma-separated. Not needed for a normal install:
# same-origin requests are always allowed. Set this only when the UI is served
# from a different origin, or behind a proxy that rewrites the Host header.
# DOMAIN=http://192.168.0.10,https://flashpoint.example.com
# Database performance (network storage / large collections)
# ENABLE_LOCAL_DB_COPY=false # Copy flashpoint.sqlite to local storage
# SQLITE_CACHE_SIZE=-64000 # SQLite cache in KB (64MB default)
# SQLITE_MMAP_SIZE=268435456 # Memory-mapped I/O in bytes (256MB default)
# ENABLE_CACHE_PREWARM=true # Pre-warm common queries on startup
4. Start it
docker compose up -d
Open http://localhost in your browser. The first user to register automatically becomes the admin.
A single container serves both the UI and the API on one port — WEB_PORT on
the host, 3100 inside the container.
Common Commands
docker compose up -d # Start
docker compose down # Stop
docker compose logs -f # Follow logs
docker compose restart # Restart
docker compose pull && docker compose up -d # Update to the latest image
Upgrading
Routine updates need nothing beyond
docker compose pull && docker compose up -d.
Coming from 1.0.31 or earlier? That update is breaking. The separate
flashpoint-backend and flashpoint-frontend containers were replaced in
1.0.32 by a single darkraise/flashpoint-web image that serves the UI and the
API on one port, and the old images are no longer published. Existing
deployments need a new docker-compose.yml, the removal of API_PORT,
BACKEND_HOST, and BACKEND_PORT from .env, and a reverse proxy pointing at
one upstream instead of two. Accounts, playlists, and play history are
preserved.
Full migration steps, every environment variable added, removed, or changed, and per-version release notes are in the Upgrade Guide.
Documentation
For architecture details, API reference, development setup, contributing guidelines, and more, visit the Wiki.
Related Projects
- Flashpoint Archive - The game preservation project
- Flashpoint Launcher - Official desktop launcher
- Ruffle - Flash Player emulator
License
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
Acknowledgments
- Flashpoint Team - For preserving web gaming history
- Ruffle Contributors - For making Flash playable in modern browsers
- Community - For testing, feedback, and contributions