NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3010 most downloaded on PyPI
Bibtex parser for python 3
Last release 2 days ago
02 Oct 2026
Release timing varies
gaps range from 2 weeks to 1.1 years
Nearly every release is documented
notes for 26 of 26 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
35 releases · first in 2013
✨ Support dict(entry) by adding Entry.keys() and iter by @MiWeiss in #631
No functional changes - only contribution guidelines and docs are updated
No functional changes - only contribution guidelines and docs are updated
Full Changelog: v2.0.0...v2.0.1
One column per quarter.
A fully re-write of the library, order of magnitudes faster and with way more features, i.e., a more complete representation of the bibtex conventions
A fully re-write of the library, order of magnitudes faster and with way more features, i.e., a more complete representation of the bibtex conventions in the parser.
Before switching from v1, please read the readme and the migration docs. While it has been in pre-release for multiple years (!), some stuff may still be broken. Don't hesitate to open an issue if you face any specific problems.
Note: This release is indentical to v2.0.0b10
TLDR: Mostly fixes found by code scanning as a preparation for the upcoming v2.0.0 release
TLDR: Mostly fixes found by code scanning as a preparation for the upcoming v2.0.0 release
} by @MiWeiss in #602library parameter from Splitter.split() by @MiWeiss in #610@article(...)) by @MiWeiss in #620Full Changelog: v2.0.0b9...v2.0.0b10
💥[BREAKING CHANGE] - Rename write_file parameters by @cinntamani in #489
write_file parameters by @cinntamani in #489although for a while the old params will still be accepted, see
py.typed and some more type hints by @MiWeiss in #514 (fixes #499 by @jevandezande){"} by @MiWeiss in #518Full Changelog: v2.0.0b8...v2.0.0b9
Release notes were semi-automatically generated. Apologies if some credits were not picked up.
✨ Add NormalizeFieldKeys middleware ( #473 by @Technologicat )
split_multiple_persons_names with single-char middlenames (#476 by @tdegeus )Nonfunctional (formatting and ci) changes: #474 by @tdegeus and #484 by @MiWeiss.
Sorry to all contributors for the delayed release. 🤗
entry.pop_field is renamed to entry.pop
entry.pop_field is renamed to entry.popEntry: Dict-mimicking in operator. by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/458pop_field -> pop (with default) to make API closer to dict by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/466get to mimic dict by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/468allow_inplace_modification. Simplifying examples by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/459BlockMiddleware: default allow_parallel_execution=True by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/460Huge thanks to @tdegeus for all his contributions, and for joining the project as a co-maintainer!
entry.pop_field is renamed to entry.popEntry: Dict-mimicking in operator. by @tdegeus in #458pop_field -> pop (with default) to make API closer to dict by @tdegeus in #466get to mimic dict by @tdegeus in #468allow_inplace_modification. Simplifying examples by @tdegeus in #459BlockMiddleware: default allow_parallel_execution=True by @tdegeus in #460Huge thanks to @tdegeus for all his contributions, and for joining the project as a co-maintainer!
Fixing typos bug report template by @tdegeus in https://github.com/sciunto-org/python-bibtexparser/pull/436
Full Changelog: https://github.com/sciunto-org/python-bibtexparser/compare/v2.0.0b5...v2.0.0b6
Full Changelog: v2.0.0b5...v2.0.0b6
Optionally raise an exception when adding duplicate blocks (#425 by @MiWeiss, reported by @claell )
Minor Changes
Fixes
von-part name parsing (#423 by @mlutze)__version__ (#430 by @MiWeiss , reported by @mestia and @a-detiste)We do not assume anymore that blocks have to start at a new line ( #416 by @zepinglee and @benlogan )
Attention: While this means that we will also parse blocks starting anywhere else (e.g. on the same line where another block ended), this also has some side effects:
@entry{) is found anywhere within that block in addition to its head. This is done on purpose, to allow parsing of faulty files, but may have negative impacts in the few cases where a @entry{ (or similar) are genuinely part of a correct block.%, # , or any other char sequence at the beginning of every line will not work anymore. This was never fully supported anyways, and still waits for its implementation. See #372 .Added option to select encoding of .bib file (#395 by @himcraft)
Changes since v2.0.0b2:
12 # "someval" # someref) correctly. Note: String interpolation on such fields is still unsupported. (#398 by @MiWeiss)This is the first pre-release of v2 (a complete library-rewrite) shipped to pypi. From previous feedback, it is stable enough to be used in most proje
This is the first pre-release of v2 (a complete library-rewrite) shipped to pypi. From previous feedback, it is stable enough to be used in most projects, but please proceed with caution and provide feedback if you identify problems:
v2 as their use-case is not obvious or newer and better alternatives have emerged.🚀 Order of magnitudes faster 🔧 Easily customizable parsing and writing 🌿 Access to raw, unparsed bibtex. 💩 Fault-Tolerant: Able to parse files with syntax errors 🀄 Massively simplified, robuster handling of de- and encoding (special chars, ...). ©️ Permissive MIT license
Use modern names for pyparsing methods (new minimum pyparsing version is 3.0.0) by @jennifer-richards in #512
Full Changelog: v1.4.3...v1.4.4
This release is exactly the same v1.4.2, but just with a bumped number as I screwed up greatly when releasing 1.4.2.: See #496
This release is exactly the same v1.4.2, but just with a bumped number as I screwed up greatly when releasing 1.4.2.: See #496
If you use pypi, it doesn't matter whether you use 1.4.2 or 1.4.3. If you use any other source - which may be dependent on my github tags - it's best to use 1.4.3.
Bugfix: Use raw strings to fix invalid escape ( #427 by @kno10 )
Bugfix: Use raw strings to fix invalid escape (#427 by @kno10 )
Sorry for the late release!
EDIT 18.12.2024 & 19.12.2024: There was a mixup with the linked sources on this github release (v2.0.0b7) was tagged with v1.4.2. Subsequently, 1.4.2 was tagged 1.2.4 (can't make this stuff up 🤦 ). This has now been fixed. I dedided to fix the tag instead of version bumping to create alignment with pypi where the correct code was uploaded. I apologize for any inconvenience this may have caused.
This release contains a range of frequently requested changes, including:
This release contains a range of frequently requested changes, including:
align_values to an int or bool to fix min alignment in writing (#316 by @michaelfruth)customization.getnames: respect protected names: (#334 by @tdegeus)Edit: Due to a mistake, this tag was previously, for a couple of hours, on the wrong commit. This has now been fixed, i.e., the tag has been removed and correctly set again.
Using common strings in string interpolation is now the default (#311 by @MiWeiss). See the PR for more details, and how to fall back to old behavior.
Breaking Changes
----------------
* Using common strings in string interpolation is now the default (#311 by @MiWeiss).
See the PR for more details, and how to fall back to old behavior.
New Features / Improvements
---------------------------
* Add option to adjust alignment of text of multi-line values. (#290 by @michaelfruth)
* Raise warning if parser is used multiple times (#312 by @mrn97),
which leads to a merged library. Set `parser.expect_multiple_parse = True` to disable the warning.
* Allow preservation of existing order of entry fields in writer (#317 by @michaelfruth)
See CHANGELOG file for full changelog.
Release notes for all versions newer than 1.4.0 are provided exclusively on github: https://github.com/sciunto-org/python-bibtexparser/releases
First release after a while, containing of mostly cleanup and minor fixes.
First release after a while, containing of mostly cleanup and minor fixes.
The CHANGELOG for details.
Most of these changes come from @MiWeiss personal fork, as one, hence have a commit id instead of a PR number in CHANGELOG.
homogenize_latex_encoding when authors are lists (528714c)* Support for python 3 only
Handles declarations on lines starting with spaces after comments
BUGFIX: future missing in setup.py
ENH: we use pyparsing (#64) by Olivier Magin.
ENH: customization: handle various hyphens (#76).
API: Previous type and id keywords which are automatically added to the dictionnary are now ENTRYTYPE and ID, respectively (#42).
ENH: support for bibtex with leading spaces
ENH: Add (optional) support for non-standard entry types by Georg C. Brückmann
API: enhance the naming choice for bwriter
ENH: add writer (#16), thanks to Lucas Verney
ENH: support @comment @preambule (escaped)
ENH: split keywords with various separators
Permission from original authors and OKFN to use LGPLv3
ENH: Transformations on characters are now considered as a customization
* DOC: moved to readsthedoc * DOC: several improvements * MAINT: separate customizations
* TEST: initialized * DOC: initialized
* First preliminary release
Your coding agent can read these notes before it upgrades. Set up the MCP server →