A Catholic Bible app built on one conviction — the text is not ours to edit. The full 73-book canon, three unaltered translations, the daily Mass, the liturgical year in color, and a quiet devotional life around the Word. Free, forever — no accounts, no tracking, no ads, no algorithm. Just the text, kept.
"Verbum Domini manet in æternum." — The Word of the Lord endures for ever. (1 Peter 1:25)
Every bundled translation is reproduced verbatim from its public-domain source — no paraphrasing, no softening of hard sayings, no silent "updates," no red-letter editorializing. Where the source corpus differs from a printed edition, the difference is disclosed, not patched. Provenance is pinned to exact commits and sealed with a SHA-256 manifest the test suite re-verifies on every run.
One morning — Tuesday, 21 July 2026 — captured whole on iOS Simulator (iPhone 17 Pro) from the
v1.23.1 build. Six cards, top to bottom: Today at Mass · Today in the Church (the Saint
of the Day, then the day in Church history) · Verse of the Day · Quote of the Day ·
the Holy Rosary · Continue Reading.
The accent is green because the day is green — Ordinary Time. The interface wears the liturgical color of the day; only the purple moves, and gold stays gold. Every other screen, in both themes, is in docs/screenshots.
- Docs map
- Highlights
- The Bible
- The liturgy
- The Today page
- The daily soul — devotion around the text
- Reading & study
- Identity & design
- Platforms
- What Fidelis refuses
- Data integrity & provenance
- Architecture
- Development & testing
- License & attribution
Two entrances, one map. This README is the front door for readers; the hub — docs/INDEX.md — is one click from home on every page. Its five spokes:
- Using the app → this README · the in-app About page.
- Contributing or building → CONTRIBUTING · guides (iOS · Android · Releasing · App Store · Device acceptance) · CLAUDE.md.
- The history → CHANGELOG · the release narrative.
- The design rationale → specs & plans · code review · feature design spec · commentary sources survey.
- Maintainer / AI assistant → CLAUDE.md · AGENTS.md · Releasing.
| 73-book canon | The complete Catholic Bible in traditional Vulgate order, deuterocanon and the Greek portions of Esther and Daniel included — plus the clearly-marked Vulgate appendix. |
| Three translations, bundled & unaltered | Douay-Rheims (Challoner), Catholic Public Domain Version, and the Clementine Latin Vulgate — all public domain, byte-for-byte. |
| The daily Mass | A profile-based Ordinary Form engine implementing all thirteen classes in the Table of Liturgical Days: precedence, transfers, alternatives, commemorations, the Easter Vigil ladder, memorial propers, and Vulgate-aligned responsorial psalms. The verified catalog is General Roman plus the U.S. proper. |
| The liturgical year, in color | The working accent takes the day's liturgical color; the sacred marks stay gold. The calendar catechizes without a word. |
| The daily soul | A tappable rosary with the traditional prayers, a quiet half-hour reading indulgence, and citation-only reading plans — devotion that never nags. |
| The Fathers, one tap away | Haydock across the whole canon and the Catena Aurea on the Gospels — a small gold dot marks a commented verse, a sheet opens the commentary with per-Father chips and a Doctors-only filter. Scripture stays Scripture; study stays study. |
| The Catechism, cross-referenced | Where the Catechism cites a verse, a quiet purple CCC ¶… row in the verse actions links straight to that paragraph on vatican.va — 4,600+ verses mapped from the official Index of Citations (Psalms mapped to Vulgate numbering). Only the citation facts ship; the Catechism text is never bundled. |
| Sow a verse | Any verse — or the daily quote — renders to a clean card (EB Garamond on a warm field, the gold cross) and goes out through your device's native share sheet. A seed and a citation at once; Scripture goes out, nothing comes back. |
| Yours, on your device | Bookmarks, highlights, notes, and reading plans live in your browser. No account, no server, no telemetry. Export/import as JSON. |
| Reachable by everyone | Every action the mouse can reach, the keyboard and screen reader can too — verses, the version picker, the chapter grid, all operable; loading is quiet text, and motion honors your system's reduce-motion setting. |
| Everywhere | Installable PWA with offline reading (texts and the Fathers' commentary), native iOS and Android shells (Capacitor) with native home-screen widgets — Verse of the Day, Today at Mass, and Quote of the Day on both platforms — and an embeddable Verse-of-the-Day iframe. |
| Free, forever | No price, no ads, no in-app purchases, no subscription, no telemetry. The product is the text, not your attention. |
- The full 73-book Catholic canon in traditional Vulgate order — all seven
deuterocanonical books and the Greek portions of Esther and Daniel — plus the traditional
Vulgate appendix, clearly marked as outside the canon (the Prayer of Manasses and 3–4
Esdras of printed Clementine editions; Psalm 151 and Laodiceans from the wider manuscript
tradition — listed for honesty, though the bundled corpus carries no text for them; see
data-report.txt). - Three complete translations bundled — all public domain, all unaltered:
- Douay-Rheims, Challoner Revision (1582–1610, rev. 1749–52)
- Catholic Public Domain Version (2009)
- Clementine Latin Vulgate (1592)
- Import-only translations — RSV-2CE, NABRE, and the Biblia Platense (Straubinger, Spanish) —
these are under copyright (Ignatius Press / CCD) or not clearly public-domain in the U.S., so
their text is not shipped; you can import a licensed copy you own on the Translations page,
stored in your browser via IndexedDB (never uploaded). The importer accepts USFM, OSIS, or
scrollmapper-style JSON (with roman-numeral and SWORD book-name aliases);
npm run build-nabreconverts a NAB/NABRE PDF you own into an importable file (the output stays on your device and is gitignored — never bundled or committed). - USCCB by default, with independent choices — a new install selects the verified U.S. calendar profile, the pinned public-domain-derived Roman Mass citation table, and NABRE as the displayed Mass Bible. These are separate settings. The NABRE is copyrighted and never bundled, so readings visibly fall back to the Douay-Rheims until you import a licensed copy. Settings also permits manual country, ecclesiastical-province, and diocese entry. Unsupported jurisdictions receive an explicit General Roman fallback notice; Fidelis does not claim unverified local coverage.
Because the bundles follow the Vulgate, the Psalms use the traditional Septuagint numbering (the "Lord is my shepherd" psalm is Psalm 22, not 23) and the Douay names 1–2 Samuel as 1–2 Kings. The UI labels this wherever it matters and cites both numberings.
Daily Mass readings follow the lectionary cycles — Sunday Years A/B/C and weekday Years I/II — resolved by an engine that implements the Table of Liturgical Days: precedence, transfer of impeded solemnities (the Annunciation in Holy Week, the Immaculate Conception on an Advent Sunday), omission of impeded feasts, and demotion of colliding memorials. It includes:
- the Easter Vigil laid out as the Missal orders it (Reading I–VII, Epistle, interleaved psalms, shorter forms marked, Gospel last), the Triduum, Advent's December ferias, and the Chrism Mass beside the Mass of the Lord's Supper on Holy Thursday;
- memorial proper readings — the memorials whose readings are prescribed (St. Barnabas, Sts. Timothy and Titus, the Passion of St. John the Baptist, Guardian Angels, and others the dataset marks) take the day as "Proper of the Memorial," with the ferial cycle alongside;
- responsorial psalms aligned to the Vulgate-versified texts span by span (titles, split and joined psalms), cited with both numberings, e.g. Psalm 51(50);
- a versioned calendar profile setting. The exact catalog is General Roman, U.S. with Ascension on Sunday, and U.S. with Ascension on Thursday for Boston, Hartford, New York, Omaha, and Philadelphia. Calendar jurisdiction, lectionary edition, and displayed Bible text remain independent; unsupported countries fall back explicitly to General Roman.
Citation data derives from the public-domain
jayarathina/Tamil-Catholic-Lectionary
(npm run lectionary rebuilds it). Where the lectionary subdivides a verse ("12b"), whole
verses are shown and the citation marked "(approx.)" — the text itself is never altered.
Six cards, always exactly six — a standing rule (five through v1.17.x; raised once, to six, in v1.18.0), so the page never sprawls. On a phone the time-sensitive card leads, right under the date:
- Today at Mass — season, week, liturgical color, the principal celebrations of the General Roman Calendar, today's Mass citations, and the hour's Marian antiphon. When the day's memorial has a life in the collection, the name links to the Saint of the Day page.
- ✠ Today in the Church — the Saint of the Day (a gold monogram, name, title, rank, dates, blurb, patronage — one saint for every calendar date, Feb 29 included) with the day's Church-history event beneath a hairline (likewise every calendar date; 406 sourced events across 366 days). Blurb on the card; the full life or chronicle one tap away.
- ✠ Verse of the Day — a fixed, curated cycle, deterministic by date (web, iOS, and Android select the same verse from the same calendar math).
- Quote of the Day — from the Fathers, Doctors, and saints; public-domain, attributed.
- The Holy Rosary — the day's mysteries, now tappable (see below).
- Continue Reading — picks up where you left off, and surfaces your active reading plan.
The Verse of the Day and Quote of the Day each carry a Share affordance — a card for the native share sheet (see Reading & study); the Saint and Church History pages share too. The Saint and Church History text is public-domain or church-official sourced, and never AI-paraphrased.
The 1.4.0 "the daily soul" release grows a quiet devotional life around Scripture — piety, never gamification.
- The rosary, prayed. Tap a mystery on the Today page and a calm sheet opens: the mystery's Scripture passage rendered verbatim in your current translation (the Annunciation, Luke 1:26–38; the Visitation with the Magnificat, Luke 1:39–56 …), and beneath it — collapsed — the five traditional prayers in Latin and English: Pater Noster, Ave Maria, Gloria Patri, the Fatima Prayer, the Salve Regina. No audio, no beads animation. A prayer book.
- The reading-time indulgence. While you read, the app quietly accumulates continuous reading time (paused when you look away; the clock resets after a ten-minute gap). At half an hour, one small gold line appears beneath the chapter title — the Church's plenary indulgence for devout reading of Sacred Scripture (Ench. Ind., conc. 30) — and a tap explains the usual conditions. No streak, no counter, no sound; one acknowledgment a day, the Church's, not ours. A single setting hides it entirely.
- Reading plans, the citation-arithmetic way. Pick books; the app does the math — a plan is a list of chapter references and a divisor, nothing more. Five citation-only presets — The Four Gospels in 90 Days, The Deuterocanon in 30 Days, The Psalter in a Month, The New Testament in a Year, and The Whole Canon in a Year (weighted so the Psalter is woven through the year and Psalm 118 never shares a day with another long chapter). Or build your own on one screen — grouped book checkboxes, a pace by chapters-per-day or a target date, a name. Today's portion shows in Continue Reading; a "Mark today's portion read" action sits at the chapter's end. No reminders, no streaks.
- Reader — translation switcher; parallel view (e.g. Douay beside the Vulgate); traditional book names per translation (1 Kings / Liber I Regum, Apocalypse / Apocalypsis); a choice of reading face (bundled EB Garamond, plus Georgia, Times New Roman, and Sans-serif) with four size presets and an A−/A+ fine adjustment; verse deep-links.
- Bookmarks, highlights (4 colors), and notes — stored locally; no account, no server. The Library exports the lot as JSON and imports it back (merging, newer entry per verse wins), so a lost device never takes your marginalia with it.
- Search across any bundled translation, accent-insensitive (Latin
misericordiaandcælumboth match), with reference jumping ("John 3:16", "1 Cor 13", "Apocalypsis 21"). - Commentary (the 1.5.0 "formation" release) — a small gold dot after a verse number marks a Haydock note; the verse actions gain a Commentary entry that opens a study sheet (a side panel on desktop, a bottom sheet on phones) with Haydock (the annotated Douay, whole canon) and Catena Aurea (Aquinas's chain of the Fathers on the Gospels, the Newman edition) tabs. The Catena tab filters by Father and to the Doctors of the Church. Commentary never interleaves into the page — it is a tap away, and a single Settings switch removes the dots entirely. No AI, no paraphrase: the Fathers in their own words.
- Share (the 1.8.0 "the sower" release) — the verse actions gain a Share entry that renders the verse to a card, Day or Night, for the native share sheet (Web Share API, with a plain-image download fallback). The same affordance sits on the Today page's Verse of the Day and Quote of the Day. Typography on a warm field — the gold cross and a small wordmark, no imagery, no red-letter.
- Catechism cross-references (the 1.9.0 "the deposit" release) — where the Catechism cites a
verse, a quiet purple
CCC ¶…row in the verse actions links to that paragraph on vatican.va (4,613 verses mapped from the official Index of Citations; Psalms remapped to the Vulgate numbering the bundles use). Only the citation facts ship — the Catechism text is never bundled, the links open the official text — and a single Settings switch removes the row.
- The liturgical year, in color — an optional setting (on by default) tints the app's working accent with the governing day's color: green in Ordinary Time, violet in Advent and Lent, rose on Gaudete and Laetare, red on martyrs' days, black on Good Friday, gold standing in for white on the great feasts. The sacred marks (the ✠ and the wordmark) stay gold; only the working accent moves.
- Two accents, one grammar — purple acts (links, buttons, the things you touch); gold honors (the ✠, the wordmark, a bookmarked or annotated verse). No element wears both. Every paint color lives in day/night design tokens; nothing outside them carries a raw hex.
- A hand-drawn icon set — bookmark, note, share, commentary, sun/moon, and the cross are inline SVG on one 24×24 stroke grid, not platform emoji, so the marks look the same everywhere; the iOS widget draws the same cross natively.
- Five-tab navigation — Today · Read · Search · Mass · More — one header row with the brand on wide screens; on phones the collapsing masthead: the gold brand row scrolls away in normal flow while a slim tab row stays pinned below the status bar. "More" is a popover over Library, Widgets, Translations, Settings, and About — not a route, so deep links are unchanged.
- Seamless movement — Back and Forward restore your scroll position; long pages (Mass readings, Settings, About, the book list) carry a sticky in-page section jump-bar; the Android hardware Back closes an open sheet before leaving the page; focus moves to the new page's content for keyboard and screen-reader users, with a skip-to-content link; and Search survives a round-trip (its query rides in the URL). Selected controls wear the day's liturgical color as an outline.
- One Settings screen with a live Scripture preview (Genesis 1:1–2, re-rendering as you adjust the controls below): Bible version, text size, reading face, appearance, a versioned Roman calendar profile, an independently selected lectionary source, and the Bible text used to display Mass readings, plus offline download (per translation and the Fathers' commentary, with real sizes), the indulgence toggle, the commentary controls (master switch, Haydock/Catena, Doctors-only), the Magisterium CCC-links toggle, and JSON export/import.
- System / Day / Night — System tracks the device's color-scheme preference live; a pre-paint boot script resolves the theme and reading face before first paint, so a night reader never sees a flash of day.
- The Scripture face — EB Garamond is bundled (SIL OFL), a printed-Bible serif; the chrome speaks in the system sans, so apparatus never competes with the Word.
- PWA — installable; the app shell is precached on install (and stale assets purged on deploys), so the app opens offline, with offline reading of any book you have opened.
- iOS — via Capacitor, with native WidgetKit home-screen widgets: Verse of the Day,
Today at Mass, and Quote of the Day (small / medium / large; offline). The Swift sources
for all three live in
ios/WidgetExtension/; the Widget Extension target is created idempotently byruby scripts/add-ios-widget-target.rb, per docs/guides/IOS.md §2. The iOS App target is built in CI on macOS (.github/workflows/ios.yml). The "today's Gospel" App Intent (Siri/Shortcuts) and the Dynamic Type bridge shipped in v1.13.3. Build requires Xcode 17+ (Swift 6.2). See docs/guides/IOS.md. - Android — via Capacitor: the full app in a native shell, offline by construction (the whole build ships inside the APK, exactly as on iOS), now with three native home-screen widgets (App Widgets) — Verse of the Day, Today at Mass, and Quote of the Day — each showing the same content as the app and refreshing at local midnight, fully offline. See docs/guides/ANDROID.md.
- Embeddable widget — drop the Verse of the Day into any site:
<iframe src="https://your-domain/#/widget/votd">(options:?t=vulgate&theme=night).
A short, binding list — the product is defined as much by what it will not do:
- No accounts, no cloud sync, no server. Your reading is yours; Fidelis never sends it anywhere. (Your own device backup may carry app data, like any app's — see PRIVACY.md.)
- No AI — no summaries, paraphrase, or chatbot over Scripture. The text speaks for itself.
- No social layer, no comments, no sharing-for-engagement.
- No streaks, badges, or progress theater. The reading indulgence is the only acknowledgment the app makes, and it is the Church's, not ours.
- Free, forever — no ads, no in-app purchases, no telemetry. Nothing to buy, nothing to upgrade; the app costs nothing and never will.
- No notification pressure — at most a single, optional, off-by-default daily-readings note (still deferred).
- No red-letter text and no inspirational stock imagery. The Word is not decorated.
- Texts come from the public-domain corpus collected by
scrollmapper/bible_databases (
DRC,CPDV,VulgClementine), committed underpublic/data/whitespace-normalized but otherwise byte-for-byte. - Provenance is pinned and sealed. Both upstreams are fetched at exact commit hashes
(
scripts/pins.mjs), never a moving branch; every file underpublic/data/is hashed intopublic/data/manifest.json(SHA-256 per file plus a root hash), verified bynpm run verify-dataand on everynpm test. The pins were trusted only after a fresh rebuild reproduced the committed corpus byte-for-byte. - The grid is documented honestly. The three bundles share their source corpus's aligned
verse grid, which in a few places differs from printed editions' verse breaks; empty grid slots
are skipped in display, never shown as bare numbers.
data-report.txtis a committed audit of every such slot — including three known DRC corpus defects (the printed Douay 3 Kings 17:11, Proverbs 30:19, and Baruch 6:7 are absent at the pinned upstream commit, their slots holding misfiled verses), disclosed rather than silently patched. - Commentary is pinned and sealed like the Scripture. Haydock comes from the 1883 Dunigan
USFM transcription (
cmahte/ENG-B-Haydock1883-pd-PSFM) and the Catena Aurea from the Newman / Oxford translation as the Isidore-Guild OSIS (Isidore-Guild/catena, CC0); both are fetched at commits pinned by hash and hashed into the samemanifest.json. The Catena's attribution labels are normalized by a pure, harness-asserted module (src/lib/commentary.ts): 93.9% resolve to a named Father, and a corpus-wide test proves the small remainder hides no Father. The text itself is reproduced unaltered — no summaries, no paraphrase.
A fully static site — Vite + React + TypeScript with hash routing — wrapped in a Capacitor
native shell for iOS and Android. src/lib/ is the pure, testable core (the liturgical engines
- logic, no React);
src/components/andsrc/pages/are the UI;scripts/is the build/data pipeline and the two assertion harnesses;public/data/is the generated, manifest-sealed corpus (never hand-edited).
The full architecture map — every engine, primitive, and pipeline, with file paths — is the "Architecture" section of CLAUDE.md (single source of truth). Design constants are encoded once and asserted: the Today page never exceeds six cards (five through v1.17.x; raised once in v1.18.0), the chrome speaks in two accents, and the Word is never printed in red.
npm install
npm run dev # local dev server
npm test # liturgical + data harnesses (hard assertions) + manifest verify + ESLint
npm run build # type-check (tsc --noEmit) + production build to dist/
npm run check-docs # broken-link, anchor, and orphan-page checkerAll three of npm test, npm run build, and npm run check-docs must be green before a pull
request — every expectation is a hard assertion; any failure exits non-zero. CI
(.github/workflows/ci.yml) runs them on Node 22 for every push and PR;
ios.yml builds the iOS App target on macOS.
The full contributor workflow — the data-pipeline scripts (npm run data / lectionary /
commentary / ccc / widgets / golden / build-nabre), the standing rules, and the native
build steps — lives in CONTRIBUTING.md and the
Commands section of CLAUDE.md. The release runbook (bump
package.json + a CHANGELOG.md entry together, re-bless golden snapshots deliberately) is
docs/guides/RELEASING.md. Platform setup is
docs/guides/IOS.md and docs/guides/ANDROID.md.
- Scripture texts — public domain (Douay-Rheims Challoner, Catholic Public Domain Version, Clementine Vulgate), via scrollmapper/bible_databases, pinned and hash-sealed.
- Lectionary citation data — public domain, via jayarathina/Tamil-Catholic-Lectionary.
- EB Garamond — bundled under the SIL Open Font License.
- RSV-2CE, NABRE, and the Biblia Platense (Straubinger, Spanish) are not distributed; users import their own licensed copies locally.
See CHANGELOG.md for the full release history.
✠
Verbum Domini manet in æternum.
