citekeep¶
Clean a reference once. Reuse it in every LaTeX project.
You write several papers at once, with different co-authors. Each has its own
.bib. The same reference gets typed again in each of them, a little
differently every time, and the one you cleaned up two years ago sits in a
folder you have since archived.
citekeep gives you one canonical library — a plain .bib file you own — and
materialises each project's bibliography from it. It searches the project
first, then your library, then zbMATH, with CrossRef as a fallback.

Project (●) first. Personal library (○) next. zbMATH and CrossRef only when needed.
Where you will actually use it¶
The command line is the engine, a diagnostic surface, and the home of rare maintenance operations. The daily loop belongs in your text editor, which wraps the command line and presents it as one integrated gesture: you ask for a reference, and the right record is found, materialised if needed, and cited under the key valid in the document you are writing — without leaving the buffer.
The editor integration shipped today is for Emacs; see Citing while you write. Any editor can do the same through the Python API or the JSON protocol.
The tutorial uses the command line, because it is reproducible for everyone and shows what the editor is doing on your behalf.
Three things that follow from the design¶
- Your co-authors need nothing. The project keeps an ordinary,
self-contained
.bib, and their citation keys are never rewritten. When a local key differs from the canonical one, the relationship is recorded in the entry itself — see Working with co-authors. - It works offline. A reference met once stays searchable on a train, and metadata corrected once is never repaired a second time.
- It refuses rather than guesses. When the evidence does not settle whether two records are one work, citekeep says so and writes nothing — see Deciding what counts as one work.
Where to go next¶
| If you want to | Read |
|---|---|
| install it and synchronise a first project | Install, then the tutorial |
bring years of scattered .bib files together |
Starting from scattered files |
| cite while writing, in Emacs | Citing while you write |
| settle a conflict citekeep reported | Resolving conflicts |
| look up a command or an option | Commands |
| understand why it is built this way | Why keep a master |