Ditching Zotero for a Text File

2026-06-09

It's fairly well established by this point that I like minimal computing. Despite usually working on notoriously resource-intensive AI projects, there's nothing I like more than getting the most out of my machine in the simplest, cleanest way possible.

As an academic, it's natural to keep track of dozens, if not hundreds, of sources at any one time; pulling from various papers, presentations, and publications in order to build your case. Typically this will all be handled by a bibliography manager with the invariable default choice being Zotero. A fine option by any stretch by its sheer unanimity did prompt me to at least see what else was out there. I tried Jabref, I tried Cobib, I tried Tellico, all to varying levels of success.

It was in switching between all these different platforms that a pattern emerged: I'd export my references to BibTeX and then import that into the new platform; I'd then want to try something new and so would export to BibTeX and re-import again.

It became increasingly clear that all these different options were just glorified front-ends for BibTeX.

BibTeX, the file-format/processor bundled with just about any LaTeX distribution. The format responsible for labelling all your titles, authors, years, sources, any information you might need about a piece of work.

There appears to be this idea that BibTeX is something that should be overlooked wherever possible; used only as an intermediary between your real reference manager and a finished output. It's been my experience that any work is done in a proper reference manager, exported to BibTeX, and then added to the final piece - never actually interacted with directly. That's fine; going from a world of colour-coded lists, drop down filters, and other neat features, to the below can feel a bit brutal to say the least:

@book{abramowitz+stegun, author = "Milton {Abramowitz} and Irene A. {Stegun}", title = "Handbook of Mathematical Functions with Formulas, Graphs, and Mathematical Tables", publisher = "Dover", year = 1964, address = "New York City", edition = "ninth Dover printing, tenth GPO printing" }

But, in the quest to min/max complexity/capability I figured I'd give it a shot. I exported everything to BibTeX, uninstalled whichever reference manager I was using, and just went from there. I expected this to be a fun diversion, a chance to peek under the hood before returning to the safety and comfort of Tellico or Zotero. But that didn't happen. A single BibTeX file has now been my sole reference manager for almost two years.

This hasn't been a slog either, of mindlessly scrolling to through thousands of lines to find the entry I'm after; BibTeX is designed to be easy to navigate, and this is all thanks to its "field types", the data that describes an entry. There's the obvious stuff like 'title', 'author', 'date' etc. but having a look at the full list will reveal there's an option for just about any requirement you might have.

What really makes this approach feasible however is the 'keywords' field which allows you to add extra information of your own choosing about an entry. For me, that tends to be what project the piece relates to, the main topics it covers, whether I've read it yet or not. Rather than a single thousand line file of entries, you can attach keywords to various entries and then just grep your way around to fetch anything of interest. For example, every entry that I've read that relates to cybersecurity:

grep -E "keywords.*have_read|cyber_security" file.bib

If you're particularly committed to just one file, there's also the 'note' field where you can record more detailed information about an entry such as its main findings, methods, and other points of interest.

As with any tool I try to use, I'm always after something that plays well with others in the UNIX-way. I can send the file over here and perform some operation on it, then over there and do another operation. I'm not tied down to the developers of one platform trying to come up with every functionality I might want; I can just stack together operations to do what I'm after as new needs appear. For example, count and list every outlet by the number of times it's referenced:

grep -o journal.* file.bib | uniq -c | sort

BibTeX is surprisingly portable as well. Previously I'd jump around platforms and repeatedly encounter issues where the migration didn't quite work with some entries not transferring all the information attached to them. BibTeX is just plain text; not a sort-of-plain-text-sort-of-SQL-database-sort-of format that many reference managers seem to use. I can attach every reference to an email without much thought. I can add it to version control and track changes over time. I can not worry that anyone else who relies on the file won't be able to access it - it's plain text, it'll be viewable somehow.

As with anything TeX-related, the learning-curve can be steep but, again with anything TeX-related, the rewards tend to compound. LaTeX is pervasive in academia and so developing a good understanding of not just the language but the surrounding tools can go some way in making you not only more productive but also in building a software toolkit that can last across a career.