From blank page to published result
Teachers control the whole lifecycle. Create the pool, choose who can join, start the shared clock, watch the live roster, end the exam and export the result.
Every exam option
Title
The name students see in the waiting room, exam screen and result review.
Time limit
Blank or zero means teacher-controlled. Otherwise the server uses one shared deadline and automatically submits when it expires.
Who can join
Same network restricts entry to allowed public IPs or CIDR ranges. Anyone with the link relies on the code and identity rules.
Registration policy
Allow any registration number, require a fixed-length pattern where * is one character, or provide an exact allow-list.
Disconnect grace
After this many offline seconds, the server adds a warning. Set it to zero to flag the disconnect without adding a warning.
Question delivery
Deal the whole pool or choose counts by topic and marks. Questions marked “Present to all” are included for everyone.
Option order
On by default: every student sees each question’s options in their own random order, so what is A for one is D for the next. Marking is unaffected — answers are recorded against the question, not the position. Turn it off if a question uses options like “All of the above”.
Negative marking
Off by default. When on, 1 mark is deducted for every X wrong answers, with X your choice. Whole marks only, a paper never goes below zero, and only questions the student actually answered count — a blank costs nothing, so the rule discourages guessing instead of encouraging it. Students are told the rule before they start, and the deduction is itemised in their review and in the results CSV.
Retention
Exams, answers, figures and results are automatically deleted after the configured retention period. Export before expiry.
Live time control
Add or remove minutes while the exam is running. The same revised deadline reaches every connected student.
Late joining
Once an exam is live, a completely new student is never admitted automatically. Their request appears above the roster. Check the exact name and registration number, then use Approve, Reject, or Approve all. Duplicate names and registration numbers are rejected before approval.
During and after the exam
Question analysis, and fixing a wrong answer key
Once an exam has ended, its card carries a Question analysis button. It opens a page with one block per question showing exactly what the class answered: how many students chose each option, how many left it blank, and — for typed questions — every distinct answer that was given, most common first. The counts cover the papers that were submitted and not disqualified, which is the same set the marks are computed from.
This is how a mis-keyed question is usually caught: not by re-reading the paper, but by seeing most of the class choose the same “wrong” option. So the fix sits next to the evidence. Each block has Correct answer, which lets you set a different correct option, a different set of options, or a different accepted pattern for a typed answer.
Students see the corrected mark the next time they open their result; anyone still looking at their review sees it update on the spot. If results are being withheld, a correction changes the marks silently and students see nothing until you release them.
Strict by default, recoverable by the teacher
Question answers never need to be trusted to the browser: grading, strikes, identity, session ownership and result access are checked by the server.
Exclusive live session
The accepted socket receives a short-lived in-memory lease. Sensitive exam requests require both the attempt token and that active lease.
Browser binding
The first browser profile is cryptographically bound to the attempt. Another tab cannot replace it, and another browser or device is refused.
Server-authoritative warnings
Warnings and blocks are recorded on the server. Offline incidents are retained locally and synchronized when the connection returns.
Review isolation
After publication, a one-tab capability opens only that student’s assigned paper. It is consumed immediately and remains visible only in that page; names and registration numbers cannot recover it.
If a phone fails and the student needs a laptop
- The student closes the failed phone browser and tells the teacher.
- The teacher finds that student in the roster and chooses Reset device. This revokes the old token, disconnects the old session, and clears any block together with its warnings — one action, nothing else to press.
- The student signs in on the laptop with their registration number. For this one re-entry the name does not have to be punctuated exactly as before, so a student who first typed “Md. Karim” and now types “Md Karim” still gets back in. The laptop becomes the new bound browser.
- Previously autosaved answers return. The shared deadline does not change, so the most recent unsaved keystrokes or time lost during the switch cannot be restored.
Changing a running exam
The full editor closes when an exam starts, because rewriting the question paper would break the papers already handed out. Three changes stay open, from ✎ Edit while live on the exam card.
- Add an IP range — for a student who turns up on a different network. Adding is always safe; narrowing the list while the exam runs can cut off someone mid-paper.
- Add a registration number — for a name missing from the allow-list. Both rules are checked when someone joins, so changing them never affects anyone already writing.
- Add questions — pasted in the same format as the bulk import. Choose every student to put them on every paper still open and on everyone who joins from here on, or the random pool only to leave current papers alone. Students already in the exam see the extra questions appear without reloading. A student who has already submitted keeps the paper they were marked on.
Removing a student from the list
Remove from list in a roster row’s ⋯ menu deletes the attempt entirely — the name, the registration number, the browser binding, the warnings and any answers so far. It is the one action that means they never joined, so their registration number is free again and they can start over. Use it for a student in the wrong exam, a duplicate row from a mistyped number, or your own test join.
- The removed student’s page returns to the join form by itself and says you removed them.
- They join again through the normal route. Before the exam starts, they go straight back onto the roster.
- Once the exam is live, they arrive in the late entry queue and you approve them like any other latecomer — removing someone is never a way to re-admit them silently.
Warning and block rules
- Desktop focus/fullscreen/visibility violations accumulate; three warnings block the attempt.
- On mobile, leaving the browser or app for more than five seconds can block immediately.
- A network loss longer than the configured disconnect grace adds a warning unless the teacher configured flag-only mode.
- Connecting another monitor is checked where the browser supports multi-screen detection.
- System notifications are not required. All enforcement and recovery happens inside QuizCast.
Build one question at a time
Choose Add question when you want the clearest, most visual workflow. Every change appears in the Preview below the question, exactly as students will see it.
- Select the answer type, then write the question and its answers.
- Set marks, topic, sharing and an optional figure.
- Check the live Preview, then add the next question.
Everything you can set
Answer type
Single choice has one correct option. Multiple choice can have several. Text answer grades typed responses with a pattern.
Question text
Write the prompt. It accepts Markdown and KaTeX, so you can add emphasis, lists, tables, code and mathematical notation.
Correct answer
For choices, tick the correct option or options. For text answers, enter a case-insensitive regular expression such as ^(red|crimson)$.
Review answer
Text questions can have a clean answer shown after the exam. This is for display only; the accepted-answer pattern performs the grading.
Marks
Sets the weight of the question. Use a positive whole number. A 3-mark correct answer contributes three times as much raw score as a 1-mark answer.
Topic
Place questions into topics such as Algebra or Networking. Topics can later be used to deal a balanced selection to each student.
Present to all students
Turn this on when every student must receive the question. It still counts toward the relevant delivery bucket.
Figure
Attach a PNG, JPEG, GIF or WebP image up to 4 MB. You can change or remove it before saving the exam.
Answer options
Choice questions start with four option fields. Empty options are ignored when the question is saved.
Live Preview & remove
Preview verifies the rendered question and options. Remove question deletes that draft card from the pool.
^ and $ to require the whole answer, and escape
special regex characters: \(, \), \..
Example: ^=?sum\(a1:a10\)$ accepts both
SUM(A1:A10) and =SUM(A1:A10).
Create a pool from a .txt file
Bulk import is fastest when you already have many questions. Write ordinary
text in any editor, paste it into Import questions from text,
or upload a UTF-8 .txt file.
- Write one question block after another using the syntax below.
- Choose Preview and fix any reported line.
- Use Add to pool to keep existing questions, or Replace pool to discard the current draft pool.
The smallest valid block
Start with Q:. Put each answer on its own line. An asterisk
* means correct; a hyphen - means incorrect. Blank
lines between blocks are optional but recommended.
Q: Which symbol starts an Excel formula?
* =
- #
- @
What every text marker means
| Write | Meaning | Example |
|---|---|---|
Q: | Starts a single-choice question. | Q: Capital of Japan? |
[single] Q: | Explicit single-choice form; equivalent to Q:. | [single] Q: 2 + 2? |
[multi] Q: | Starts a multiple-choice question. | [multi] Q: Select primes. |
[text] Q: | Starts a typed-answer question. | [text] Q: Symbol for pi? |
* answer | A correct choice. Single-choice needs exactly one; multiple-choice can have several. | * Canberra |
- answer | An incorrect choice. | - Sydney |
= pattern | Accepted regular expression for a text answer. | = ^(pi|π)$ |
answer: | Optional clean answer shown in review for a text question. | answer: π |
marks: | Positive question weight; defaults to 1. | marks: 3 |
topic: | Question topic. topic: none removes it. | topic: Algebra |
all: | yes/true gives it to everyone; no/false does not. | all: yes |
@marks: | Default marks for all following questions until changed. | @marks: 2 |
@topic: | Default topic for all following questions until changed. | @topic: Geometry |
| Continuation line | Extends the current prompt, or the most recent option, with block Markdown or maths. | | Name | Value | |
# or // | A whole comment outside a question block. Inside a prompt, # is a Markdown heading; use // for an unambiguous comment. | // Chapter 2 starts here |
The three question formats
# SINGLE CHOICE — exactly one *
Q: What is the default QuizCast port?
* 3000
- 8080
- 443
# MULTIPLE CHOICE — one or more *
[multi] Q: Which are private IPv4 ranges?
* 10.0.0.0/8
- 8.8.8.8/32
* 192.168.0.0/16
# TEXT ANSWER — regex after =
[text] Q: Which function adds A1:A10?
= ^=?sum\(a1:a10\)$
answer: =SUM(A1:A10)
Marks, topics and defaults
Put marks:, topic: and all: inside one
question to affect only that question. Put @marks: or
@topic: above a group to set a default for everything that
follows. A per-question value overrides the group default. There is no
@all:, which prevents accidentally making a whole file mandatory.
@topic: Geometry
@marks: 2
Q: What is the area of a circle of radius $r$?
* $\pi r^2$
- $2\pi r$
# This question overrides the 2-mark default
Q: What do a triangle's angles sum to?
marks: 1
all: yes
* $180^\circ$
- $360^\circ$
@topic: none
@marks: 1
Complete copyable template
# QuizCast bulk question template
# Outside a question, # or // starts a comment. Use // inside a question.
@topic: General knowledge
@marks: 1
Q: What colour is a clear daytime sky?
* Blue
- Green
- Red
Q: What is the capital of Australia?
marks: 2
* Canberra
- Sydney
- Melbourne
[multi] Q: Which of these are programming languages?
* JavaScript
* Python
- HTML
- CSS
@topic: Mathematics
@marks: 3
[text] Q: Solve for $x$: $2x + 5 = 15$.
= ^5$
answer: 5
Q:, so all formatting shown below—including paragraphs,
headings, lists, quotes, tables, fenced code, display maths, and literal HTML
tags—can be imported directly. Once an answer starts with * or
-, later continuation lines belong to that option. Leave a blank
line after a prompt's hyphen-bulleted list before starting the answer choices,
so the importer can distinguish the list from wrong-answer markers.
Q:
## Use the reference table
| Item | Qty | Price |
|:-----|:---:|------:|
| Pen | 2 | \$3.00 |
| Book | 1 | \$8.00 |
Which expression gives the total?
* `2 * 3 + 1 * 8`
- `2 + 3 + 1 + 8`
Common Preview errors
| Message | How to fix it |
|---|---|
appears before any Q: | Move the first Q: above its answers or metadata. |
needs at least 2 options | Add at least two */- answer lines. |
mark the correct option with * | Change the correct answer's leading - to *. |
single-choice has more than one * | Keep one correct answer or change the header to [multi] Q:. |
text question has no accepted-answer pattern | Add an = regex line. |
invalid regular expression | Check brackets and escape literal parentheses or dots. |
question text is empty | Add prompt text on the Q: line or on continuation lines beneath it. |
Final example: formatted bulk questions
This ready-to-import example uses bold, italic, inline code and maths while keeping every question and option on the lines understood by the bulk parser.
# Formatted questions still use the normal bulk markers.
@topic: Mixed practice
@marks: 2
Q: Solve the **linear equation** $2x + 5 = 15$.
* **$x = 5$**
- $x = 10$
- $x = 20$
[multi] Q: Which are *valid* JavaScript declarations?
* `const total = 10;`
* `let name = "Asha";`
- `number score = 5;`
- `make value = 2;`
[text] Q: Type the chemical formula for **water**, shown as $H_2O$.
= ^h2o$
answer: H2O
Q: Read the [reference note](https://example.com) and choose the value of $\sqrt{81}$.
* **9**
- 8
- 10
Make questions clear and expressive
Question text and choice options support Markdown. Maths is written with LaTeX-style commands and rendered by KaTeX. The examples below show the text you type beside the result students see.
Bold, italic and strikethrough
Wrap text with the matching symbols. You can combine bold and italic.
Use **bold** for key facts.
Use *italic* for emphasis.
Use ***both together***.
Use ~~strikethrough~~ for a correction.
Headings, paragraphs and separators
Use one to four # symbols for headings. Leave a blank line for a
new paragraph. Three hyphens make a horizontal separator. A normal single
line break is also preserved in QuizCast.
## Read the passage
This is the first paragraph.
This is a second paragraph.
---
### Now answer
Bulleted and numbered lists
Use - for bullets and 1. for numbered steps. Indent nested items with spaces.
Consider these conditions:
- The server is online
- The code is correct
- Uppercase is accepted
Then:
1. Join the exam
2. Wait for the teacher
Quotes and links
Start a quote with >. Write a named link as
[label](https://address). A bare web address becomes a link
automatically.
> Knowledge is power.
Read the [course notes](https://example.com/notes).
Or visit https://example.com
Inline code and code snippets
Put one backtick around a short command or variable. Put triple backticks above and below a multi-line code block. A language name after the opening fence is allowed, although syntax colouring is not applied.
What does `total` contain?
```javascript
const price = 25;
const total = price * 4;
console.log(total);
```
Tables
Separate columns with vertical bars. The second row is required; colons set left, centre or right alignment.
| Item | Qty | Price |
|:-----|:---:|------:|
| Pen | 2 | \$3.00 |
| Book | 1 | \$8.00 |
Inline and display maths
Put maths inside single dollar signs to keep it in a sentence. Use double dollar signs on separate lines for a centred display equation.
The roots of $ax^2+bx+c=0$ are:
$$x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}$$
Useful maths commands
| Need | Command | Type this | Students see |
|---|---|---|---|
| Power / subscript | x^2 / a_n | $x^2+a_n$ | |
| Fraction | \frac{top}{bottom} | $\frac{3}{4}$ | |
| Square / nth root | \sqrt{x} / \sqrt[3]{x} | $\sqrt{x^2+y^2}$ | |
| Greek letters | \alpha \beta \theta \pi | $\theta=2\pi$ | |
| Multiply / divide | \times / \div | $6\times4\div2$ | |
| Inequalities | \le \ge \ne \approx | $x\ge 0$ | |
| Sum / product | \sum / \prod | $\sum_{i=1}^{n}i$ | |
| Integral / limit | \int / \lim | $\int_0^1 x^2\,dx$ | |
| Vector | \vec{v} | $\vec{v}=\langle2,3\rangle$ | |
| Text in maths | \text{words} | $P(\text{rain})$ |
Matrices and multi-line equations
Use an environment inside a display-math block. Separate columns with & and rows with \\.
$$
A=\begin{bmatrix}
1 & 2 \\
3 & 4
\end{bmatrix}
$$
$$
\begin{aligned}
2x+5 &= 15 \\
2x &= 10 \\
x &= 5
\end{aligned}
$$
Show Markdown symbols literally
Put a backslash before a Markdown symbol when it should appear as ordinary text. Inline code is another easy way to show syntax literally.
\*This is not italic\*
\# This is not a heading
The symbol is \$5, not maths.
Type `**bold**` to make text bold.
<script> or
custom <div> tags is displayed as text, not executed. Teacher
question content is rendered safely; student-typed answers are never
Markdown-rendered.