biblialibera
v0.4.0
Published
Structured Bible text (formal and simple registers) from the Biblia Libera open translation, one entrypoint per language (biblialibera/pt), plus the original-language source texts (biblialibera/original).
Maintainers
Readme
Biblia Libera
An open, transparent, AI-assisted Bible translation from the original languages into modern language.
What this is
Biblia Libera translates the Scriptures directly from the public domain source texts in Hebrew and Greek into contemporary language, using large language models as the translation engine and an open, verifiable pipeline as the methodology.
Everything is published in this repository: the source texts, the translation prompts, the consistency glossary, the automated cross-checks against reference translations, and the review status of every book. The goal is that anyone can inspect how every verse was produced, flag problems, and reproduce the process.
The first target language is Brazilian Portuguese, in two registers:
- formal: contemporary formal Portuguese, balancing fidelity to the original form with fluid reading
- simple: accessible vocabulary and short sentences, prioritizing immediate comprehension
Both registers are generated from the same source texts and the same exegetical base, so they differ in register, not in interpretation.
Using the text in code (biblialibera)
Pre-release (0.x): complete, but not human-reviewed. All 66 books are bundled in Portuguese, and every one is at
status: checked(passed the automated audit) but has not completed human review. Expect corrections; the public API may still change before 1.0. Each book carries itsstatusso you can filter. Do not treat 0.x as a final, authoritative text.
The text is published to npm as structured JSON with a small, dependency-free
API. One package, one entrypoint per language: import biblialibera/<lang>
(biblialibera/pt today). Verse text comes clean (footnote markers and italic
markup removed), with footnotes in a separate array.
npm install biblialiberaconst pt = require('biblialibera/pt');
// or: import pt, { getVerse } from 'biblialibera/pt';
pt.getVerse('Jonah.1.1', { register: 'formal' });
// {
// id: 'Jonah.1.1', chapter: 1, verse: 1,
// text: 'A palavra do SENHOR veio a Jonas, filho de Amitai:',
// footnotes: ['Hebraico: YHWH, o nome pessoal de Deus. ...']
// }
pt.getChapter('Jonah', 1, { register: 'simple' }); // { chapter, verses: [...] }
pt.getBook('Jonah', { register: 'formal' }); // full book with chapters
pt.books(); // per-book summary + statusPass withOriginal: true to get the matching original-language verse
alongside the translation, looked up by osisID:
pt.getVerse('Jonah.1.1', { register: 'formal', withOriginal: true });
// {
// id: 'Jonah.1.1', chapter: 1, verse: 1,
// text: 'A palavra do SENHOR veio a Jonas, filho de Amitai:',
// footnotes: [...],
// original: { id: 'Jonah.1.1', chapter: '1', verse: 1, text: 'וַֽיְהִי֙ דְּבַר־יְהוָ֔ה ...' }
// }withOriginal works on getBook/getChapter/getVerse alike (every verse
in the result gets an original field) and has no cost when omitted: the
original-texts bundle is only read, and only for the books actually
requested, when withOriginal is set.
The root biblialibera is a registry over what is bundled:
const bl = require('biblialibera');
bl.languages(); // -> ['pt']
bl.lang('pt').books(); // same API object as require('biblialibera/pt')Per-language API: books(), getBook(book, opts?),
getChapter(book, chapter, opts?), getVerse('Book.chapter.verse', opts?),
registers(), language(). Books are identified by OSIS code (Gen,
Jonah, Matt, ...); opts.register is "formal" (default) or "simple".
Lookups return null when a book, chapter, or verse is not bundled. Only books
that have passed the automated audit are shipped; each carries its status
so consumers can filter. The bundle is built from the translation sources by
pipeline/build-package.js.
Original-language source texts
biblialibera/original bundles the texts every translation is made from
(Hebrew WLC, Greek Nestle 1904, Greek Septuagint/Swete), in the same
chapters-of-verses JSON shape as the translations, so the two line up by
osisID. No registers here, just the source text:
const original = require('biblialibera/original');
original.getVerse('Gen.1.1');
// { id: 'Gen.1.1', chapter: '1', verse: 1, text: 'בְּרֵאשִׁ֖ית בָּרָ֣א ...' }
original.corpora(); // -> [{ code: 'wlc', name: 'Westminster Leningrad Codex', license: ... }, ...]
original.books(); // per-text summary (osis, corpus, chapters, verses)API: corpora(), books(), getBook(osis), getChapter(osis, chapter),
getVerse('Book.chapter.verse'). Built by pipeline/build-original.js from
sources/canon.json, so it stays in lockstep with which texts are classified
there. See Source texts below for licensing per corpus.
Why
The principles behind this project are not new: translation from the original Hebrew and Greek, contemporary language, honest footnotes where the original is ambiguous, and free access for everyone. They are the common ground of five centuries of Bible translation, and the Second Vatican Council stated them explicitly in Dei Verbum (22, 25): translations "especially from the original texts", made accessible to all, "provided with suitable footnotes". What is new here is the engine and the transparency of the process. See docs/why.md for the full rationale, including what this project does and does not claim.
Source texts
| Testament | Text | Language | License | |-----------|------|----------|---------| | Old Testament | Westminster Leningrad Codex (WLC) | Hebrew | Public domain | | New Testament | Nestle 1904 (Eberhard Nestle, Novum Testamentum Graece) | Greek | Public domain | | Deuterocanon | Septuagint (Swete 1891-1912) | Greek | Public domain (transcription data: GPLv3) |
Canon and editions
The project is ecumenical: one translation, usable by all Christians. Every
book is classified in sources/canon.json (protocanonical, deuterocanonical,
New Testament), and editions are assembled from that classification rather
than hardcoded:
- catholic: 73 books, deuterocanon interleaved in the traditional order, Greek additions to Esther and Daniel
- protestant: 66 books (also the Lutheran order)
- new-testament: the 27 New Testament books, for pocket editions
Same translated text, same footnotes, different assembly. The deuterocanonical
books are declared in the canon file with a planned Septuagint source corpus;
see sources/README.md.
Repository layout
sources/ Normalized source texts, one file per book, verse per line
canon.json Book classification and edition definitions (catholic, protestant, NT)
wlc/ Hebrew Old Testament
n4/ Greek New Testament
languages/ Per-language guidelines the AI translator follows
pt/ Style guide, glossary, book names, review status
translations/ Translated books, strict Markdown, one file per book
pt/
formal/ Portuguese, contemporary formal register
simple/ Portuguese, accessible register
pipeline/ Scripts: normalization, parsing, validation, cross-checks
docs/
why.md Rationale and the tradition this project stands in
format.md Translation file format (Markdown grammar, conversion)
adding-a-language.md Checklist to add a new target languageTranslations are stored as strict, pandoc-compatible Markdown: reviewers read
and correct them as plain text or rendered PDF, and the pipeline parses them
into JSON/USFM/XML. See docs/format.md.
Methodology
- Normalization: the source texts are converted to a verse-per-line format with stable book/chapter/verse identifiers.
- Style guide and glossary: per-language decisions are fixed in
languages/<lang>/style-guide.mdand key recurring terms inlanguages/<lang>/glossary.md, keeping voice and terminology consistent across all 31,000+ verses. - Translation: each passage is translated from the original language with a documented prompt, producing every register of the language plus translator notes where the original is ambiguous. Output follows
docs/format.md. - Audit: every generated verse (both registers) is compared semantically against versioned public-domain reference translations with alignment computed in code, and validated structurally against the source (
pipeline/validate-translation.js). Relevant divergences are flagged and consolidated before release. - Review: flagged verses and whole books go through human review, tracked in
languages/<lang>/review-status.md.
Ambiguities and textual variants are surfaced as footnotes, never silently resolved.
Reproducing and contributing
The repository is self-contained: clone it, open Claude Code
inside it and ask for a batch; the versioned project instructions (CLAUDE.md),
the translate skill and the pipeline reproduce the same process on any
machine. Translated books are committed as the canonical text; the highest-value
contribution is human review. See CONTRIBUTING.md.
Status
Portuguese translation complete, human review pending. All 66 books are translated in both registers (1,189 chapters, 31,156 verses per register) and have passed the automated audit, the project's single quality gate. No book has completed human review yet, so no book is publishable by the project's own criterion: that is the whole of the remaining work in Portuguese, and the highest-value way to contribute.
The live per-book status is in languages/pt/review-status.md; the suggested review order and what was decided per book are in languages/pt/roadmap.md and languages/pt/decisions/.
Author and license
Created and maintained by Lucas Merencia.
The translated texts and all pipeline code are released under the Creative Commons Attribution 4.0 International license (CC BY 4.0), unless noted otherwise. When sharing or adapting, attribute to "Biblia Libera, Lucas Merencia and contributors" with a link to this repository; see LICENSE.
