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.
It depends on the nature of what’s being learned. For language learning for example this is very effective as you can create it directly from content so that you have context.
Not abandoned exactly, I just haven't been working on the project that I wanted it for in gosh has it been that long.
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/mtCould you imagine adding support for this?
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.
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).
# 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.
Every product will eventually use markdown as their content store.
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.
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.
(Anecdotally, Anki has seen a huge quality increase in the past couple of years.)
This needs to be contributed by folks coming from Anki. By folks who actually have interest in the feature.
Some examples would be Michael Nielsen, Gwern Branwen, Andy Matuschak and u/SigmaX (reddit - not sure his real name)
* http://augmentingcognition.com/ltm.html * https://gwern.net/spaced-repetition * https://andymatuschak.org/prompts/ * https://imgur.com/a/anki-examples-math-engineering-eACA7QM * https://imgur.com/a/anki-practice-cards-language-music-mathe...
Sure, we all need to study and learn things in life here or there, but the flashcardification of the process makes it boring and painful.
From my own personal experience trying it, I find the process to be too far removed from the practice of accomplishing what you are setting out to learn to do. An analogy might be like memorizing a recipe by using Anki cards and not physically cooking it versus doing cooking it a bunch of times without deliberately trying to memorize the recipe. For me, the latter is far more effective because you have your 6 senses of mnemonics to memorize what you are doing. I may not remember that I need 2 cups of flour, but I remember that I scooped my purple flour scoop twice and that the white contents felt powdery like flour and grainy like sugar. Even if I forgot the recipe my body would have smelled, seen, touched, weighed the material and I have all these physical clues to work with.
Learning by doing, experiencing, immersing is more of a "repetition that you don't even know you're doing" while Anki/SRS has the feeling of a chore and an obligation.
https://github.com/eudoxia0/hashcards
https://github.com/eudoxia0/hashcards?tab=readme-ov-file#ima...
You can customise note types with CSS and Javascript, which means that you can make cards look however you want.
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.
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.
The people who hunt for alternatives are probably procrastinating, and the people who write their own apps are definitely yak shaving.
Also "half an hour" != "slow learner", everything depends on the quantity, the difficulty and the chosen desired retention.
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.
However the reason I find it off-putting is because, as someone who generally lives in the terminal, and Anki is one of the few remaining GUI apps I rely on, I actually "would" have preferred a decent terminal alternative with similar features. But introducing the alternative by saying how much Anki sucks immediately puts me off when all that criticism doesn't resonate with me.
It literally works as anti-promotion here: if Hashcards promotes itself as missing all those features of Anki which I think are great, and my time is limited, then I have much less of an incentive to invest the time to check it out. Which is ironic, because in reality it may be great (like most of his other work) and actually suit my use-case really well.
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.
"Oh, that must have been frustrating."
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 build a connection with someone.
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.
I see this "complainy" way of engaging as unproductive and i treat it the same way I would treat my kid when having a tantrum, I accept it, I listen to him, I am understanding of his state and his emotions, but I also nudge, coach and hope they develop healthier and more constructive ways of dealing with their problems.
> I see this "complainy" way of engaging as unproductive
You are merely defining "constructive" and "productive" to whatever suits you.
> I get wanting to vent and wanting to be heard but solutions should come first.
One thing I learned after learning all these skills (later in life), is to openly tell others "The word 'should' is not in my vocabulary."
should is usually a means to be lazy in explaining your thought process. Why should solutions come first? What problem are you trying to solve, and why that problem? Understand that addressing emotions is solving a problem - it's just a different one from what you're trying to address. Solving that problem (well) often results in fewer problems down the road. The one you're trying to solve likely won't.
To directly address the topic - solving the emotional problem first makes them more open to listening to your (other) solution.[1]
> but I also nudge, coach and hope they develop healthier and more constructive ways of dealing with their problems.
Tip for the future: Being judgmental is going to negate most of your efforts. There's nothing wrong with nudging people down a path you feel is right. There is a problem in labeling the behavior as "unconstructive".
And, as I said in another comment, I'd wager good money that your behavior is not particularly different. You may not do it as often as the people you speak of, but you do do it - and you won't recognize it until you dig deeper into understanding the bigger picture. Once you do (as I did), you'll find plenty of examples in your life - past and present - where you behaved in the same "unconstructive" way, and didn't realize it.
(And in the off chance you have realized it, and criticize yourself for those past trespasses, you are putting a barrier to improvement).
[1] And yes, that's true even for you! You merely have to go back to your life where someone told you something (that you later found to be correct) and you didn't follow it, and ask why. There are multiple reasons people don't, but this is one of them. Distrust, dislike, disdain, etc lead to devaluing things others say.
And as another commenter put it:
> You can be right, or you can be happy.
Are both invoking a false dichotomy. I phrase it differently:
"Put the focus on being useful, not on being right."
One often can be both right and useful. More importantly, being useful often means ignoring (minor) wrong things.
I had a coworker who focused on being right to the extreme. When someone would get stuck on a technical problem, he was masterful in being correct without helping the other person. He wouldn't look at the bigger picture, and wouldn't spend time trying to understand the other person's goals beyond the immediate problem he was facing.
Often, the person seeking help was phrasing things poorly (because of a poor understanding), and instead of diagnosing the problem, he'd just focus on what was said and provide a very correct and useless answer.
I was like that (perhaps I still am), just not to as extreme degree. The difference was that I wasn't as annoying in being correct, and people were comfortable in telling me "Yes, but none of what you said is helping me!" at which point I was forced to understand the bigger picture.
So: Before jumping to be right, focus on the real problem, and solve that (i.e. being useful). Forget the little minor incorrectness that was presented to you. Dwelling on correcting it is helping no one.
More importantly, to me, it engages me with the exact tradeoff that I have found myself choosing between. I find it helpful to make the choice explicit, rather than implicit and driven by emotion.
If your version works for you, then great. But for me, prioritizing useful over right, begs the question of what useful means, and who gets to define it. The answer to that situation isn't currently obvious to me. I've spent most of my life putting one foot in front of the other, chasing fairly clear goals. And now I'm trying to figure out what goals I should even be chasing at the moment.
It may be that your version might appeal to some future version of me. But for present me, my version is far more directly relevant.
I'm not sure that our versions differ.
> But for me, prioritizing useful over right, begs the question of what useful means, and who gets to define it.
The other party, generally. What I meant by "being useful" is to begin with finding out what the other person needs. What problem are they actually trying to solve? It could be a technical problem different from what they came to me with. It could be that they just wanted to vent and relate something (in which case it totally is not helpful to point out many of the (e.g. technical) mistakes they made in their narration). Being useful can be something different from all of the above.
My point was that when the focus is on being useful, you are more likely to ask yourself "How do I know my behavior/response is actually helping them?"
One can easily be right and yet not solve anyone's problem.
If you want to take it offline, my email is in my profile.
Yes, but that's still a solution minded thing. I sometimes complain as well, but, as mentioned, as sort of a rubber ducking method. I listen to the proposals again, I go, nah, tried that, It leads to X, that doesn't work because of Y, but, sometimes, even with these obvious solutions, there are tiny aspects I overlooked or bypasses I did not consider, so this is still potentially useful. And, yes, if we both can't find a solutin that is acceptable, then comiseration is in order. But I'd never manifest anger or disapproval about someone wanting to help.
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.
This will be hard for you to believe, but I will easily wager good money that at times you yourself behave this way. You only become aware of it after both below are satisfied:
1. You've encountered someone as annoying as yourself :-)
2. You learn a bit more about the dynamics of conversations.
If there's any time someone got mad at you and said "You just want to complain and not fix the problem!" chances are this dynamic was in play. Or "I've given you so many suggestions but you don't want to fix the problem and just complain!"
Everyone acts that way to some extent. Some more than others.
Here's a typical scenario (common amongst spouses, but even amongst friends). You're annoyed/down due to problem X. Your friend sees you that way and inquires why you're down. You tell them, and they spend all their time giving you suggestions. But you never asked for suggestions!
It's not a big leap to go from there to someone simply telling you their problem because they want to get it out of their system.
Some books I've read that made it easier to understand all of this:
- Difficult Conversations
- Nonviolent Communication[1]
- Crucial Conversations
All of these will emphasize the role emotions play in dialogue. And when you read them, chances are very high you'll find yourself in them (i.e. they will give examples that you can relate to - on both sides of the conversation).
Once I read these, many, many "poor" conversations from my life earlier suddenly made sense to me. One nice outcome was learning that even though at times people were upset at me, it wasn't always "my fault". I had always taken for granted that because I didn't spend much time playing social games, that my social skills were poor and likely I did something wrong. Reading these made it clear how often the dysfunction was on the other side, and having good/poor conversations is not well correlated with "social skills".
[1] HN has as strong knee jerk reaction when this book is mentioned, but in my experience, everyone who complained had not read the book, and almost all the complaints were semi-strawmen.
> 2. You learn a bit more about the dynamics of conversations.
This is the last thing I expected to find under a post about an SRS, but I think I’ve just gone through this over the course of this year. (I knew I was extremely annoying at times, but didn’t realize how much annoying I was, and what to do. I think I know now :’)
Love HN for weird tangents like this. Thanks for the reading list!
The thing that drives me nuts is when people start throwing out immediate ideas, sometimes before I've even given a full account of the problem. But even if they do wait, I don't feel like explaining why all your immediate ideas don't work - most of the time, I've also already thought of those things. Try asking questions instead.
>I am a professional problem solver.
As it so happens, you can probably apply the latter to solve your knowledge gap re/ the former.
Unless you don't actually consider it a problem, but a facet of your personality or something. Valid. But, if you are capable of applying that thinking to yourself, why are you not able to extend the same grace to others, and wait until you're asked for a solution?
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?
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.
I simply space on a Fibonacci sequence, and the fact that it is overkill for being able to answer is a feature. Because my goal is to react the right way in similar situations, not to get an answer right on the written test.
> "Because my goal is to react the right way in similar situations, [...]."
Those reviews are generally conversations with my wife.
I'm happy to say that I've been passing with flying colors. (Mixed with some regrets that I didn't start this many years ago...)
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"?
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.
Maybe you should take action if you think someone else is in the wrong? You did.
Smart people will even talk to a rubber duck to solve problems, because sometimes there's something obvious you missed.
If you are reading a book with DRM, marking things and planning to load them into SRS later, take care as it silently stops saving the highlights as text.
Do you use Syncthing or something else to sync your performance history between devices?
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?
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.
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.
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.
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.
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.
Wouldn't this invalidate card's review history if I am to fix a typo in the card's text?
Not sure this needs to relearned from scratch
Kind of wish I had an SSH frontend though.
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.
I think that this should turn some of those temporary friendships into lifelong ones instead!
So schedule a call for a week after the cruise. Then 2 weeks after that. Then 3 weeks after that. Then 5, 8, 13, 21, and so on.
Each call will bring back for both of us what it was like on that cruise, bring back that connection, and make both of us feel that any other call (say to meet on another cruise) would be welcome.
At least that's the theory. I won't know how well it would work until after I try it.
(My wife and I are doing something similar. Every week we pick a memory that we put into a system we have. The joint review of our memories each Sunday is a high point. So I'm sure from that, that this would bring back that sense of connection.)
org-drill is the original main package, but the newer org-srs is probably better (and supports FSRS).
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.
That is: the historical data in on the same file as the card. This makes cards trivial to sync.
Man I was really looking forward to seeing how they stored review history in plain text.
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.
I'm happy to hear other suggestions too?
Every 6 months I create around 5000 Anki cards out of the last 6 months for reading practice of the YLE Selkouutiset news, on a sentence by sentence basis: https://github.com/Selkouutiset-Archive/selkokortti
For raw isolated vocabulary my finfreq10k Anki deck can't be beat! https://ankiweb.net/shared/info/1149950470
But in your case, and for writing practice, you may also like https://github.com/hiAndrewQuinn/finyap , which is self-hosted in the sense that a new deck is just a CSV file in "scenarios".
Tsemppiä vaimollesi!
The feature
https://learnalist.net/faq/add-a-list-overtime-for-spaced-le...
Bulk import ui https://learnalist.net/toolbox/srs-add-overtime-v1.html
You’re welcome to try it, it is not self-hosted.
I also have a mobile app, and have been thinking of how to simplify the server etc.
Equally been thinking about how to modify the mobile app to work better with a different backend but still maintain notifications (local instead of server).
It used to be in the public domain but I moved it to a private repo. I am open to moving it back, there is just a small part of the code I want to keep private.
Any way to use them, or do I have to go through markdown format?
jcul•2mo ago
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.