Flashcard Maker

Build flashcard decks in your browser, study them with flip, shuffle or Leitner boxes, import or export CSV and JSON, and print a numbered PDF.

🌐 Español

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

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

From an empty deck list to a first study session

  1. Click + New deck. A deck named “Untitled deck” appears in the sidebar and opens straight away; type over the name field at the top of the editor to rename it, which saves as you type.
  2. Fill the Front (question) and Back (answer) boxes and press + Add card. At least one of the two has to contain something, or the button does nothing. Repeat for each card, or press Import CSV/JSON to pull in a list you already have.
  3. Choose Sequential order, Shuffle or Spaced repetition (lite) from the dropdown and press ▶ Study this deck. The button stays disabled until the deck has at least one card.
  4. Click the card itself to flip between question and answer, then press ✓ Know or ✗ Don’t know. Skip → moves on without recording a verdict, and the counter in the corner tracks your position in the queue.
  5. Back in the deck view, pick Export as CSV or Export as JSON and press Download, or press 🖨️ Print cards (PDF) for a sheet to cut up.

Three boxes and a weighted queue

“Spaced repetition (lite)” is a Leitner system with three boxes and nothing else. Every new card starts in box 1. Marking it ✓ Know promotes it one box, up to a ceiling of 3; marking it ✗ Don’t know drops it straight back to box 1 no matter where it was. When you start a spaced session the queue is built by repeating each card according to its box: three entries for a box 1 card, two for box 2, one for box 3, and the whole weighted list is then shuffled so the repeats do not clump.

That means a three-card deck sitting in boxes 1, 2 and 3 produces a session of six draws, not three. It is honest to call this a weighting scheme rather than a scheduler. There are no due dates, no intervals and no across-days tracking, so the tool never tells you “review this on Thursday”. If you want multiple-choice questions with an instant score and a per-question breakdown instead of two-sided cards, the Quiz Maker is the sibling built for that.

What the CSV and JSON exports actually contain

A CSV export is two columns under a front,back header, escaped properly: a field containing a comma, a quote or a newline gets wrapped in double quotes and any internal quote is doubled. A JSON export is an indented array of {"front": ..., "back": ...} objects. Neither carries the box number, the deck name or a timestamp, which keeps the files trivially editable in a spreadsheet at the price of losing your progress on a round trip.

Import is chosen by file extension: a name ending in .json goes down the JSON path, and anything else is treated as CSV. Header names are flexible, so front/back, question/answer and term/definition are all recognised in either order. A file with no header row at all is rejected with a message telling you which column names to add, because there is no dependable way to tell a header from a first card. If you are unsure a JSON file is even well formed, the JSON Formatter will point at the offending line before you try the import, and CSV Viewer will show you the header row of a spreadsheet export as a table.

Cutting up the printable PDF without a duplex gamble

Pressing print builds a real PDF with pdf-lib rather than calling the browser print dialog on a styled page. The sheet is A4, inset 12.7 mm, and tiled two columns by three rows, so each cell is about 92 by 90 mm. Every card is numbered, and the file prints all the fronts first and then all the backs in that same numbering, each cell tagged with its number and the word FRONT or BACK in the corner.

That ordering is deliberate. Automatic duplex alignment depends on whether your printer flips on the long or short edge, which varies by model and driver and cannot be verified from inside a browser tab. Numbering sidesteps the problem: print, cut, then match front 4 with back 4. Card text is centred and wrapped to the cell width at 12 point, and an empty side prints as (blank) so you can see the gap rather than wonder if the page failed. The download is named after the deck, with spaces turned into hyphens and punctuation dropped, so a deck called “French verbs / A1” saves as French-verbs-A1-print.pdf.

Where the decks live between visits

Everything is kept in this browser’s local storage, under a single key holding every deck and card as JSON. There is no account and no sync. Close the tab, come back a week later in the same browser and your decks are where you left them, boxes included, because each edit writes immediately rather than waiting for a save button.

The cost is the obvious one. A deck exists in one browser profile on one machine. Clearing site data removes it, a private window starts empty, and your phone knows nothing about it. Export is the migration path, and the fact that boxes do not travel is exactly why. The same pattern shows up across the tools built this way, from the Kanban Board to the Online Notepad, and it is the trade made in exchange for never sending your study material to anyone.

See it in action

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

Frequently asked questions

If I export a deck, does the file remember which cards I already knew?

No. An export writes only the front and back text of every card, so the Leitner box a card currently sits in stays behind in this browser. Re-import that file and you get fresh cards that all start in box 1 again. The boxes do survive a reload and a closed tab, just not a round trip through a file.

My spreadsheet exports semicolons instead of commas. Will the importer choke on that?

No. The CSV path runs the same parser the CSV Viewer tool uses, which works out whether the file is separated by commas, semicolons or tabs before reading it, strips the leading byte order mark Excel likes to add, and copes with quoted fields containing commas or line breaks. The one thing it insists on is a first row naming the columns.

Where do imported cards land when I have several decks?

They are appended to whichever deck is open at the time, never to a new one, and they never replace the cards already in it. Create or open the deck you want first, then use the import button. Import the same file twice by accident and you will have two copies of every card to delete by hand.

How big are the printed cards, and how many come out per sheet?

The print PDF is A4 with a 12.7 mm margin, tiled two across and three down, so each card measures roughly 92 by 90 mm and six fit on a sheet. A twenty-card deck therefore comes out as four pages of fronts followed by four pages of backs, eight pages in total.

What does Skip do to a card I am not sure about?

Skip advances the session without touching that card's box, and sits to the right of the two answer buttons as the neutral third choice. The card keeps whatever weighting it already had for the next spaced session. It is not pushed to the back of the queue either, though in Spaced repetition (lite) mode a low-box card already appears two or three times in the same queue, so you can still meet it again before the session ends.

Can I get a deck back after deleting it?

No. Deleting a deck raises a confirmation dialog, and that dialog is the only safety net; there is no trash, no undo history and no version list. Since the deck list lives only in this browser's own storage, a deleted deck is gone unless you exported it as CSV or JSON first.

Related tools