\compare{bibtex-vs-biber}
BibTeX vs Biber
Both are bibliography processors for LaTeX — but they make fundamentally different trade-offs. This guide covers Unicode support, sorting, performance, and when each backend is the right choice.
- A journal or publisher template requires it
- You use natbib citation style
- Your bibliography contains only ASCII text
- Maximum compilation speed is a priority
- Author names contain non-ASCII characters
- Starting a new project (recommended default)
- You need locale-aware alphabetic sorting
- You want extended fields: doi, url, langid, eprint
\section{What each tool does}
Role of a bibliography processor
Neither BibTeX nor Biber is a LaTeX package — they are external programs invoked between LaTeX compilation passes. They read your .bib database, resolve citations, sort entries, and write a formatted .bbl file that LaTeX reads on the next pass.
BibTeX
bibtex main
Written by Oren Patashnik and released in 1985 alongside LaTeX 2.09, BibTeX is the original bibliography processor. It uses .bst style files written in a stack-based language to control output formatting.
- ASCII-only input by design
- Very fast on any database size
- Required by natbib and most journal styles
- .bst styles are notoriously hard to write
Biber
biber main
Written in Perl by Philip Kime and released in 2009, Biber is the recommended backend for the biblatex package. It uses a Perl-based Unicode Collation Algorithm for sorting and supports UTF-8 natively throughout the entire processing pipeline.
- Full UTF-8 support — no escaping needed
- Unicode Collation Algorithm sorting
- Extended fields: doi, url, langid, eprint
- Full cross-reference field inheritance
\subsection{Feature Matrix}
Side-by-side comparison
\begin{examples}
.bib file comparison
The same database entry in classic BibTeX vs BibLaTeX + Biber. Note how Biber supports UTF-8 directly and additional fields.
% Classic BibTeX .bib — special characters need manual escaping
@article{einstein1905,
author = {Einstein, Albert},
title = {Zur Elektrodynamik bewegter {K\"orper}},
journal = {Annalen der Physik},
year = {1905},
volume = {17},
pages = {891--921},
}
@book{knuth1986,
author = {Knuth, Donald E.},
title = {The {\TeX}book},
publisher = {Addison-Wesley},
year = {1986},
isbn = {0-201-13447-0},
}% BibLaTeX .bib — Biber handles UTF-8 natively, no escaping needed
@article{einstein1905,
author = {Einstein, Albert},
title = {Zur Elektrodynamik bewegter Körper},
journal = {Annalen der Physik},
year = {1905},
volume = {17},
pages = {891--921},
doi = {10.1002/andp.19053221004},
langid = {german},
}
@book{knuth1986,
author = {Knuth, Donald E.},
title = {The {\TeX}book},
publisher = {Addison-Wesley},
year = {1986},
location = {Reading, MA},
isbn = {0-201-13447-0},
}Unicode Support
BibTeX
BibTeX processes source files as 8-bit ASCII. Authors with accented names — Müller, Björk, Nguyen — must be written as M\"uller, Bj\"ork etc. Forgetting an escape character causes garbled output or a bibtex error.
Biber
Biber reads .bib files as UTF-8. You write Müller, Björk, Nguyễn directly. No escaping. Editors and version control tools handle the files naturally.
Sorting
BibTeX
BibTeX sorts entries using raw ASCII byte values. This means uppercase letters sort before lowercase, and accented characters (ä, ö, ü) sort after Z — not in their natural alphabetical position. For English-only bibliographies the difference is invisible; for multilingual work it can produce wrong ordering.
Biber
Biber implements the Unicode Collation Algorithm (UCA) and is locale-aware. Ä sorts with A, Ö with O, and you can specify sortlocale=de_DE for German rules, sv_SE for Swedish, and so on.
\subsection{Migration Guide}
Migrating from BibTeX to Biber
The .bib file format stays the same — the changes are in your LaTeX preamble and citation commands.
% Switching bibliography backend: BibTeX → Biber + BibLaTeX
% REMOVE these (BibTeX-style):
% \bibliographystyle{plain} ← remove from preamble
% \bibliography{refs} ← remove from document body
% ADD this to the preamble:
\usepackage[
backend=biber, % use Biber processor (not bibtex)
style=authoryear, % citation style: authoryear, numeric, alphabetic…
sorting=nyt, % sort by: name, year, title
urldate=iso, % ISO 8601 dates for URL fields
]{biblatex}
\addbibresource{refs.bib} % replaces \bibliography{}
% Then in the document body:
% \parencite{einstein1905} → (Einstein, 1905)
% \textcite{knuth1986} → Knuth (1986)
% \printbibliography → full reference list
% Compile order:
% pdflatex main.tex → biber main → pdflatex main.tex → pdflatex main.tex\bibliographystyle{plain}biblatex controls citation style via its own options — no bibliographystyle needed
\bibliography{refs}This call at the end of your document is replaced by \printbibliography
\usepackage[backend=biber, style=authoryear]{biblatex}Declare biblatex in the preamble; backend=biber selects Biber as the processor
\addbibresource{refs.bib}Replaces \bibliography{}; note the .bib extension is required here
\cite{key} → \parencite{key}biblatex uses \parencite (parenthetical) and \textcite (inline) by convention
\printbibliographyPlace at the end of the document where you want the reference list printed
Compile with bibliography in seconds
FormaTeX runs multi-pass compilation automatically: pdflatex → biber → pdflatex. No local TeX installation required.

