Quiz Maker

Build multiple choice and true or false quizzes, shuffle them, take them with instant scoring, and retry only the ones you missed. Everything stays local.

🌐 Español

Select a quiz on the left, or create a new one.

🔒 Private by design: everything runs locally in your browser and never uploaded to any server.

Build it, take it, then retake what you missed

A quiz tool that only builds quizzes is half a tool. The useful loop is build, take, see what you got wrong, and go again on just those questions, which is how anybody actually revises.

All three parts live here. You create a quiz, add multiple choice or true and false questions, take it with instant scoring, and then generate a fresh quiz from only the questions you missed.

Everything is stored in your browser and nothing is uploaded. That has one obvious consequence, which is that the export exists for a reason: your quizzes live on this device and nowhere else.

Building and taking a quiz

  1. Create a quiz and give it a name. Several quizzes can exist side by side.
  2. Add a question. Choose Multiple choice or true and false, type the prompt, and fill in the options.
  3. For multiple choice, use + Add option to go beyond the four you start with, up to six. Mark the correct one with its radio button.
  4. Click + Add question to save it into the quiz.
  5. Tick Shuffle questions and Shuffle answers if you want a different order each time.
  6. Click the take-this-quiz button, which stays disabled until the quiz has at least one question.
  7. Answer, submit, and read your score. Then generate a retry quiz from the ones you missed.
  8. Use the export dropdown to save as CSV or JSON, or the import button to load a file.

Adding questions is deliberately quick, because a quiz you did not finish making is worth nothing.

The bug this deliberately does not have

Shuffling answer options is the feature that breaks scoring in an enormous number of quiz implementations, and the cause is always the same.

The naive approach stores which option is correct by its position, so the third one in the list. Shuffle the list and the third one is now a different option, while the stored answer still says three. Every shuffled question is then marked against the wrong thing, and the failure is quiet because the quiz still produces a plausible score.

Here each option carries its own stable identity, and the question records the identity of the correct one. Shuffling reorders a display list and touches nothing else, so scoring compares identities and is completely unaffected by presentation order. The same holds for shuffling the questions themselves.

The shuffle itself is a Fisher-Yates, which produces every possible ordering with equal probability. The tempting alternative of sorting with a random comparator is not a shuffle at all: it is measurably biased and its behaviour depends on the sorting implementation, which is why it is avoided here and the implementation is shared with the flashcard tool rather than written a third time.

Scoring, including the awkward cases

Three situations are handled explicitly rather than accidentally.

An unanswered question scores as incorrect. The comparison requires a real selection before it checks anything, so a missing answer can never coincide with a correct option identity and score by accident.

A quiz with no questions scores zero out of zero at zero percent, rather than dividing by nothing and reporting a non-number. It is an unlikely state, since the start button is disabled for an empty quiz, but it is handled anyway.

And correctness is always identity based, never positional, which is what makes the shuffle safe.

The percentage is rounded to a whole number, and the per-question results are kept so the retry set can be built from them.

Retrying only what you missed

After scoring, the questions you got wrong or left blank can be pulled into a new quiz of their own.

Each question is carried across unchanged, keeping its options and its correct answer, so it scores identically in the new quiz. Nothing is rephrased or regenerated. The new quiz is named after the original with a marker showing it is the missed subset.

A perfect attempt would produce an empty set, so the retry button is simply disabled once your score is full marks. It is the same treatment the start button gets for an empty quiz, and it beats launching a quiz with no questions, which would be a confusing reward for getting everything right.

Import, export and where things live

CSV and JSON both work in both directions. The CSV handling reuses this site’s existing writing and parsing rather than a second implementation, which matters because a question prompt containing a comma or a quotation mark is common and is exactly what naive CSV code gets wrong.

Storage is a list of independent quizzes in this browser’s local storage. There is no sync and no account. Export a quiz you care about, particularly before clearing browsing data.

Flashcard Maker is the companion for plain recall rather than multiple choice, and the two share their shuffle implementation. Times Tables Practice covers arithmetic drilling for younger students.

For a classroom, Team Generator splits a list into groups, Bingo Card Generator makes a set of unique cards, and Certificate Maker handles what comes after the quiz. Word Unscrambler is the vocabulary equivalent. The rest is on the generators hub.

See it in action

Screenshot of the Quiz Maker tool with an empty quiz list offering to create the first quiz, with the editor waiting on the right for one to be selected
Quiz Maker mid-process: an empty quiz list offering to create the first quiz, with the editor waiting on the right for one to be selected.
Screenshot of the Quiz Maker result screen showing a new quiz open in the editor, ready for its title and first question
The finished result: a new quiz open in the editor, ready for its title and first question. The download link is a local blob URL — the file never leaves your device.

Frequently asked questions

Does shuffling the answers break the scoring?

No, and this is the classic bug it deliberately avoids. Each option carries a stable identity, and correctness is checked against the identity of the option you selected rather than against its position in the list. Shuffling only changes the display order, so a shuffled question scores exactly as a fixed one does.

Is the question shuffle genuinely unbiased?

It uses a proper Fisher-Yates shuffle, which produces every ordering with equal probability. The tempting one-line alternative of sorting with a random comparator is not a real shuffle, is measurably biased, and can behave unpredictably depending on the sorting implementation. The shuffle here is shared with the flashcard tool rather than reimplemented.

What happens to questions I leave unanswered?

They score as incorrect. An answer that is missing can never accidentally match a correct option, because the check requires a real selection before it compares anything. Unanswered questions also count as missed, so they appear in the retry set alongside the ones you got wrong.

What does the retry mode do?

Builds a new quiz containing only the questions you got wrong or left blank, keeping each question's own options and correct answer unchanged so it scores identically. A perfect attempt would produce an empty set, so the button that starts the retry is disabled once you score full marks rather than launching a quiz with no questions in it.

How many options can a multiple choice question have?

Between two and six, starting at four. True or false questions are a separate type with a fixed pair of options carrying stable identities, which is what lets an imported file target them directly rather than by position.

What formats can I import and export?

CSV and JSON, both ways. The CSV writing and reading both reuse this site's existing, already-tested handling rather than a second implementation, so a question containing a comma or a quotation mark survives the round trip. Exporting is the way to back a quiz up or move it to another device.

Where are my quizzes stored?

In this browser's local storage on this device, as a list of independent quizzes each holding its own questions. Nothing is uploaded and there is no account, which is exactly why the export exists. Clearing site data removes everything, so export anything you would be annoyed to lose.

Is a zero question quiz handled properly?

Yes, it scores zero out of zero with a percentage of zero rather than producing an arithmetic error from dividing by nothing. The button that starts a quiz is also disabled while a quiz has no questions, so you have to try quite hard to reach that state.

Related tools