logoalt Hacker News

Hashcards: A plain-text spaced repetition system

368 pointsby thomascountzyesterday at 4:55 PM170 commentsview on HN

Comments

btillyyesterday at 8:55 PM

I think that the real power of spaced repetition is not in flashcard applications like this. It is in behavior modification.

Let's take a real example to show how this works.

August 19, 2025. My wife called me in to help her decide what to do about a dentist that she thought was ripping her off. A couple of quick suggestions later, and she went to being mad at me about not having heard the problem through before trying to fix it badly. As soon as she was mad, I immediately connected with how stupid what I did was, and that this never goes well. But, of course, it was now too late.

Not a mistake I was going to make for a while. But, given my history, a mistake I was bound to make again.

I changed that. This time I stuck this into my spaced repetition system. Each time the prompt comes up, I remember that scene, holding in mind how it important it is to emotionally engage, not offer quick suggestions, and be sure to listen to the full problem in detail. It takes me less than 30 seconds. Reviewing this prompt, for my whole lifetime, will take less than 15 minutes of work. Just typing this up this time takes more work than I'll spend on it in the next several years.

This mistake hasn't happened since. Not once. And I believe it won't again in my life.

I have literally changed dozens of such behaviors. My wife says that it is like there is a whole new me. She can't believe the transformation.

All it took is looking at spaced repetition as general purpose structured reinforcement, and not as just a way to study flashcards.

show 7 replies
tpoacheryesterday at 7:38 PM

I don't mind people comparing such projects against Anki, this is natural since Anki is quite dominant in this space, but I feel like every criticism of Anki on that list was either highly subjective, exaggerated, unfair, or outright wrong and unkind (in a "one does not climb a ladder by throwing others off it" manner). Not saying this is what Fernando intended to do here, but his sharp opinion does come across a bit like it here.

Personally, I find the interface is extremely functional; the ability to have deck hierarchies to be a massive feature, not a bug; the WYSIWYG being the default being obvious given the intended audience, but one can still easily edit a textfile and import it or edit in html mode directly if desired; converting something into latex math is as simple as enclosing it in "[$] ... [/$]" and hardly the nightmare it's portrayed as; and finally potentially hacky plugins is a feature, not a bug: occasionally you have a very specific problem and some kind soul creates a solution for you, which may be functional but not the most aesthetically pleasing. That's fine. Anki is a bazaar, not a cathedral, and plugins have ratings and reviews which you can consult if necessary.

I have tried many different flashcard solutions, including hacky text-based ones, and I always return to Anki. Despite the fact that most other tools in my stack that I swear by are terminal-based.

show 2 replies
yanis_tyesterday at 5:59 PM

I've been working on knowledge base + spaced repetition project, and I know how convenient markdown files are.

1. You can view them anywhere (Github renders them nicely) 2. You can edit them in your favorite editor 3. Formatting doesn't decrease the readability 4. Extensible (syntax highlighting, mermaid, mathjax, etc.) 5. Cross-linking which is a core for any knowledge system is free 6. You can use Git for versioning and backup, etc, etc.

https://github.com/odosui/mt

show 1 reply
seizethecheeseyesterday at 11:19 PM

Curious what HN thinks about a spaced repetition social network.

You could mark items in the feed to space repeat for yourself. This would also function as a “retweet”, which would align incentives such that content that gets promoted is actually durably useful or interesting. The posts people make would repeat to themselves too, so the source content should be good.

show 2 replies
epsyesterday at 11:13 PM

> Cards are content-addressed, that is, identified by the hash of their text.

Wouldn't this invalidate card's review history if I am to fix a typo in the card's text?

show 3 replies
noahlttoday at 3:41 AM

> The thing that makes hashcards unique: it doesn’t use a database. […] Your performance and review history is stored in an SQLite database in the same directory as the cards.

Man I was really looking forward to seeing how they stored review history in plain text.

leobgyesterday at 6:11 PM

For the bar exam, I used a combination of an outliner and flashcards. Back then, I was usimg a PalmPilot. The idea was:

1. Turn the subject matter into a knowledge tree. 2. If a branch has more than 5 leaves, you split it up. 3. Flashcards are generated by traversing the tree. The parent node is the question, the child nodes are the answer.

The benefit of the tree is that it forces you to think about where in your structure a given piece of new information fits.

show 3 replies
rasengan0today at 9:40 AM

Thank you, finally a SRS implementation I can use for my plain text files. Very nice! I had Gemini make a deck from https://github.com/eudoxia0/hashcards , hashcard_tutorial.md and after correcting my deck to account for escaping the < and > with \< and \>; on the second run ($ hashcards drill --card-limit=10 ./)dealt me all the correct cards, like a self QA I really like the keyboard shortcut of space and 1,2,3,4 for making deck reviewing quick work.

dustfingeryesterday at 11:14 PM

If you are an emacs user, you might be interested in org-drill, which of course is plain text and uses space repetition algorithm:

https://orgmode.org/worg/org-contrib/org-drill.html

show 1 reply
alexpotatoyesterday at 9:46 PM

Lots of comments about using your own systems etc so I'll say two things:

1. The biggest win is just doing spaced repetition. Period

You don't even need an algorithm. You can just have options for "remind me in 1 day, 7 days, 14 days". This is how people did with physical cards: they just put the card at the back of the deck, the middle or the front.

2. LLMs now make it trivial to just say "make me an Anki clone in python with these features" and it will come up with something pretty decent.

In closing, learning the things that LLMs can't do quickly and efficiently is basically what we should all be doing.

ichversteheyesterday at 6:55 PM

Allow me to plug Ankivalenz[1], my library that turns (structured) Markdown files into Anki decks, using a syntax like this:

  # Solar System
  
  ## Planets
  
  ### Color
  
  - Earth ?:: Blue
  - Mars ?:: Red
The best thing about it (for me) is that the header structure (and any parent list items) are added to the cards, e.g.:

  Path: Solar System > Planets > Color
  Front: Earth
  Back: Blue
This hierarchy makes it much easier to formulate succinct cards, in my experience.

The syntax also means that I can easily add cards from my regular Markdown notes, so regular notes and Anki cards live together.

[1] https://github.com/vangberg/ankivalenz/

lovestoryyesterday at 10:00 PM

Spaced repetitions only work if you use them every day with minimal or no breaks. If the algorithm actually does the recall probability very well like FSRS does, you will keep failing the cards if you don't do them consistently. I learned the hard way where I almost forgot like 80% of my spanish deck that I was certain that I will be able to retire and recall it. But nope, even that word that you felt was rock solid in your memory is gonna fade, so just trust the algorithm.

smarkmtyesterday at 6:14 PM

W.r.t data entry I've resorted at times to using a Google spreadsheet with autogenerated row UUIDs (it's useful for content to have a persistent ID in case you have to correct a typo or add new fields).

I also often found myself wanting to make different flashcard decks from the same basic information (for Mandarin pinyin sentence --> character recognition, characters --> English translation).

If there was a sheets like data entry interface backed by a text format it would be great.l (I rolled things with streamlit but it's always cumbersome to get started).

show 1 reply
MichaelNolanyesterday at 9:13 PM

I am always intrigued by new SRS systems, though sadly most are just "simplified" Anki clones. I have always been tempted to throw my hat into the ring.

The biggest area for improvement is probably deck collaboration. Most SRS proponents often state that its bets to make cards yourself because the act of making the cards is a key part of the learning process. I don't disagree, but part of the reason that making cards your self is recommended is because the shared decks are, on average, terrible.

After that I would like to see more built in support for non front/back or cloze cards. There are a lot of other card types that you can make, but are difficult or impractical to do in anki. Things like "slow" cards, one sided cards, code/music/math/text cards. These can all be done in anki, but it's a pain.

Then support for card order/hierarchy/prerequisite an and encompassing graphs like what MathAcademy does.

And lastly, a web first experience. Anki is offline/local first. That has the benefit that you are always safe from being rug pulled. But there are a lot of places (like work) where local first does not work well.

erhuveyesterday at 7:23 PM

Know a big proponent of hashcards, has a setup[1] that's followed up by a prompt[2] that converts websites, pdfs, etc. into hashcards for SRS.

[1] https://www.zo.computer/prompts/hashcards-setup

[2] https://www.zo.computer/prompts/add-flashcards

ashishbyesterday at 7:15 PM

Markdown is the final perfect form for every text (non-binary) content based system.

Every product will eventually use markdown as their content store.

show 1 reply
jcul10/06/2025

This looks really cool. I thought in the past about implementing something like this myself.

I have use anki, and briefly mochi.

Having plain text cards that are simple to edit and manage with basic linux tools is really important.

I have used the genanki python library in the past to generate cards, but it's not great.

Going to give this a go.

smarkmtyesterday at 6:08 PM

For language learning I've found audio playback and images to be very useful.

Could you imagine adding support for this?

show 1 reply
jwrallietoday at 1:13 AM

I think the overall idea is good.

If the cards are identified in the database as their hashes, wouldn’t editing the content reset all repetition data so far?

Anyone here has been using FSRS long enough to have comments about its effectiveness? I think it’s general consensus that moving from SM-2 to FSRS will show great improvement. I’m using SuperMemo 9 though, so it’s much harder to understand whether there will be an improvement or not.

mstipeticyesterday at 5:51 PM

I wish more people knew about GNU recutils instead of inventing new formats

show 7 replies
pvdebbetoday at 7:43 AM

Perfect timing. I just started to teach my wife Finnish so that she'll have easier time with real language lessons when she gets her paperwork sorted out to move here. And I've feverishly been looking for a self-hosted SRS system where I can feed new content to the "decks" and she can consume it on her schedule. Making micro decks that she'd import in Anki wouldn't be very convenient. This would seem perfect to me.

I'm happy to hear other suggestions too?

show 1 reply
krychuyesterday at 9:31 PM

Self-plug. For anyone working in the terminal: https://github.com/krychu/lrn.

A very simple cli tool, consuming basic txt format. You can use it in a second window while waiting for your compilation to finish.

Recently I’ve been also experimenting with defining QA pairs in my note files (in a special section). I then use a custom function in emacs to extract these pairs and push to a file as well as Anki.

_JoRoyesterday at 9:49 PM

As someone who has used spaced repetition extensively I will just provide a few insights that might be helpful:

1. Decide on what's important. Just because you learn something doesn't mean that it should be logged to the system. I used to log a lot of minor details (like niche method signatures or command flags to the system). If you make cards for every detail like this then you will be trapped reviewing 100s of cards daily that you likely never use.

2. For the cards you deem are important, make sure you understand the concept. This often means making 2-5 cards for the concept that test your understanding from different angles (definition, pros, cons, how would I explain this to someone else, etc...). This helps to cement the concept at a foundational level.

3. Try to move from the existing flashcards to 2nd order flashcards or pure application after the first couple reviews. So your foundational cards are now set to review in 6 months or 1 year. At this timescale if you prioritized what was important and made sure that you understood the foundational concepts, then usually simply doing things related to the concepts will be the reviews (and sorry to say but if in 1 year you get a card related to what you are doing, but never used, chances are it probably wasn't that important). In addition to doing, you can also create 2nd order flashcards (which might compare 2 concepts). These types of cards test the foundational knowledge indirectly, and are helpful for higher order thinking.

In conclusion, I think spaced repetition is a very effective tool for efficient learning (especially in the first 60 days or so after learning something). I think the major pitfall is not prioritizing what cards get made and being stuck in review hell.

brianjloganyesterday at 9:11 PM

This was a super interesting article for me as I'm working on a prototype software aiming to promote spaced repetition and some newer wave learning science as a common approach to "leveling up" in an age where AI is pushing the competitiveness of human labor.

I've thought about posting to HN but I'm a little apprehensive of when and how to post.

Anyone interested in this and/or have some advice for posting my prototype online for feedback?

show 2 replies
jbstackyesterday at 7:37 PM

> First, [Anki] is ugly to look at, particularly the review screen.

You can customise note types with CSS and Javascript, which means that you can make cards look however you want.

show 1 reply
yellow_leadyesterday at 7:19 PM

I'm happy to see others in the space, but I wish Anki competitors would implement a decent 'import from Anki' feature. Otherwise, I think most existing users of SRS are unlikely to switch (because we use Anki and have thousands of cards there already).

The data format of Anki is a bit complicated but at least it's SQLite. I've seen a ton of shared decks and resources on ankiweb, but it's true you can't easily put them on GitHub.

show 3 replies
wodenokototoday at 5:11 AM

I’d like to have deck-wide variables/lookup tables and links.

The decks for studying Japanese that I’d like would have RTK/wanikani style elements used for mnemonics and I’d like them shown in the answer along with a full description and cross references.

Right now I’d have to build a templating system to prebuilt my deck and import it and it’s just a lot of work on top of the work of building the content, but mostly it makes it difficult to edit/update cards while studying.

kuil009today at 1:38 AM

Rather than treating SRS as a learning tool for facts, I find it far more valuable as a system for recording and periodically revisiting past judgments, especially to reflect on whether a decision made in context was actually a good one.

show 1 reply
rsanek10/08/2025

>I have learned that the biggest bottleneck ... is just entering cards into the system.

Couldn't agree more. I think I would take this opinion and go even further -- we shouldn't be making cards fully by hand much, if at all, anymore. AI-assisted card creation is to me clearly the future, and already AIs are good enough for this to work well.

show 1 reply
analogpixelyesterday at 7:27 PM

Does anyone outside of people in school or language learners use these type of tools in any interesting ways?

show 4 replies
adangityesterday at 7:03 PM

Working on a Rails FSRS app, similar focus on healthy defaults, trying to find the 80/20 of what Anki does today: https://cadence.cards, free side project.

esttoday at 5:32 AM

As Hinton said during an podcast, humans can only learn at the rate of few bits per second. Memory and natural language are of very limited bandwidth.

dtj1123today at 7:23 AM

For anyone who prefers reviewing their cards via their phones, this appears to work very nicely on Termux

BeetleBtoday at 12:42 AM

I've been doing spaced repetition in plain text (org files in Emacs) for 7 years now.

org-drill is the original main package, but the newer org-srs is probably better (and supports FSRS).

tester457yesterday at 9:01 PM

> Your performance and review history is stored in an SQLite database in the same directory as the cards.

Do you use Syncthing or something else to sync your performance history between devices?

show 1 reply
pi_el_59today at 3:54 AM

This looks awesome, I'm looking forward to trying it

askltoday at 12:48 PM

> The thing that makes hashcards unique: it doesn’t use a database.

> Your performance and review history is stored in an SQLite database in the same directory as the cards.

linkageyesterday at 9:49 PM

Obligatory mention of Obsidian’s most popular spaced repetition plugin: https://github.com/st3v3nmw/obsidian-spaced-repetition

It has the least friction for creating flashcards I’ve ever seen. You actually don’t even have to create flashcards - you can add any note to the review queue with one keystroke and record the ease of recall with another command.

_giorgio_today at 7:51 AM

All my notes are in latex.

Any way to use them, or do I have to go through markdown format?

outofpaperyesterday at 10:28 PM

Another plain text option is David Miserak's GoCard. https://github.com/DavidMiserak/GoCard

brcmthrowawayyesterday at 7:37 PM

Ok but what about images and formulas?

show 1 reply