🧩 What is this project?
Rahoot is a straightforward and open-source clone of the Kahoot! platform, allowing users to host it on their own server for smaller events.
⚠️ This project is still under development, please report any bugs or suggestions in the issues
⚙️ Prerequisites
Choose one of the following deployment methods:
Without Docker
- Node.js : version 20 or higher
- PNPM : Learn more about here
With Docker
- Docker and Docker Compose
📖 Getting Started
Choose your deployment method:
🐳 Using Docker (Recommended)
Using Docker Compose (recommended): You can find the docker compose configuration in the repository: docker-compose.yml
docker compose up -d
Or using Docker directly:
docker run -d \
-p 3000:3000 \
-p 3001:3001 \
-v ./config:/app/config \
-e WEB_ORIGIN=http://localhost:3000 \
-e SOCKET_URL=http://localhost:3001 \
ralex91/rahoot:latest
Configuration Volume:
The -v ./config:/app/config option mounts a local config folder to persist your game settings and quizzes. This allows you to:
- Edit your configuration files directly on your host machine
- Keep your settings when updating the container
- Easily backup your quizzes and game configuration
The folder will be created automatically on first run with an example quiz to get you started.
The application will be available at:
- Web Interface: http://localhost:3000
- WebSocket Server: ws://localhost:3001
🛠️ Without Docker
- Clone the repository:
git clone https://github.com/Ralex91/Rahoot.git
cd ./Rahoot
- Install dependencies:
pnpm install
-
Change the environment variables in the
.envfile -
Build and start the application:
# Development mode
pnpm run dev
# Production mode
pnpm run build
pnpm start
⚙️ Configuration
The configuration is split into two main parts:
1. Game Configuration (config/game.json)
Main game settings:
{
"managerPassword": "PASSWORD",
"music": true
}
Options:
managerPassword: The master password for accessing the manager interfacemusic: Enable/disable game music
2. Quiz Configuration (config/quizz/*.json)
Create your quiz files in the config/quizz/ directory. You can have multiple quiz files and select which one to use when starting a game.
Example quiz configuration (config/quizz/example.json):
{
"subject": "Example Quiz",
"questions": [
{
"question": "What is the correct answer?",
"answers": ["No", "Yes", "No", "No"],
"image": "https://images.unsplash.com/....",
"media": { "type": "audio", "url": "https://example.com/song.mp3" },
"solution": 1,
"cooldown": 5,
"time": 15
}
]
}
Quiz Options:
subject: Title/topic of the quizquestions: Array of question objects containing:question: The question textanswers: Array of possible answers (2-4 options)image: Optional URL for question image (legacy; usemediafor new content)media: Optional media attachment{ "type": "image" | "audio" | "video" | "youtube", "url": "<link>" }. Examples:{"type":"audio","url":"https://.../clip.mp3"}{"type":"video","url":"https://.../clip.mp4"}{"type":"youtube","url":"https://youtu.be/dQw4w9WgXcQ"}
solution: Index of correct answer (0-based)cooldown: Time in seconds before showing the questiontime: Time in seconds allowed to answer
Tip: You can now create and edit quizzes directly from the Manager UI (login at /manager and click “Manage”).
🎮 How to Play
- Access the manager interface at http://localhost:3000/manager
- Enter the manager password (defined in quiz config)
- Share the game URL (http://localhost:3000) and room code with participants
- Wait for players to join
- Click the start button to begin the game
📝 Contributing
- Fork the repository
- Create a new branch (e.g.,
feat/my-feature) - Make your changes
- Create a pull request
- Wait for review and merge
For bug reports or feature requests, please create an issue.


