| Crates.io | elaine-cli |
| lib.rs | elaine-cli |
| version | 0.5.2 |
| created_at | 2026-01-07 00:49:38.244117+00 |
| updated_at | 2026-01-12 20:24:53.329808+00 |
| description | An opinionated, local-first CLI reference manager for BibTeX and LaTeX users. |
| homepage | https://github.com/andrewrgarcia/elaine-cli |
| repository | https://github.com/andrewrgarcia/elaine-cli |
| max_upload_size | |
| id | 2027224 |
| size | 102,236 |
An opinionated, local-first, CLI reference manager for LaTeX / BibTeX users.
Deterministic metadata. Explicit libraries. Local documents, on your terms.
Elaine is a lightweight command-line reference manager designed for researchers, engineers, and writers who:
Elaine does not try to be a PDF library, a cloud sync tool, or a PDF hoarder.
It focuses on one thing: managing references cleanly and compiling reliable .bib files.
Most reference managers:
Elaine takes a different approach:
Each reference is a single YAML file:
.elaine/refs/<reference-id>.yaml
References are:
Each reference has:
Libraries are explicit collections of references:
.elaine/libraries/<library>.yaml
A reference can belong to multiple libraries without duplication.
Libraries also have opaque SIDs.
Anywhere Elaine expects a reference or library, you may use:
Examples:
eln edit rush1988
eln open 55b3ed28
eln pin 9c2128b9 crystal
eln lib ef67
eln lib crystal
eln lib --delete d084
Ambiguous prefixes are rejected explicitly.
Elaine supports linking local documents (e.g. PDFs) to references.
Attachments are:
eln attach <ref-selector> /path/to/paper.pdf
eln open <ref-selector>
Opens the first attachment using the system default viewer.
eln detach <ref-selector> # remove first attachment
eln detach <ref-selector> 2 # remove attachment at index
eln detach <ref-selector> --all # remove all attachments
In verbose status output, references with attachments are marked:
π
cargo install elaine-cli
cargo install --path . --force
.elaine/
βββ index.yaml # active library pointer
βββ libraries/
β βββ <library>.yaml
βββ refs/
βββ <ref-id>.yaml
Everything is plain text (YAML).
eln init
eln add < references.bib
Elaine parses, validates, and stores references atomically.
eln add "The Satanic Verses" "Rushdie, Salman" 1988
eln add -i
eln edit <ref-selector>
Interactive editing with safe ID reconciliation.
eln lib <library>
eln lib
eln lib --delete <library-selector>
Deleting a library never deletes references.
Libraries can be renamed safely without losing references:
eln lib --rename new_name
Renaming:
eln status
eln status -v
eln status -vv
eln status --sort year
Status provides a hierarchical view of all libraries and their references.
Verbosity levels:
eln status
eln status -v
π)eln status -vv
Sorting:
eln status --sort id
eln status --sort title
eln status --sort author
eln status --sort year
Sorting affects reference order within each library.
eln pin <ref> [library]
eln unpin <ref> [library]
Unpinned references become orphaned, never auto-deleted.
eln rm <ref>
Elaine prompts before deleting globally unused references.
eln search <ref>
Search hierarchy:
Results are links, not imports.
eln printed
Generates a deterministic BibTeX file for the active library:
<library>_references.bib
The same content is also printed to stdout.
eln printed libraryA libraryB
Generates a single BibTeX file containing the union of references across the specified libraries:
libraryA+libraryB_references.bib
If the same reference appears in multiple libraries, it is emitted once.
eln printed --all
Generates a global bibliography containing all references across all libraries:
global_references.bib
This file is always named explicitly to avoid overwriting curated library-level bibliographies.
eln init
eln lib machine_learning
eln add < references.bib
eln add "No Free Lunch Theorems" "Wolpert, D.H. and Macready, W.G." 1997
eln add -i
eln status
eln printed
# Multi-library bibliography
eln printed machine_learning background
# Global bibliography (all libraries)
eln printed --all
Elaine is built around a few non-negotiables:
.bib$EDITOR integrationeln check)MIT License