Self-hosting

Run your own live quiz server

Buzrr is open source, so you can run the whole thing — live rooms, 1v1 battles, AI generation — on your own infrastructure, with your own database and your own API keys.

Can Buzrr be self-hosted?

Yes. Buzrr is AGPL-3.0 open source and the repository includes everything needed to run it: a Next.js web app, a NestJS game server, a PostgreSQL schema with migrations, and an optional Python AI service. It needs PostgreSQL, Redis and Google OAuth credentials. Self-hosted instances run with billing off, and every account gets Pro limits.

What is Buzrr?

Buzrr is an open-source quiz platform that runs in the browser. A host builds a multiple-choice quiz — by hand or with AI — and opens a live room; players join from their own phones or laptops with a 6-character code, a link or a QR code, without creating an account. Signed-in users can also play ranked 1v1 quiz battles. Buzrr is licensed under AGPL-3.0, so anyone can read the code or run their own instance.

Why teams self-host

  • Uploaded documents, quizzes and results stay in a database you control.
  • You can put it on a school, university or company network and review the code before you do.
  • You can change it — a different scoring curve, a new question type, your own branding — under the AGPL-3.0 terms.

What you need

Required

  • Node.js 18 or newer (20 LTS recommended). Yarn 4 comes via Corepack.
  • PostgreSQL. Locally, yarn setup starts one in Docker.
  • Redis. The game server keeps live game state there and won't start without it.
  • Google OAuth credentials. Google is the only sign-in method, so without them nobody can log in to host.
  • Somewhere to run a long-lived Node process for the Socket.IO game server — a container or VM host, not a serverless function.

Optional

  • A Gemini API key, to turn on AI quiz generation.
  • Cloudinary credentials, for image questions.
  • Upstash Redis credentials with RATELIMIT=ON, for rate limiting.
  • The Python AI service (apps/ai) with pgvector, for Knowledge Spaces. Without it, that part of the app stays hidden.

Run it locally

From the repository's README. The whole bootstrap is one script.

  1. 1

    Install Docker and Node.js, then clone the repository.

  2. 2

    Run corepack enable, yarn install and yarn setup. Setup starts Postgres and Redis in Docker, writes the .env files with a shared auth secret, and pushes the database schema. It's safe to re-run.

  3. 3

    Add GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET to apps/web/.env (redirect URI: http://localhost:3000/api/auth/callback/google).

  4. 4

    Run yarn dev. The web app is on port 3000 and the API on port 3001.

git clone https://github.com/buzrr/buzrr.git
cd buzrr
corepack enable
yarn install
yarn setup     # Postgres + Redis in Docker, .env files, schema
# add GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET to apps/web/.env
yarn dev       # web :3000, api :3001

Going to production

  • Deploy apps/web to a Node host (the repo's own deployment uses Vercel) and apps/server to a container or VM host such as Render, Railway or Fly.
  • Set BETTER_AUTH_SECRET to the same value on both apps — the web app signs tokens and the server verifies them.
  • Set WEB_ORIGIN on the server to your site's URL. If it's unset, the API accepts any origin.
  • Apply the committed migrations with prisma migrate deploy rather than db push.
  • Seed the 1v1 question pool (yarn workspace @buzrr/prisma seed:duel), or duels will report that there are no questions.

What's different on your own instance

  • No billing: every account gets Pro limits — 250 players per room, unlimited quizzes and 10 AI generations a week. An operator can raise an individual host's room cap in the database (the hostSizeLimit column).
  • AI generation runs on your own Gemini key, so its cost and data handling are between you and Google.
  • Duel questions come from public quizzes approved in the moderation queue. The API can't grant the superadmin role, so give your own account superadmin in the database to manage moderators.
  • Bot opponents in 1v1 matchmaking are on by default; set DUEL_BOTS=OFF to disable them.

Know before you start

  • There's no one-click installer or official Docker image for the web and server apps. The bundled docker-compose file only runs the local databases.
  • Documentation is the README, ARCHITECTURE.md and the docs folder in the repository.
  • Redis is required for all live play and matchmaking. If it goes down, games stop.

Rather not run servers? The hosted version has a free plan.

Related pages

Clone it and run yarn setup

Most of the setup is one script. Questions and bug reports go to GitHub issues.