Flashcard Apps That Work Offline in a Browser (What 'Offline' Really Means)
· Giovanni Fu Lin · flashcards, study-tools, offline, spaced-repetition
“Works offline” is the most over-claimed phrase in browser-based study tools. Sometimes it means the whole thing genuinely runs on your device. Sometimes it means the login screen loads and nothing else. I build Fulin Flashcard, a free browser flashcard tool that caches itself for offline use, and I’d still tell you to distrust the claim — including mine — until you’ve tested it yourself. The test takes ninety seconds and it’s at the bottom of this post.
How a browser app works offline at all
Two separate mechanisms, and conflating them is where most confusion comes from.
The service worker caches the app’s code. On your first successful online visit, the browser stores the HTML, CSS, and JavaScript locally. On later visits it serves those from the cache, so the interface loads with no connection. This is what makes a web app feel installed.
Local storage holds your data. Your decks and review state are written to your browser’s storage on your device. No server round-trip to read them, so they’re available offline by default.
Both have to be working for offline review to happen. An app can cache its code perfectly and still be useless offline if it fetches your decks from a server on every load.
What reliably breaks without a connection
This is the part that gets glossed over:
- Remote translation and definition lookup. If definitions come from an API rather than a bundled dictionary, they’re gone. This is the most common offline surprise in language flashcards specifically.
- Text-to-speech. Some implementations use a remote voice service. Others use the browser’s built-in speech, which may work offline depending on the platform’s installed voices. You cannot tell which you have without testing.
- Any sync. If reviews are meant to reach another device, they’ll queue at best and vanish at worst.
- Fonts and images loaded from a CDN. Usually cached along with everything else, occasionally not, which produces the odd effect of a working app with missing characters.
- Analytics. Harmless, but a badly written app can hang waiting for a request that will never complete. This is worth knowing because it presents as “the app is broken offline” when the actual cards are fine.
The failure mode nobody warns you about
Browser storage is not durable storage. It can go away:
- You clear site data or browsing history with the wrong box ticked.
- You’re in private browsing, which discards everything on close.
- The browser evicts storage under disk pressure — rarer than it used to be, still real.
- You switch browsers, or devices, and there’s nothing to switch to, because local means local.
- iOS in particular has historically been aggressive about clearing storage for sites you haven’t visited in a while.
None of these are reasons to avoid local storage. It’s fast, it’s private, and it’s why the thing works offline in the first place. They are reasons to export a copy occasionally. Six months of carefully written cards deserve a CSV sitting in a folder somewhere. On the ways a deck can leave a tool, see how to share a flashcard deck by link.
Native app vs. browser, honestly
A native app wins on: guaranteed offline data, background audio, push notification reminders, and storage the OS treats as the app’s own rather than as cache. If you review on a daily commute with no signal and a reminder is what keeps you consistent, install something.
A browser app wins on: trying it in ten seconds, running on any device including ones you can’t install software on, no account and no permissions in the good cases, and nothing to uninstall when you move on.
For most people the deciding question is narrower than “which is better”: do I need this to work with certainty in a specific place with no signal? If yes, native. If you mostly have a connection and offline is a nice fallback, a browser app that caches properly is fine and considerably less hassle.
The ninety-second test
Do this before you trust any tool with your study habit:
- Open it online once and let it load fully. This is the visit that populates the cache.
- Add a couple of cards so there’s real data.
- Turn on airplane mode.
- Reload the page. Does the app load, or do you get a browser error page? This tests the service worker.
- Do your decks appear? This tests local data.
- Complete a review. Does it record? Does the next card come up? This tests whether the review loop needs a server.
- Try the extras — audio, definition lookup — and note which ones fail. Now you know what you actually have.
- Turn the connection back on and reload. Is the review you did offline still there? If it vanished, the app was writing to memory rather than storage, and that’s the worst outcome of the set.
Any tool that fails step 4 or step 6 does not work offline, whatever its front page says.
How Fulin Flashcard handles this
Fulin Flashcard installs a service worker that caches the application after a successful first online visit, and keeps decks and review state in browser local storage. So reviewing works without a connection, and it’s free with no account needed for the core workflow.
The boundary, stated precisely because vagueness here is how people get burned: remote translation, speech, analytics, and link services are not guaranteed offline. The review loop is the part I’m confident about. And because storage is local, the durability caveats above apply in full — you can download your vocabulary as CSV, copy it as tab-separated text, or share it by URL, and doing that occasionally is a good idea. As of the last audit of the code I hadn’t verified a full backup-and-restore flow that preserves all review history, so treat an export as a copy of your cards rather than a complete snapshot of your scheduling state.
The scheduler itself is deliberately simple — fixed intervals rather than an adaptive algorithm — which is one reason the whole thing runs locally with no server involved. It’s written out in the Fulin Flashcard specification, and the reasoning behind simple versus adaptive scheduling is in FSRS vs. SM-2.
Quick checklist
- Offline needs two things: a cached app shell and locally stored data. Both can fail independently.
- Remote lookups, remote speech, and sync will not work offline. Bundled dictionaries will.
- Browser storage is private but not durable — export a CSV now and then.
- Add the app to your home screen so it opens without a browser chrome round-trip.
- Run the airplane-mode test before a flight, not during one.
- If certainty offline is a hard requirement, install a native app instead.
FAQ
Can a browser flashcard app work without internet?
Yes, if it installs a service worker on your first online visit. That caches the app's own code so the interface loads with no connection, and card data stored in the browser stays available. What breaks is anything that calls a server — remote translation, text-to-speech, syncing, analytics.
Is my flashcard data safe if it's stored in the browser?
It's private, since it never leaves your device, but it isn't durable. Clearing site data, using private browsing, switching browsers, or a browser evicting storage under pressure can all lose it. Export a copy periodically if it matters to you.
How do I test whether a flashcard app really works offline?
Visit it once online so it can cache itself, then turn on airplane mode and reload the page. If the app loads, your decks appear, and you can complete a review that's still recorded when you come back online, it works. If any of those fail, it doesn't — regardless of what the marketing says.
Do I need to install anything for an offline browser flashcard app?
No app store install. You do need to visit the page once with a connection so the browser can cache it, and it's worth adding it to your home screen so it opens like an app. That's a bookmark with an icon, not an installed application.
Does Fulin Flashcard work offline?
Partly, and I'd rather be precise than reassuring. Its service worker caches the application after a successful first online visit, and decks and review state live in browser local storage, so reviewing works without a connection. Remote translation, speech, analytics, and link services are not guaranteed offline.
Related project: Fulin Flashcard