TSOFA - The Simple, Offline Flashcard App
TSOFA ("tee-sofa") - The Simple, Offline, Flashcard App - is a flashcard app that exists entirely in a single HTML file you can view in the browser. No server, no ads, no registration, no "premium" features to pay for, no build process, no cloud sync: It's just a simple, free flashcard app.
🇺🇸 English, 🇪🇸 Español, 🇫🇷 Français, 🇩🇪 Deutsch, 🇳🇱 Nederlands, 🇮🇹 Italiano, 🇵🇹 Português, 🇵🇱 Polski, 🇷🇺 Русский, 🇳🇴 Norsk, 🇸🇪 Svenska, 🇨🇳 中文, 🇮🇳 हिन्दी, 🇧🇩 বাংলা, 🇯🇵 日本語, 🇰🇷 한국어, 🇹🇭 ไทย, 🇸🇦 العربية, 🇻🇳 Tiếng Việt, 🇹🇷 Türkçe, 🇵🇭 Tagalog, 🇰🇪 Kiswahili, 🇮🇷 فارسی, 🇮🇩 Bahasa Indonesia
Features
- Single HTML file - Everything in one HTML file, easy to share and view on any device
- Multilingual Support - Emoji-based design to reduce language dependence, but also 24 languages supported: English, Español, Français, Deutsch, Nederlands, Italiano, Português, Polski, Русский, Norsk, Svenska, 中文, हिन्दी, বাংলা, 日本語, 한국어, ไทย, العربية, Tiếng Việt, Türkçe, Tagalog, Kiswahili, فارسی, Bahasa Indonesia
- Keyboard controls - Space to flip, arrows to navigate
- HTML support - Embed images, format text, add links
- Shuffling - Randomize order for practice
- Inverting Q/A - Swap questions with answers
- Removing flashcards - Remove cards as you master them, reload the page to bring them back
- Left, right, or center alignment - Change alignment to preserve indentation
- Integrated timer - If you want to time your run through the flashcard deck
- CSV import - Paste data from spreadsheets
- Printable - Print a paper copy of the flashcards
- Zero setup - Works immediately offline, no programming skills needed
- Privacy-focused - Your flashcards are not uploaded or stored on cloud servers; they only exist in the HTML file on your device
- Simply Free - No registration, no paywall, no ads, no "premium" features; everything is free
Example Flashcard Sets
(These flashcards are AI-generated and not thoroughly reviewed for correctness.)
- Chemistry Acids and Bases
- Periodic Table of the Elements
- Cell Biology
- Human Organs and Their Functions
- Metric Conversions
- Multiplication Table
- Division Table
- Roman Numerals
- MCAT Study Questions
- Nursing Mnemonics
- Pharmacology Mnemonics
- Medical Terminology
- U.S. Constitutional Amendments
- U.S. Constitutional Law
- U.S. State Capitals
- Year of World History Events
- Country Currencies
- Country Capitals
- Economics Terms
- Commonly Confused Words
- 100 Common French Verbs
- 100 Common Spanish Verbs
- English Idioms
- Japanese Hiragana Characters
- Japanese Katakana Characters
- Logical Fallacies
- Morse Code
- NATO Phonetic Alphabet
- Phobias
- SAT/GRE Vocabulary
- Typography Terms
Create Your Own TSOFA Flashcard Sets
You can use the editor web page to create new flashcard sets.
Alternatively, you can download the tsofa.html file and open it in any text editor. Find the FLASHCARDS variable (and optionally the TOPIC variable) near the top of the <script> section, and edit the text string values. Set the LANGUAGE variable to set the default language (this can be changed later in the app itself.)
You can put any HTML tags you want and they will be rendered in the flashcard, including images and video.
Array/JSON Format for Flashcards
For the array/JSON format, I recommend using backticks (on the keyboard to the left of the 1 key) for the FLASHCARDS string values so you can include quote characters and span multiple lines. You can optionally add a TOPIC setting as well to display on the page.
const TOPIC = "(Put a topic to display on the page here, or leave this empty.)";
let FLASHCARDS = [
[`What is the capital of France?`, `Paris`],
[`What is 2 + 2?`, `4`],
[`What is the largest planet in our solar system?`, `<b>Jupiter</b><br><i>It has a mass of 1.898 × 10²⁷ kg</i>`],
[`What year did World War II end?`, `1945`],
[`Who wrote 'Romeo and Juliet'?`, `William Shakespeare<br><img src="shakespeare.png">`],
[`What is HTML?`, `<b>HyperText Markup Language</b><br>The standard markup language for creating web pages`],
];
CSV String Format for Flashcards
Alternatively, you can also load flashcards from a single string of CSV (comma-separated values) text. This format is commonly used by spreadsheets or as an export format in other flashcard apps.
const TOPIC = "(Put a topic to display on the page here, or leave this empty.)";
let FLASHCARDS = `"Question 1","Answer 1"
"Question 2","Answer 2"
"Question with, comma","Answer with, comma"`;
Open Source
You can suggest improvements or report bugs on GitHub.