About this Truth or Dare generator

A small, fast, dependency-free tool for one job: handing a group a random, safe-for-work truth, dare, or never-have-I-ever statement, with no sign-up, no loading spinner, and nothing recorded beyond your own device.

Why it exists

Truth or Dare and Never Have I Ever are two of the oldest zero-prep party games there are, but most online generators for either one drift into content nobody wants read aloud in a classroom, a family living room, or a work ice-breaker — or they bury the game behind ads and an account wall before showing a single prompt. This page skips all of that: a bundled, hand-written prompt bank, a mode toggle between both games, a category and type filter, and a picker that avoids immediate repeats — nothing more.

How the prompt bank was built

Every prompt was written by hand and assigned to exactly one of four categories — Classic, Silly, Family, and Spotlight — and one of three types: truth, dare, or never-have-I-ever. The bank currently holds 180 prompts: 60 truths, 60 dares, and 60 never-have-I-ever statements, 15 per category in each list.

Content policy. The entire bank is written to be strictly SFW / PG — no sexual, drug-, alcohol-, or violence-related content anywhere, in any category, including dares. That's a hard rule, not a soft guideline: every dare is a self-contained performance or physical challenge that can't put a player or anyone nearby at risk, and every entry was run through an automated word screen for a list of clearly unsafe terms in addition to being written and read by hand. Family and Classic are the two categories written with the largest safety margin, aimed at classrooms and family game nights respectively — but nothing in Silly or Spotlight is meant to need that same margin either.

How the picker works

The bank and the picker are a single, dependency-free JavaScript module (bank.js) with no DOM code in it at all, so it can be — and is — tested outside the browser under plain Node. Selecting Next draws a random prompt from whichever pool is currently active: the game mode (Truth or Dare vs. Never Have I Ever), the type filter within Truth or Dare mode (Random, Truth only, or Dare only), and the category filter, all combined. It then checks the result against the prompt that was just shown. If it's an exact repeat and the pool has more than one prompt, it re-rolls, up to 50 attempts, before falling back — a limit that exists only as a safety valve and is never reached in practice. A pool with exactly one prompt is allowed to show that same prompt again, since there's nothing else to show.

Changing the mode, type, or category rebuilds the pool immediately and draws a fresh prompt from it — it doesn't wait for the next click of Next.

How it was verified

Before shipping, the bank and picker were run against a set of automated checks under Node:

  • Every one of the 180 entries has non-empty text, a recognized type (truth, dare, or never), and a category that exists in the category list.
  • No two entries anywhere in the bank share an id, and no two entries within the same list (truths, dares, or nevers) share identical text.
  • An automated word screen flags zero entries against a list of clearly unsafe terms (sexual, drug-, alcohol-, and violence-related language), on top of the manual authoring pass.
  • Every one of the four categories has exactly 15 entries in each of the three lists.
  • The pool builder returns only never-have-I-ever entries in Never Have I Ever mode regardless of the type filter, only the selected type (truth/dare) when one is chosen in Truth or Dare mode, and truths plus dares combined for "Random" — with the category filter applied correctly in every case.
  • Across 2,000 consecutive draws from the combined Truth-or-Dare pool, the picker never returns the same prompt twice in a row, including with a deliberately biased random source used to stress-test the re-roll logic.
  • A pool with exactly one entry correctly returns that entry even though it matches the "last shown" id — the no-repeat rule only applies when there's an alternative — and an empty pool returns nothing rather than throwing.
  • Over 6,000 draws from a 15-entry category, every prompt in it gets drawn at least once — the randomness isn't silently biased toward a subset.

How the site is built

  • Static HTML, one small stylesheet, two small scripts. No framework, no build step, no bundler.
  • Nothing is fetched after the page loads. The full prompt bank ships inline with the page; picking a prompt, filtering by mode/type/category, and copying text are all local operations.
  • System font stack. Your operating system's UI font, so nothing has to download and nothing shifts as it loads.
  • Dark mode follows your system setting via prefers-color-scheme.

Scope and honesty about limits

This is a fixed, hand-curated prompt bank, not a language model generating new prompts on demand — what you see is what was written ahead of time, nothing more and nothing less. There's no turn tracker or scorekeeping across players, and no way to add a custom prompt from the page itself, which is a deliberate trade for keeping every prompt vetted to the same safety standard. If a prompt ever reads as inappropriate for a setting it's supposed to be safe for, that's a bug in the content, not an edge case the tool is meant to handle at runtime — see contact to report it.