Skip to content(if available)orjump to list(if available)

Hashcards: A plain-text spaced repetition system

btilly

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.

0cf8612b2e1e

I love this example because the correct, wise approach is so alien to my mind that I do not know how to respond to such situations. I am a professional problem solver, you described a problem, yet you do not want it solved? Just talk about it being annoying, like an immutable facet of the universe? Should I retort about my grievances with gravity making roof repairs a bear?

mehagar

The way I approach these situations is by reminding myself that the speaker is implicitly making a request - a request for empathy or understanding. While it's tempting to try to solve their problems, what they really want is for their feelings to be heard.

"Oh, that must have been frustrating."

btilly

You may enjoy, It's not about the nail. https://www.youtube.com/watch?v=-4EDhdAHrOg

What I was doing is very common. Trying to engage logically with what logic can engage with, while failing to recognize that the emotional challenge is what has to be dealt with first. And that once feelings are out of the way, the logical problem will be massively easier to solve.

thomascountz

It's important to remember there's no "right" or "wrong," it's all about showing support in the way the requester needs.

If a stranger says, "my bike tire is flat," in most western cultures, they might very well be asking for your help to reinflate their tire.

If your loved one says the same, well you have a lot more context to fill in their subtext with. If they're displeased with your reasonable attempts to help them—like you'd help a stranger—it might mean that they were asking for something else. Finding out what that "something else" is, and adapting to each other's differences in "what was said" vs "what was heard," is part of what it means to care about someone.

RealityVoid

I feel you, I totally do. I get wanting to vent and wanting to be heard but solutions should come first. Honestly, when I hear people annoyed about offering solutions I get their need to engage with them differently but I also kind of believe they have a dysfunction about how they relate to the world.

btilly

This attitude reminds me of another phrase that I've internalized.

Choosing to be right, is choosing to be alone.

Whatever you choose to put above trying to get along with others, limits who can be part of your group. In the extreme, you will feel absolutely justified. And yet be absolutely alone.

As an example, language communities that focus on being able to find the ideal way to program (eg Lisp) tend to splinter. The languages that achieve broad acceptance (eg Python) do things that most people recognize as bad.

This doesn't mean that we should always choose to get along, rather than being right. But failing to address emotions up front has damaged so many parts of my life, that I firmly wish that I hadn't stood for so long on how right my behavior was.

I hope that your choices are working better for you than my past choices did for me.

_acco

So cool. Would love to hear more - What app do you use? How often do you clear your inbox and how long does it take?

wisty

> 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

Sounds like you're not the only one at fault lol.

Do you get mad at your wife if she offers suggestions before emotionally connecting? And would it still be too late even if she realises how "stupid she was"?

malnourish

Yes; well, I might not get "mad" at my wife, but I might emotionally disengage or feel like I lack closure were I to explain a situation to my wife and she responded with solutions before I even had the chance to finish.

It took me a long time to realize this. Actually, I've just now realized it clearly. Our emotional expression and the scenario may be a bit different, but it's fundamentally the same concept.

thomascountz

This is really inspiring. Doing whatever you gotta do to be a better support for your loved ones is commendable.

Can you give an example of what you record in your SR system? Is it the anecdote itself? Do you generalize the pattern? Is there a "front" and "back?" A cloze?

btilly

My prompt for that is, When did I last dramatically fail Kate at decision support?

Recalling the scene and the details is part of the exercise.

I do the visualization while journaling about it. Here is an example of what that written record looks like.

Aug 19, 2025. She was stressed because she thought that Phoenix’ dentist was ripping her off. A couple of quick suggestions later, and her meltdown was not about how bad I am at decision support!

Kate is able to come to the right decision. She wants someone to listen to her, be there emotionally, and not offer suggestions unless they have a lot of context. But first, second, and third, make her feel listened to.

Note. This is tied to a visualization that causes me to connect to the right emotion at the right time. So I not only won't do the wrong thing, but I'll also be doing the right thing.

vannucci

Definitely want to talk about this too. I've been thinking of my own daily learning through tools like Anki and trying to devise a sort of "life stack" where I'm adding stuff and refreshing myself on it and this top comment from OP just sort of crystalizes that.

epolanski

Interesting example with some questionable couple dynamics.

tpoacher

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.

btilly

His list is a list of reasons why he was motivated to do something. It does not matter how subjective the list is, since its purpose is not to convince others. It just matters that it connects with him.

If you're potentially interested in his project, you should evaluate your interest based on how much you think like him. If his complaints aren't yours, no skin off your back. Just ignore him. If they are, read farther.

anal_reactor

Using Anki every day for about half an hour (I'm a slow learner lol). Anki sucks, but it's good enough that there's no point looking for other apps.

fny

I know a gazillion med students who used Anki as is to graduate. They routinely have decks with north of 10K cards.

The people who hunt for alternatives are probably procrastinating, and the people who write their own apps are definitely yak shaving.

earnesti

Sucks compared to what? I find anki super. It is amazing what other have built for me to use, for free. It is insane value.

outside1234

Anki IS amazing and DOES suck at the same time. I am very glad it exists and this is not meant as a dig at the maintainer for whom I am very grateful.

In particular, the UX is a mess. It is very hard for a beginner and frankly it feels like you are in an escape room whenever you want to do something new in terms of difficulty.

Once you are over that hump and just internalize its warts, it is AMAZING, but it IS a huge hurdle for a lot of people.

_JoRo

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.

lovestory

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.

alexpotato

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.

yanis_t

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

karencarits

This looks really interesting! I am studying "knowledge-heavy" subjects with lots of facts I need to learn, and have been looking for software where I can write flashcards directly within my notes, and both review them when reading my notes, and globally across notes. I like to have my notes locally, so I didnt find any good solutions. But there are some parsers for anki that can process markdown documents and extract items within them

_puk

Sounds like literate programming in markdown for anki cards.

MichaelNolan

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.

ichverstehe

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/

yellow_lead

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.

allenu

I wrote my own flashcard app and had a very basic import from Anki feature and I have to admit that I underestimated how Anki handles it. My first attempt at import was very naive and sort "flattened" the imported data into simple front/back content. It lost a lot of fidelity from the original Anki data.

After investigating the way Anki represents its flashcards a bit more, I can really appreciate the way Anki uses notes, models, and templates to essentially create "virtual cards" (my term).

I suspect other people creating their own flashcard apps underestimate the data model Anki uses and have a hard time matching their own data model with Anki's, which may be why decent import options are hard to find. If someone wants to support Anki deck import, they have to essentially use the same data model to represent notes and models (plus cloze deletions). I'm now adopting Anki's model for my flashcard app for better import fidelity.

Regarding the SQLite data format, I was thinking it would be great if there were a text-based format instead for defining the deck and its contents as that would make it much easier to collaborate on shared decks on GitHub, like you suggest. It would be great to have a community work on essential flashcard decks together in an open format that encourages branching and collaboration. I know some groups do this with Anki decks, but I can't imagine the SQLite file format makes it easy to collaborate.

I don't think it would be that hard to come up with a universal text file-based format for a flashcard deck that supports notes, models, templates, and assets. For instance, we could have each note placed in its own text file and have the filename encode the a unique ID of that particular note. Having unique identities for everything would make it easier to re-import updated decks to apply new updates if you had previously imported the deck. The note files could also be organized into sub-folders to make it easier to organize groups of info that should be learned together.

rikafurude21

Isnt a sqldump just a text file? That should be easily shareable on Github

yellow_lead

Yes, but for Hashcards they're using markdown, so it's much easier to collaborate on

krychu

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.

smarkmt

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).

themk

Yes, the inability to edit cards due to the content-addressing seems like a majot drawback.

leobg

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.

bangonkeyboard

What was the root question of law?

leobg

Well. Don’t forget I wasn’t really studying “the law”, or “justice”. I was studying for the bar exam. Pretty much two separate things. :)