Skip to main content

A quiet, powerful home for your references.

Project description

bibtui

A quiet, powerful home for your references.

PyPI Python 3.12+ License: MIT Publish CI

Quick start

# Run without installing
uvx --prerelease=allow bibtui myrefs.bib

# Or install permanently
uv tool install --prerelease=allow bibtui

Why --prerelease=allow? bibtui depends on bibtexparser v2, which is still in beta on PyPI. This flag tells uv to use it. Once bibtexparser publishes a stable v2 release this flag will no longer be needed.


Screenshots

Light theme Dark — Catppuccin Mocha
light theme catppuccin mocha
Nord — keywords modal
nord with keywords modal

bibtui is a beautiful, keyboard-driven terminal app for researchers who live in the terminal. Browse and edit your .bib file, fetch open-access PDFs with a single keystroke, track what you've read, and never leave the command line — no database, no sync daemon, no account required.

Mouse users welcome. bibtui works fully with the mouse — click, scroll, select. You just need to launch it from a terminal: uvx --prerelease=allow bibtui myrefs.bib


Why bibtui?

bibtui JabRef Zotero
Runs in the terminal
No database / sync daemon
Git-friendly plain .bib
Works over SSH
Full Textual theming
Pure Python, installs less than 1s

Well, I mostly built this for myself. I was trying many bibliography tools over the years and in the end stuck with JabRef. It worked directly on the bib file, had import from DOI, PDF fetching, ratings and PDF linking. What I did not like was the UI and the many features I don't need. Anyway, I kept using it, more or less frustrated.

Then I switched to Linux on my MacBook M1 and suddenly couldn't install JabRef anymore, even after trying different approaches. That was it, I decided to make my own that does what I want, looks nice, and nothing more.

I also wanted to try out Claude Code for a project from scratch, so yes, most of the code was AI-generated. Otherwise I would never have done it. It still took many hours of work and I used my experience from many Python projects. I reviewed everything and have tests for the non ui part.


Features

  • Browse & search — instant search across title, author, keywords, journals and cite key
  • Import by DOI — paste a DOI and metadata is fetched automatically
  • Fetch PDFs automatically — tries arXiv → Unpaywall (free, open-access) → direct URL
  • Library-wide actions — fetch all missing PDFs and unify citekeys to AuthorYear
  • Add existing PDFs — pick a file from your Downloads folder with a live filter
  • Edit entries — field-by-field form or raw BibTeX editor (toggle with v)
  • Read states & priorities — track what you've read and what matters most
  • Star ratings — rate entries 1–5
  • Keywords editor — manage tags inline
  • JabRef-compatible — file links use JabRef conventions; open the same .bib in both tools
  • Git-friendly — it's a plain text file (.bib); commit, diff, and collaborate normally
  • Full Textual theme support — including automatic detection of the omarchy themes
  • Works anywhere uv does — SSH, HPC clusters, a colleague's laptop

Installation

Recommended — uv (fastest)

uv tool install --prerelease=allow bibtui

updating an exising installation:

uv tool upgrade bibtui

pip

pip install --pre bibtui

Try without installing

uvx --prerelease=allow bibtui references.bib

Note: The --prerelease=allow / --pre flag is needed because bibtui depends on bibtexparser v2, which is currently in beta on PyPI. Once it releases a stable v2 this flag will no longer be required.


Usage

bibtui MyCollection.bib

On first launch bibtui shows a short onboarding wizard that pre-fills sensible defaults for your PDF directory, Downloads folder, and Unpaywall email (no registration required — the email is only used for rate-limiting).


PDF workflow

f tries three sources in order:

  1. arXiv — for entries with a 10.48550/arXiv.* DOI or an arxiv.org URL
  2. Unpaywall — free open-access lookup by DOI (set your email in Settings; no account needed)
  3. Direct URL — if the entry's url field points directly to a PDF

PDFs are saved to your configured base directory and the entry's file field is updated automatically in JabRef format.


Philosophy

  • Your .bib file is the source of truth
  • No hidden database
  • No setup, point and shoot possible
  • No lock-in
  • No accounts
  • keyboard and mouse support
  • nice looking
  • focused featurset. For cleanup use bibtex-tidy or work directly on the bib file

Development

git clone https://github.com/tgoelles/bib_tui
cd bib_tui
uv sync
uv run bibtui tests/bib_examples/MyCollection.bib

Run the tests:

uv run pytest -m "not network"

Live-reload during development:

uv run textual run --dev src/bibtui/main.py -- tests/bib_examples/MyCollection.bib

Related tools

  • JabRef — GUI reference manager, same .bib format
  • cobib — another terminal BibTeX manager
  • bibman — minimal TUI reference manager
  • bibiman - looks interesting but it did not work

FAQ

Does this modify my .bib formatting? Yes. but we also write a backup file

Can I use it alongside JabRef or XYZ tool for .bib? Yes. they both just read bib files and bibtui follows JabRef conventions.

License

MIT © Thomas Gölles

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bibtui-0.11.0.tar.gz (39.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bibtui-0.11.0-py3-none-any.whl (46.6 kB view details)

Uploaded Python 3

File details

Details for the file bibtui-0.11.0.tar.gz.

File metadata

  • Download URL: bibtui-0.11.0.tar.gz
  • Upload date:
  • Size: 39.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for bibtui-0.11.0.tar.gz
Algorithm Hash digest
SHA256 56a384996bab267430d0550661850eeb8bdc517991399acedd08701641b3af0d
MD5 150d8650c2e5a4925e2993e9b1d58a4a
BLAKE2b-256 224e429f6b8de23e46f43f8a3ca0e3f3e2aab9f1d2e23d649ca6bd36a4b247e0

See more details on using hashes here.

File details

Details for the file bibtui-0.11.0-py3-none-any.whl.

File metadata

  • Download URL: bibtui-0.11.0-py3-none-any.whl
  • Upload date:
  • Size: 46.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for bibtui-0.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ec5edb5cc01b8d4086bd68ce74a614fbe16ca2fecdafde4def6dd3a5523f9066
MD5 946dc69b1fa47c0fd2c31eba8dbded26
BLAKE2b-256 532e92ef979362427087cbb7e0774f2e15ed7271c00d22ff5e77376dedb82545

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page