Custom-list bingo versus the 1-75 ball game
Hall bingo has a rigid structure. A 5x5 card, numbers 1 to 75, and each column restricted to its own range: B draws from 1 to 15, I from 16 to 30, and so on up to O. That structure exists so a caller can shout “B7” and every player instantly knows which column to check.
Almost none of the bingo that happens in classrooms and living rooms works that way. A teacher reviewing this week’s vocabulary, a baby shower running a “have you ever” icebreaker, a conference organiser making a networking card, a substitute teacher turning whatever is on the whiteboard into twenty usable minutes: all of them want the same mechanic, a randomised grid drawn from a list, and none of them want number ranges. This generator does the second thing and not the first. Items are placed anywhere on the grid with no per-column constraint, because “which column may this word appear in” is a meaningless question for a word list.
What guaranteed-unique costs when the list is short
Most generators shuffle and hope. With a long list that is perfectly fine, since the odds of two identical cards are negligible. With a short list it is not fine at all, and the minimum case shows why. A 3x3 grid with a FREE centre needs eight items, and eight items have 8! = 40,320 possible arrangements. Ask for the full hundred cards out of that pool and the birthday-paradox probability of at least one exact repeat passes ten percent, which is the figure the code itself documents. That is not a rounding error, it is a real risk of two students in the same room holding identical cards and shouting at the same moment.
So each card’s arrangement is checked against every arrangement already produced in the same batch. A collision is thrown away and redrawn, up to 200 attempts. If the pool genuinely cannot support the number of cards you asked for, you are told to add items or ask for fewer, rather than being handed a batch with a silent duplicate hiding in it.
There is a second, subtler benefit once your list is longer than one card needs. Each card is drawn by shuffling the whole list and taking the first items off the top, so different cards can show genuinely different subsets rather than the same words reordered. Exactly twenty-five items for a 5x5 grid means every card holds the same twenty-five words in a new order. Forty items means the cards differ in content too, which makes the game longer and harder to call. If you have the words, provide more than the minimum.
The shuffle itself is Fisher-Yates driven by crypto.getRandomValues rather than Math.random, because a randomised game carries a fairness expectation that a decorative animation does not.
Grid size decides more than the number of squares
Two things follow from the grid you pick, and both catch people out.
The FREE centre space needs a single middle cell. A 3x3 grid has one, and so does a 5x5. A 4x4 grid does not, because its centre falls between four squares that are all equally central. Rather than arbitrarily promote one of the four, the option is disabled and ignored for 4x4. That has a knock-on effect on how long your list must be, which the counter under the text box tracks live: a 4x4 card always needs sixteen items, and asking for a FREE centre will not reduce that to fifteen.
The B-I-N-G-O column letters are likewise a 5x5 convention, five letters over five columns. There is no honest way to stretch them across three or four columns without inventing letters or truncating the word, so only 5x5 gets them. Every size does get a title across the top, which defaults to BINGO if you leave it blank and is where a theme name belongs: “Staff Meeting Bingo”, “Unit 4 Vocabulary”, “Baby Shower”.
Cell size, wrapping, and the three-line ceiling
The layout is computed rather than eyeballed. The grid is always drawn square, sized to whichever page dimension is tighter after a 40 point margin, a 40 point title strip, and on a 5x5 a further 30 points for the letter row. On A4 that gives 5x5 cells of about 103 points, roughly 3.6 cm a side, which is comfortable to mark with a pen. A 3x3 on the same paper gets cells of about 172 points, roughly two thirds larger.
Cell font size scales with the cell and is clamped between 8 and 20 points, so a 3x3 card is not absurd and a 5x5 stays legible. Text wraps to the cell width using the same word-wrap routine behind our text-to-PDF conversion, and stops after three lines. That last detail is the real constraint on your list: “Brings a homemade dish” fits a 5x5 cell, whereas a full sentence will be cut off. Write items as short phrases, and if some of them have to be long, use a 3x3 grid where each cell has far more room.
FREE cells are filled pale yellow with the word in bold, so a player can spot the free square at a glance from across a table.
Generating a set of cards
- Paste your words, phrases or numbers into the list box, one per line or separated by commas. Exact duplicates are dropped. The counter tells you how many items were found and how many the current grid needs.
- Pick a Grid size, and on 3x3 or 5x5 decide whether you want a FREE center space.
- Set a Card title, the Number of DIFFERENT cards you need, and a Paper size of A4 or Letter.
- Click the generate button, which counts the cards it is about to build into its own label. The PDF is assembled in the page with pdf-lib and downloads straight away, one card per page.
There is no live preview, deliberately. The whole content of a card is randomised, so a preview would either reshuffle on every keystroke and then not match what downloads, or show placeholder text nobody needs. The live item counter is the feedback that actually helps, because it catches a too-short list before you click anything.
One card per page, and how to get more per sheet
One full-page card per player is the shape a hand-marked bingo card wants, the same call the Printable Calendar makes with one month per page. There is no tiled multi-card layout, on purpose: tiling needs cutting, and it hands every player a smaller grid to mark during a live game.
If you do want four small cards to a sheet, print the PDF with your viewer’s own multiple-pages-per-sheet setting and cut them apart. For other no-prep printables from the same pdf-lib pipeline there is the Word Search Maker, and the Certificate Maker for whatever you hand the winner. If the game needs sides rather than individual players, split the room first with the Random Team Generator.

