Turn any gathering into a trivia battle. Players scan, questions fly, everyone competes. No app needed.
Get Started • How to Play • Question Packs
Quizify is an open-source trivia quiz game for Home Assistant — a multiplayer party game that runs entirely on your local network.
A question appears. Everyone races to answer. Points fly. Streaks build. Champions emerge.
No apps to download. No accounts to create. Just scan a QR code and play.
Zero Friction Entry — Players scan a QR code. That's it. No apps. No accounts. 10 seconds from scan to playing.
Runs Fully Local — No cloud. No subscription. No data leaves your network. Fast, private, reliable.
Everyone Competes — Points, speed bonuses, streaks, power-ups, and a dramatic finale with podium and awards. Real competition, real laughs.
Works on Any Screen — Dashboard mode for the TV. Players use their phones. No extra hardware needed.
Or manually:
HACS → ⋮ Menu → Custom Repositories
→ URL: https://github.com/mholzi/quizify
→ Category: Integration
→ Install "Quizify"
→ Restart Home Assistant
cd /config/custom_components
git clone https://github.com/mholzi/quizify.git quizify
# Restart Home AssistantOr manually:
Settings → Devices & Services → Add Integration → "Quizify"
- Open
/quizify/adminon your device - Select language, category, difficulty, and round count
- Share the QR code or join URL with players
- Enter your name to join as a player (optional)
- Hit
▶️ Spiel starten — the game begins
- Scan the QR code or visit the join URL on your phone
- Enter your name
- Answer questions before the timer runs out
- Watch the live leaderboard after each round
Open /quizify/dashboard on your TV for a shared screen view showing the leaderboard, question, and live player activity.
Base Formula (correct answers only):
Points = (Base + Speed Bonus) × Difficulty × Streak × (×2 if Double Points power-up)
| Component | Value |
|---|---|
| Base points | 10 |
| Speed bonus | up to +5 (linear, decays over time limit) |
| Difficulty multiplier | Easy ×1.0 / Medium ×1.5 / Hard ×2.0 |
| Streak multiplier | +10% per correct answer in a row, max +50% at 5× |
| Wrong / timeout | 0 pts, streak resets |
Example: Medium question, instant answer, 3× streak:
(10 + 5) × 1.5 × 1.3 = **29 pts**
| Difficulty | Time |
|---|---|
| Easy | 20s |
| Medium | 15s |
| Hard | 10s |
One random player receives a random power-up at the start of each round. Use it during the question phase — power-ups are consumed immediately.
| Power-Up | Effect |
|---|---|
| 🃏 Joker | Removes one wrong answer (25% → 33% chance of guessing right) |
| ✌️ Double Points | This round's points count double |
| 🥶 Freeze | Pauses an opponent's timer for 5 seconds |
| ⏱️ Time Boost | Adds +5 seconds to your own timer |
| 🥷 Steal | Takes 50% of a target player's current round points |
Freeze and Steal require selecting a target player — only available with 2+ players.
Quizify ships with 300 questions across 6 categories in two languages:
| Category | Language | Questions |
|---|---|---|
| Geographie | 🇩🇪 DE | 50 |
| Tiere & Natur | 🇩🇪 DE | 50 |
| Popkultur | 🇩🇪 DE | 50 |
| Geography | 🇬🇧 EN | 50 |
| Animals & Nature | 🇬🇧 EN | 50 |
| Pop Culture | 🇬🇧 EN | 50 |
The language selector in the admin UI filters both the category chips and the question pool — no mixing of languages mid-game.
Question packs are simple JSON files stored in custom_components/quizify/questions/:
{
"name": "Science",
"language": "en",
"version": "1.0",
"questions": [
{
"id": "sci_001",
"question": "What is the speed of light?",
"answers": [
{"text": "299,792 km/s", "correct": true},
{"text": "150,000 km/s", "correct": false},
{"text": "500,000 km/s", "correct": false}
],
"difficulty": "medium",
"fun_fact": "Light takes about 8 minutes to travel from the Sun to Earth.",
"category": "Science"
}
]
}Rules:
- Exactly 3 answers per question
- Exactly 1 correct answer
difficulty:easy,medium, orhardlanguage:de,en, or any ISO code- File goes in the
questions/directory — picked up automatically on next game start
Quizify includes a built-in analytics dashboard at /quizify/analytics:
- Total games played
- Average players per game
- Top players by cumulative score
- Category breakdown with average scores
- Games-over-time chart (7d / 30d / 90d / all)
- Recent game history
Data is stored locally in config/quizify/analytics.json with a 90-day retention window.
Quizify runs on Home Assistant's HTTP server — no extra ports needed.
| Protocol | Port | Purpose |
|---|---|---|
| HTTP/HTTPS | 8123 (default) | Game UI, API, static assets |
| WebSocket | 8123 (same port) | Real-time game sync |
If players are on a separate WiFi/VLAN, add a single firewall rule:
Guest VLAN → HA IP : TCP 8123
⚠️ Fritzbox users: The Fritzbox guest WiFi fully isolates clients from your home network — players must be on the main WiFi, or use a VLAN-capable router with selective LAN access.
How many players can join?
Tested with 20+ players. Your WiFi is the only real constraint.
Can someone join mid-game?
Yes! Late joiners inherit the current average score so they can compete fairly from round one.
What if a player disconnects?
Players can reconnect using the session token stored in their browser. The game continues for everyone else and the reconnected player picks up from the current state.
Can the admin also play?
Yes! Click "Als Spieler beitreten" / "Join as Player" in the lobby. You'll see answer buttons inline and compete alongside other players, while retaining admin controls.
What languages are supported?
German (🇩🇪) and English (🇬🇧) question packs are included. The language selector in admin filters question packs automatically.
- Language selector in admin UI — 🇩🇪 Deutsch / 🇬🇧 English chip toggle in Game Settings
- Category chips filter automatically based on selected language; resets to Mixed on language switch
- Language passed in
start_gameWebSocket payload
- 150 English questions across 3 new categories: Geography, Pop Culture, Animals & Nature (50 each)
- Backend
QuestionBanknow stores and filters by language from pack metadata start_gameandresetaccept alanguageparameter; default remainsde
- Base points: 1000 → 10
- Max speed bonus: 500 → 5
- Cleaner, more readable scores for a party game context
- Fixed correct answers showing as +0 pts in the all_answers reveal card —
player.submitted(a bool) was incorrectly used as an answer index instead ofplayer.current_answer - Added guard against double round evaluation (race condition between timer tick and
all_submitted)
- Full CSS rework for player.html: responsive layout, mobile-first, dark theme consistency
- Version badge displayed bottom-right on admin.html and player.html
- All CSS/JS assets stamped with
?v=x.x.xfor reliable cache invalidation scripts/bump_version.shadded for future version bumps
- Emotion text (NAILED IT! / Wrong! / Too slow!) with random variants
- Correct answer hero display with cyan glow
- Personal result card with full score breakdown (base, speed, streak, difficulty)
round_score,correct, bonuses included in leaderboard payload
speed_bonus,streak_bonus,difficulty_multipliernow stored onPlayerSessionafter scoring- Breakdown included in
all_answerspayload and shown on reveal cards
- Per-player reveal cards with left accent bar, sorted by round score
- Replaces the plain table from v1.0.7
- Backend already sent
all_answersin round_summary — frontend now renders it - Admin reveal shows player name, chosen answer, ✅/❌/⏱️, and points
- Fixed
is_adminflag beingfalsewhen question first rendered for admin-as-player - Stores last question payload, re-renders on
joinedevent confirmation
- Hid correct answer from admin during
QUESTION_ACTIVEphase - Added answer buttons to admin game view so admin can play inline
- "End Game" hidden during question phase, shown again on reveal
- WebSocket-based multiplayer trivia game
- 150 German questions across 3 categories
- Timer-based scoring with speed bonuses, streaks, and difficulty multipliers
- 5 power-ups: Joker, Double Points, Freeze, Time Boost, Steal
- Reconnect support with session tokens
- Admin dashboard with QR code, player list, and game controls
- Player mobile UI with emoji avatar picker
- Leaderboard with delta arrows and sort animation
- Score counter animation and floating points popups
- Collapsible leaderboard on reveal (collapsed by default)
- Rematch button on finale screen
- Dashboard / TV mode at
/quizify/dashboard - Analytics tracking at
/quizify/analytics
- Home Assistant 2024.1+
- HACS (recommended) or manual installation
Home Assistant
└── Quizify Integration
├── Game State Manager (game/state.py)
├── WebSocket Handler (server/websocket.py)
├── Question Bank (game/questions.py)
├── Power-Up Manager (game/powerups.py)
├── Analytics Service (analytics.py)
└── Web UI (Admin + Player + Dashboard)
- Native Home Assistant integration — no extra services
- WebSocket-based real-time sync for all clients
- Local processing — no cloud required
- Session token reconnect for mid-game drops
- Up to 20 concurrent players
Contributions welcome! Bug fixes, new question packs, translations, or features — all appreciated.
Quick start: Fork → Branch → PR.
See open issues for ideas and good first issues for easy starting points.
MIT License. See LICENSE for details.
The next trivia battle is one QR scan away.
The open-source trivia quiz for Home Assistant. Built for fun.
Made with ❤️ for the Home Assistant community