Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[0.15.2] - 2026-06-23¶
Fixed¶
- Config could reset to defaults after an upgrade — the settings file (
~/.config/bibtui/config.toml) is now written with a proper TOML serializer instead of hand-built strings, so values containing quotes, backslashes, or newlines can no longer produce an unparseable file. If a config still fails to parse, it is preserved asconfig.toml.corruptbefore defaults load, so a subsequent save can never silently overwrite recoverable settings. (uv tool upgradeitself never touched the config; the reset was a parse-failure-then-overwrite.)
[0.15.2] - 2026-06-23¶
error, never published
[0.15.0] - 2026-06-23¶
Added¶
- Manual "Check for updates" command — added a Check for updates entry to the command palette (
Ctrl+P) that queries PyPI immediately for a newer bibtui release, bypassing the once-per-day automatic throttle, and reports the result. - Documentation site — added a Material for MkDocs documentation site (user guide, PDF fetching, search, a dedicated team-collaboration guide for sharing a library via Git, configuration, and development), published to GitHub Pages by a new
docsworkflow. Screenshots are generated from the running app byscripts/generate_screenshots.pyand regenerated on every deploy so they never go stale. The README is now a concise overview that links to the site.
Fixed¶
- Chicago citation preview — the Chicago (author-date) style no longer shows (unavailable) for entries with a page range. The bundled CSL declares
page-range-format="chicago-16", which citeproc-py mishandled and raised an error on; unsupported page-range formats now fall back to an expanded range instead of failing the whole citation. - Help menu alignment — keybinding descriptions now line up in a consistent column across every section (the Other and Library actions sections were previously misaligned).
- Help menu out-of-date entries — the help now reflects current commands, including the Check for updates library action that was missing.
Changed¶
- Help menu internals — removed a duplicated, hand-maintained copy of the keybindings reference; the help screen is now rendered from a single source of truth, preventing the two copies from drifting apart.
- Modal styling — all dialogs now share a common
_BaseModalbase class for their centered layout, border, background, and padding instead of each repeating the same CSS; individual modals only declare what differs (size, border color). No visual change.
[0.14.0] - 2026-05-29¶
Added¶
- Citation preview in entry detail — added citeproc-py based formatted citation preview with a CSL style selector (currently bundled with
copernicus-publications.csl). - Copy citation shortcut — added
Shift+Cto copy the currently rendered citation preview while keepingCtrl+Cas citekey/default copy behavior. - Config-based CSL styles directory — citation styles now live in
~/.config/bibtui/csl; on first run bibtui seeds common defaults: Copernicus, APA, IEEE, Vancouver, Chicago (author-date), and Harvard (Cite Them Right). - Import citekey conflict handling — DOI/paste imports now handle existing keys by rejecting same-title duplicates and otherwise assigning the next free lowercase suffix (
a…z, e.g.Goelles2025a).
[0.13.0] - 2026-05-29¶
Added¶
- PDF actions UI added - moved PDF operations into a dedicated collapsible
PDFsection with state-aware disabled actions. - Copy PDF action behavior — copy uses OS file clipboard formats (Linux
wl-copy/xclipURI list, macOSosascript, WindowsSet-Clipboard -Path).
Fixed¶
- Safer OpenAlex DOI fetching — when a DOI is present but OpenAlex finds no DOI match, PDF fetching no longer falls back to title search, preventing false-positive downloads of wrong PDFs (regression covered with an
inproceedingsDOI case).
[0.12.4] - 2026-05-04¶
Fixed¶
- bibtexparser import crash on startup — removed a runtime type annotation reference to
bibtexparser.model.Libraryin the BibTeX parser, preventingAttributeError: module 'bibtexparser.model' has no attribute 'Library'on environments where that symbol is absent.
[0.12.3] - 2026-05-04¶
Error, release yanked
[0.12.2] - 2026-05-04¶
Changed¶
- BibTeX save strategy — saving now preserves untouched source text and applies minimal diffs instead of rewriting the whole file.
- Entry update granularity — changed entries are now patched at field level so unchanged fields in the same entry stay byte-identical whenever possible.
- Change detection — entry change detection now uses bibtexparser-derived field maps instead of a hard-coded field tuple; custom / unknown fields in
raw_fieldsare handled uniformly without any special-casing.
[0.12.1] - 2026-05-04¶
- From DOI import compatibility — pinned
httpxto<1.0to avoid runtime breakage withhabanerowhen pre-releasehttpx 1.0variants are installed (get() got an unexpected keyword argument 'params').
[0.12.0] - 2026-05-02¶
Added¶
- File browser startup mode — start bibtui without an initial file, using Textual's native file tree to browse and open library files. Includes quick access to recently opened files
- Icon -- I made a simple pixel based icon. So you can install it as a TUI with an icon.
- Optional OpenAlex PDF lookup — add an OpenAlex API key in Settings to enable an additional PDF fetch source (used before Unpaywall).
- OpenAlex fetch strategy — OpenAlex now prefers DOI lookup first and falls back to title search when DOI is missing or unresolved.
- BibTeX copy shortcut — added
Ctrl+Shift+Cto copy the currently selected full BibTeX entry, plusCtrl+Yas a terminal-safe fallback.
Changed¶
- PDF fetch success feedback — success messages now show which provider supplied the PDF (for example OpenAlex, arXiv, Copernicus, Unpaywall, or Direct URL).
Fixed¶
- Theme synching with omarchy -- now it can sync with any omarchy theme and does it automatically.
[0.11.6] - 2026-04-01¶
Added¶
- Copernicus PDF fetching — PDFs for all
10.5194publications (preprints and articles) are now fetched directly from copernicus.org using the DOI structure.
Fixed¶
- From DOI — preprint journal — journal name is now resolved for preprints via Crossref lookup; EGUsphere returns
"EGUsphere"as a special case. - From DOI — preprint year — year extraction now falls back to the
posteddate field.
[0.11.0] — 2026-02-27¶
Added¶
- Table-pane maximize toggle — press
mto maximize/restore the entry table pane for focused browsing. - Date-added table column — entry list now includes an
Addedcolumn with normalized date display and sorting support. - Library PDF fetch preflight modal — library-wide fetch now opens a dedicated confirmation modal with an
Overwrite broken linkstoggle. - Release helper for minor bumps — added
just minorto bump, tag, and push minor versions.
Changed¶
- Library fetch workflow — existing local PDFs are auto-linked before batch fetching missing files.
- PDF linking behavior — fetching now re-links an entry to an already existing destination PDF when the stored link is broken.
- Entry refresh UX — entry selection is preserved after list refresh operations.
- Layout behavior — entry list pane now uses flexible width (
1fr) for better split behavior. - Release task naming —
just release-patchwas renamed tojust patch.
Fixed¶
- Date handling consistency — DOI imports now use centralized date-added timestamp utilities.
- Regression coverage for dates — added tests for extracting, parsing, and formatting bibliography date fields.
[0.10.0] — 2026-02-26¶
Added¶
- Library-wide PDF fetching — new command-palette workflow to fetch PDFs for all entries missing local files.
- Library-wide citekey unification — new command to normalize citekeys to canonical
AuthorYearform across the whole library. - OpenAlex quick lookup —
Shift+Bopens OpenAlex for the selected entry from the footer action; search uses title first and falls back to DOI.
Changed¶
- Citekey generation and normalization — improved canonicalization and collision handling for more consistent keys.
- Clipboard behavior in context —
Ctrl+Cnow prefers focused text widgets (e.g., raw BibTeX view) and falls back to citekey copy when no text widget is focused. - Documentation updates — README installation/upgrade guidance and help text were updated for the new library and OpenAlex workflows.
Fixed¶
- Raw-view copy usability — copying selected text now works reliably in non-edit raw BibTeX contexts.
- Regression coverage expansion — added tests for library fetch and citekey normalization/unification paths.
[0.9.9] — 2026-02-26¶
Added¶
- Background update check — checks PyPI once per day on startup in a non-blocking background thread and notifies when a newer stable release is available.
- Update-check setting — new Settings toggle to enable/disable startup update checks (enabled by default).
- Update metadata persistence — stores last check time, last notification time, and latest seen version in config under
[updates].
Changed¶
- PDF module consolidation — PDF path helpers and fetch logic are now grouped under
bibtui.pdf. - Settings layout readability — helper text is shown before each control with clearer spacing between setting groups.
Fixed¶
- Theme consistency in modals — removed hard-coded Rich color tags from Add PDF / Fetch PDF related messaging so colors follow theme tokens.
- Safer PDF downloads — downloads now use atomic temp-file writes and cleanup to avoid leaving partial files.
- Direct URL fetch robustness — falls back to GET when HEAD is blocked and validates PDF via content type or PDF magic bytes.
- Config resilience — invalid or unreadable config files now fall back to defaults instead of crashing startup.
[0.9.8] — 2026-02-24¶
Added¶
- Auto-fetch PDF on import — when the setting is enabled and a PDF base directory is configured, a PDF is automatically fetched after adding an entry via DOI or BibTeX paste.
- Jump to newly added entry — after importing via DOI or pasting a BibTeX entry, the table cursor now scrolls to and selects the new entry.
- Add PDF modal preview — the Add PDF dialog now shows a file preview before linking.
- Citekey search filter — search supports
c:/citekey:/key:prefix to filter by citation key. - Journal search filter — search supports
j:/journal:prefix to filter by journal or booktitle. freshdev command —just freshdeletes config files to reproduce the first-run experience.- Improved onboarding — better first-run modal and config initialisation flow.
Fixed¶
Backspacenow also triggers entry deletion (unified withDelete).- Config-related test fixed.