GOI Bible
Scripture, indexed like a database — translated by AI, audited like software.
A classical-style painting of a hand reaching down toward an open Bible, evoking the GOI Bible project.

A complete Bible, in any language,
built on a single portable file.

The GOI Bible project is an experiment in a question that scripture translation has never been able to ask before: what happens when a translation pipeline is treated as software — versioned, indexed, cross-checked, and re-run — instead of a one-time act of scholarship?

Target: a first-pass Bible draft, any language, for under $10 in LLM compute
The vision: every seminary student on earth carries a copy of the GOI Bible on their laptop — offline, in their own language alongside the source languages, infinitely searchable, and backed by the most versatile cross-reference tool available: a single file that turns "where else does this word, theme, or phrase appear?" into a query instead of a research project.

I.What Is GOI?

GOI stands for Global Ordinal Index. It's the idea this entire project is named after — the single integer key that lets every verse, in every edition and every language, be addressed, compared, and joined the same way. Everything else on this page — the database, the translation pipeline, the audit trail — exists to fill in and verify the text attached to that index.

Every Bible has a versification scheme — book, chapter, verse. The problem is that versification schemes don't agree with each other. The Hebrew Masoretic Text splits some Psalm headings as verse 1; English translations often don't. Different canon orderings place books in different sequences. Comparing "verse 14503" across two editions is meaningless if the two editions don't number things the same way.

The Global Ordinal Index (GOI) solves this with one idea: assign every verse, in every edition, a single sequential integer based on its position in that edition's canonical reading order.

SELECT
    *,
    ROW_NUMBER() OVER (
        PARTITION BY edition_id
        ORDER BY conical, chapter, verse
    ) AS goi
FROM verses;

(conical is the actual column name in the current schema — a long-standing typo for "canonical" that's been left as-is for backward compatibility within the database.)

Because the GOI is computed per edition from canonical order, it turns "is this translation structurally complete?" into a single query, and — once two editions have been mapped onto the same canonical ordinal sequence — it turns "what is the corresponding verse in another edition?" into a join. GOI doesn't eliminate the work of reconciling divergent versification; what it does is give that reconciliation a single, durable target representation, so it only has to be done once per edition rather than re-derived for every comparison. (The Hebrew WLC edition in this project is a live example of that reconciliation being incomplete — see the status box below.)

KJV (edition_id = KJV) goi book ch:vs 19301 PSA 23:1 19302 PSA 23:2 WLC (edition_id = WLC) goi book ch:vs 19301 PSA 23:1 19302 PSA 23:1b join on goi A jump in the goi sequence between two editions of the same book ⇒ a missing, merged, or split verse — found by SQL alone.

Two editions, two different versification systems, one shared integer key. Structural divergence becomes a query, not a manual diff.

The project needed one edition to serve as the reference ordinal sequence — the canonical book/chapter/verse order that every other edition's goi is ultimately checked against. The King James Version was chosen for this role: 66 books, 31,102 verses, goi values 1 through 31,102. It's not chosen for its wording — the AI translation doesn't copy it — but because its versification is the most widely recognized "common denominator" ordering, making it the most useful fixed yardstick for spotting where another edition's verse count diverges.

Why start from WLC + TR1550 — and why MIT?

The two source texts behind every translation in this project — the Westminster Leningrad Codex (Hebrew Old Testament) and the Textus Receptus 1550 (Greek New Testament) — are both public domain. That choice wasn't incidental; it's what makes the rest of the project possible. Starting from a source text that is itself unencumbered means the resulting translations, databases, and pipeline code can be released under a genuinely permissive license — MIT — with no upstream copyright to worry about, no royalty chain, and no clause that quietly restricts who can copy, fork, or redistribute the result.

"MIT" here means what it always means: anyone — a seminary, a single developer, a mission organization with no budget — can take the database, the code, or the translated text, use it, modify it, ship it, and give it away again, without asking permission or paying anyone. A Bible project built on a restrictively-licensed or copyrighted source text could never offer that. Public-domain in, MIT out is the whole supply chain.

What the GOI gives the project, concretely:

II.Background & Motivation

Why does the world need another Bible project?

Bible translation is traditionally one of the most expensive, slowest forms of literary work that exists. A single language can take a trained team a decade or more, and the result — for all its care — is usually locked away in a format (a printed book, a denomination's proprietary database) that resists comparison, search, or machine-assisted review.

The GOI Bible project starts from a different premise. Large language models are now competent — not perfect, but competent — at producing a first-pass translation from a tagged source text. The interesting problem is no longer "can an AI translate the Bible?" The interesting problem is: can the result be checked, at scale, with the same rigor we'd apply to a codebase — automated tests, integrity gates, regression tracking, and a visible audit trail of every correction?

That reframing is what GOI is built around. Every verse is a row. Every translation is an edition. Every noun, clause, and number is a checkable fact against the source language. And the whole thing — text, cross-references, audit metadata — fits in a single file you can copy to a USB stick.

The goal isn't to claim the AI got everything right the first time. It almost never does. The goal is to make every place it got something wrong findable, fixable, and re-verifiable — and to publish the receipts.

III.Why SQLite

The entire project — source texts, translations, cross-references, audit tables — lives in one SQLite file. That choice is deliberate, and it isn't about being trendy. It's about the opposite: durability and portability over the lifespan of a text that is, by nature, meant to outlast any particular piece of infrastructure.

That last point matters more than it sounds. In the project's preferred stack (SQLite views → PHP passing the view's rows directly → htmx altering the DOM), the "business logic" of which word to use for a given language and context lives entirely in the database as a view definition. The application layer becomes almost embarrassingly thin — which means it's also almost nothing to maintain, replace, or port.

Why start with one verse, one file?

Before any of this lands in SQLite, the translation pipeline itself works on the corpus as one plain-text file per verse — e.g. 001_GEN_002_004.txt. That's an unusual level of sharding, and it's deliberate:

Once that sharded corpus is loaded into SQLite, the rigidity disappears and the flexibility shows up on the output side instead. The one-row-per-verse structure that made translation safe to shard also makes reassembly trivial — a chapter, a whole book, with verse numbers or without, is one SQL query away:

-- Whole chapter, with verse numbers (e.g. for study/reference view)
SELECT verse, rendering FROM v_effective_rendering
WHERE book='JHN' AND chapter=3 AND lang=:lang ORDER BY verse;

-- Same chapter, reading view — no verse numbers, just flowing text
SELECT group_concat(rendering, ' ') FROM v_effective_rendering
WHERE book='JHN' AND chapter=3 AND lang=:lang
GROUP BY book, chapter ORDER BY verse;

-- A whole book, concatenated, for export/printing
SELECT group_concat(rendering, '

')
FROM v_effective_rendering
WHERE book='JHN' AND lang=:lang
GROUP BY book, chapter ORDER BY chapter, verse;

Same underlying rows, three different presentations — verse-numbered study text, flowing reading text, or a print-ready book export — none of which required a different data format, export step, or reformatting pass. The sharding that kept translation honest and the flexibility that makes presentation cheap are two views of the same one-row-per-verse design.

Want to try this yourself? See SQLite Examples for copy-paste queries — generating the whole Bible, pulling a single chapter, building a word-frequency heatmap, and proximity-searching "light" near "dark" with an FTS5 virtual table.

IV.GOI + Virtual Tables: Why It's Powerful

The GOI gives every verse, in every language, the same address. SQLite views turn that shared address into pre-resolved "objects" that an application can read directly — no translation logic in the app layer at all.

Example: the sense-resolution view

Many words are ambiguous depending on context. Greek κύριος can mean "the Lord" or simply "master/sir." Hebrew אֱלֹהִים can mean "God" or "gods" or, in some constructions, "judges." Rather than re-litigate these calls for every new language, the New Testament pipeline resolves each ambiguous occurrence once, language-neutrally, and stores the decision as a sense key (e.g. KYRIOS.HUMAN_MASTER). A view then resolves, per word and per language, which actual word to render:

Status note: the sense-key view below describes the New Testament pipeline. The Old Testament's noun anchoring currently runs through a more direct noun_translations lookup table rather than this view; the two are being unified as the OT audit progresses.

CREATE VIEW v_effective_rendering AS
SELECT
    o.book, o.chapter, o.verse, o.word_pos,
    COALESCE(
        sr.rendering,              -- 1. sense-specific word for this language
        dr.rendering               -- 2. fall back to the language's default
    ) AS rendering
FROM verse_rendering_overrides o
LEFT JOIN sense_renderings   sr ON sr.sense_key = o.sense_key AND sr.lang = :lang
LEFT JOIN strongs_lang_renderings dr ON dr.strongs_num = o.strongs_num AND dr.lang = :lang;

The payoff: 1,060 contextual word-choice decisions across the New Testament were made once. A brand-new language inherits every one of them automatically by filling in just 16 rows — one per distinct sense. Sixteen decisions, made once, resolve a thousand contextual judgment calls forever.

16sense decisions per new language
1,060contextual positions resolved automatically
1SQL view, zero app code

Example: a "heat map" of any word across the whole Bible

Because every verse has a single integer position (its goi), counting how often a word appears and where is one query — group by a bucket of consecutive goi values and count matches. No separate search index, no precomputed table: the verse text and the ordinal axis are already in the same row.

SELECT (goi / 100) AS bucket,        -- ~100-verse "bins" across the whole Bible
       COUNT(*) AS hits
FROM v_effective_rendering
WHERE rendering LIKE '%light%'
GROUP BY bucket
ORDER BY bucket;

Plot bucket on the x-axis and hits as color intensity and you have a heat map of where "light" clusters across Genesis, the Psalms, John, Revelation — generated on the fly, in any language, because the bucket boundaries are the same ordinal positions for every edition.

Example: "find every 'light' within 4 verses of a 'dark'"

Proximity search — a notoriously awkward query in most text-search engines — becomes a self-join with an arithmetic range, because "4 verses away" is just ±4 on the goi axis:

SELECT a.goi AS light_goi, a.rendering AS light_verse,
       b.goi AS dark_goi,  b.rendering AS dark_verse
FROM v_effective_rendering a
JOIN v_effective_rendering b
  ON b.goi BETWEEN a.goi - 4 AND a.goi + 4
 AND a.lang = b.lang
WHERE a.rendering LIKE '%light%'
  AND b.rendering LIKE '%dark%';

This is the kind of question — "where do these two themes sit close to each other?" — that normally requires a dedicated search/indexing service. Here it's a join condition, because GOI already made "distance between verses" into ordinary subtraction.

Built on open addressing standards: OSIS and BCP 47

GOI is a project-internal ordinal — but the columns it's computed from are deliberately ordinary, standards-based identifiers, so the database speaks the same language as other Bible software:

The combination matters: goi handles the "where is this verse, structurally" problem (which versification schemes disagree on), while OSIS book codes and BCP 47 language tags handle the "what is this verse, in standard terms" problem (which everyone else's tooling already understands). GOI doesn't replace those standards — it's the ordinal index built on top of them.

V.The Case for GOI Bible — and Its Audit Trail

Yes — the translation is 100% AI-generated. That is precisely why it is audited the way it is.

A traditional translation committee's working notes rarely survive publication. The GOI Bible takes the opposite approach: every verification pass, every flagged verse, and every correction is logged, reproducible, and re-runnable. We're not claiming the result is finished or scholarly-grade — we're claiming the process is unusually transparent, and publishing the evidence so that claim can be checked rather than taken on faith.

The pipeline

1. Tagged source text. Hebrew (Westminster Leningrad Codex) and Greek (Textus Receptus 1550) verses, each word tagged with Strong's numbers and morphology — the ground truth everything else is checked against.
2. Noun-anchored AI translation. Each verse is translated independently (no chapter/book context required), with the Strong's-tagged nouns supplied as anchors — one verse, one file, one deterministic input → output mapping.
3. Noun coverage verification. Every noun tagged in the source is checked for presence (with inflection/stem matching) in the translated verse. NT result: 28,889 / 28,889 source nouns accounted for — 0 missing, 99.7% exact match.
4. Clause & meaning checks. A second LLM pass compares each translated verse back against the Hebrew/Greek looking for dropped clauses, reversed negations, wrong numbers, and false-friend mistranslations (e.g. ἀφίημι rendered "forgive" where the sense is "leave/let").
5. Triage & targeted repair. Flags are bucketed by severity (high / medium / noise). Clean lexical or structural fixes are hand-applied with exact-match diffs and logged to per-batch backup CSVs; genuinely garbled verses are regenerated from the source with the specific defect fed back as a correction hint.
6. Integrity gate. validate.py runs 13 corpus-wide invariants — file counts, verse-boundary alignment, GOI sequence continuity, punctuation normalization — before any change is considered done.

Every arrow in this diagram corresponds to a script in the repository. Nothing here is a one-time manual pass — the whole chain can be re-run.

What the audit has found so far

28,925NT (English) nouns verified, 0 missing
99.7%exact lexical match (NT English)
1,281OT (English) clause-level flags raised
1,276/1,276OT English clause flags reviewed & closed
13corpus-wide integrity invariants

Live status — what's actually done

The table below is the page's attempt to say, in one place, exactly what stage each part of the pipeline is at — so a visitor (or a reviewer) doesn't have to infer it from prose.

AreaStatus
NT English — noun coverage (28,925 tokens)Complete. 0 missing, 99.7% exact match.
NT English — false-friend / clause sweepComplete for the patterns identified to date (see changelog in docs/README_GOI.md).
NT English & Chinese — clause-check vs Greek TR1550 (98 flags)Complete. All 98 flags triaged; 3 genuine fixes applied (95 were checker false positives, traced to a response-length cap in the checker itself, since fixed).
OT English — clause-check audit (1,281 flags)Complete. All 1,276 flagged verses reviewed: 1,133 hand-corrected and logged; the remaining 143 were closed without edit as checker false positives or genuinely ambiguous/textually-disputed readings where the existing rendering follows established translation tradition.
OT Chinese — noun dictionary coverageComplete for the current dictionary pass.
OT Chinese — clause-check audit (604 flags)Complete. All 604 flagged verses reviewed: 214 hand-corrected and logged. The rest were closed without edit as checker false positives or poetry/textual-variant verses where the existing rendering follows established translation tradition.
NT Chinese — noun string-match coverageIn progress. Known residual string-matching issues being resolved.
File-count / structural integrity (validate.py)Complete and re-run on every change.
Hebrew WLC edition — GOI cross-edition alignmentNot yet re-established. Prior naive (row-order) alignment confirmed 81.1% mismatched and removed (first divergence at GEN 32:1 WLC = GEN 31:55 KJV, a chapter-boundary shift). Remap plan written 2026-06-12 (docs/wlc_goi_realignment_plan.md); implementation not yet started.
Scholarly / peer-reviewed quality reviewNot claimed. This is a checked AI draft, not a substitute for translator/committee review.

Honest caveats — published, not hidden

The case for GOI Bible isn't "trust the AI." It's "don't trust the AI — check it against the source automatically, log every check and every fix, and let anyone re-run the checks."

For the full write-up of this pipeline — including the sense layer, reviewer checklist, and FAQ — see the Methodology page.

VI.The Bigger Picture: A Bible in Every Language, Under $10

There are over 7,000 living languages. Roughly 1,500 of them have no Bible translation at all, and many more have only partial translations. The traditional cost of closing that gap — in person-years — is enormous.

The GOI pipeline reframes the cost structure entirely:

Source corpus WLC + TR1550 (fixed, one-time) + New language ~31k verses < $10 LLM compute + 16 sense rows manual, < 1 hr unlocks 1,060 positions Audited edition in v_effective_rendering Marginal cost of language #1,001 ≈ marginal cost of language #2.

None of this replaces the work of native-speaker reviewers, linguists, and communities who will ultimately decide what a faithful translation in their language looks like. What it does is remove the first-draft bottleneck — and hand reviewers a draft that has already been checked for the mechanical failure modes (missing words, dropped clauses, flipped negations, wrong numbers) that used to consume a large share of review time.

Audio: coming soon. Text-to-speech has reached the point where a clean, per-verse text corpus is most of the work of producing an audio Bible. Because every verse is already a single, addressable row — checked, GOI-indexed, and language-tagged — generating a full spoken edition is the same "fill in one more column" pattern as everything else in this pipeline, in any of the supported languages, not just the handful that traditionally get audio recordings.

SQLite — single file Strong's-anchored GOI cross-edition index Noun coverage: verified Clause audit: ongoing Public-domain references only Audio: coming soon