Daily Bible Verse
approvedby polygonhunter
Start each day with Scripture: a daily Bible verse in your daily note as an elegant callout. Smart no-repeat rotation, offline public-domain translations in five languages, themed verse collections, and whole-Bible mode. - This plugin has not been manually reviewed by Obsidian staff.
Daily Bible Verse
Start each day with Scripture. This Obsidian plugin adds a daily Bible verse to your daily note as an elegant callout β with the correctly localized verse reference, an attribution line, and an optional emoji (π βοΈ ποΈ β¦):
> [!bible] Johannes 3,16
> Also hat Gott die Welt geliebt, daΓ er seinen eingeborenen Sohn gab, auf daΓ alle,
> die an ihn glauben, nicht verloren werden, sondern das ewige Leben haben.
>
> β Luther 1912
The callout is written as plain markdown into your note: it stays readable on every device, in exports, and even if you uninstall the plugin.
Features
- Offline-first β a curated selection of 526 encouraging verses ships with the plugin in all supported translations. No API keys, no external services, works on mobile.
- 5 languages β German, English, Spanish, French, Italian, each with correctly localized book names and reference notation ("Johannes 3,16" vs. "John 3:16").
- Public-domain translations β Luther 1912, Elberfelder 1905, KJV, Darby 1890, Reina-Valera Antigua (1909), Louis Segond 1910, Diodati 1649.
- Randomness with a system β a seeded shuffled-deck algorithm guarantees no repeats until the whole pool has been used once, then reshuffles: no short-interval repeats, no yearly rotation, and fully deterministic (the same day always gets the same verse, on every device).
- Configurable pool β curated selection (filterable by themes: encouragement, comfort, hope, love, wisdom, gratitude, faith, peace β with a live verse counter), the whole Bible (~31,000 verses, one-time ~5 MB download per translation), or book presets (Psalms, New Testament, Gospels, β¦).
- Three ways to insert β automatic on daily-note creation, a
{{bible-verse}}placeholder in your daily-note template, or manual commands. - Re-roll β don't like today's verse? Re-roll it; the new verse stays fixed for the rest of the day.
Installation
Until the plugin is listed in the community directory:
- Download
main.js,manifest.jsonandstyles.cssfrom the latest release. - Create the folder
<vault>/.obsidian/plugins/daily-bible-verse/and place the three files inside. - Reload Obsidian and enable Daily Bible Verse under Community plugins.
Or install via BRAT with the repository
polygonhunter/daily-bible-verse.
Usage
Automatic (default)
With the core Daily Notes (or Periodic Notes) plugin enabled, every newly created daily note automatically receives the verse callout. The insert position is configurable (top / after frontmatter / bottom).
Template placeholder
Put {{bible-verse}} anywhere in your daily-note template β the plugin replaces it
when the note is created. This also works with Templater templates (the plugin retries
for a few seconds so it wins the race against template rendering).
Commands
| Command ID (for hotkeys & integrations) | What it does |
|---|---|
daily-bible-verse:insert-todays-verse | Insert today's verse at the cursor |
daily-bible-verse:insert-verse-into-daily-note | Open (or create) today's daily note and insert the verse |
daily-bible-verse:reroll-todays-verse | Pick a different verse for today (frozen for the day) |
daily-bible-verse:replace-bible-verse-placeholders | Replace {{bible-verse}} in the active note |
daily-bible-verse:download-translation | Download the current translation for whole-Bible mode |
These IDs are a stable public contract since 1.0.0 β external tools (e.g. slash-menu
plugins) can safely call them via app.commands.executeCommandById(...).
How the daily pick works
The verse pool is shuffled once with a seed (Fisher-Yates) and then consumed day by day like a deck of cards β every verse appears exactly once per cycle. When the deck is exhausted, it is reshuffled with a new seed derived from the cycle number, so the next pass has a completely different order. Everything is derived from the date and a per-vault seed: no history is stored, nothing can be corrupted by sync, and all devices agree on the verse of the day.
Re-rolls are stored per date and freeze the chosen verse for that day (old entries are pruned after 60 days).
Whole-Bible mode
Curated mode works out of the box. For whole Bible or specific books the plugin downloads the selected translation once (~4β5 MB) into the plugin folder and then works fully offline. Until the download exists, the plugin transparently falls back to the curated pool (with a notice). Downloads can be deleted again in the settings.
Translations & licensing
| Translation | Language | Status |
|---|---|---|
| Luther 1912 | German | Public domain |
| Elberfelder 1905 | German | Public domain |
| King James Version | English | Public domainΒΉ |
| Darby Translation (1890) | English | Public domain |
| Reina-Valera Antigua (1909) | Spanish | Public domain |
| Louis Segond 1910 | French | Public domain |
| Diodati 1649 | Italian | Public domain |
ΒΉ Crown patent restrictions apply within the United Kingdom.
Verse data is sourced from the
Beblia Holy-Bible-XML-Format
repository at build time (npm run fetch-data). Modern copyrighted translations
(Luther 2017, Schlachter 1951/2000, Hoffnung fΓΌr alle, NIV, ESV, β¦) are deliberately
not included β they must not be redistributed without a license.
The plugin code is MIT-licensed.
Compatibility notes
- Daily Notes / Periodic Notes: automatic insertion uses the folder and date format
from your Daily Notes settings (via
obsidian-daily-notes-interface). - Templater: supported β see the placeholder section above.
- Mobile: fully supported (
isDesktopOnly: false, no Node APIs). - Without the Daily Notes plugin, automatic insertion stays dormant (a warning appears in the settings); all manual commands keep working.
Manual test checklist
For testing in a real vault (this repo's CI covers unit tests and the build):
- Fresh vault β enable plugin β create today's daily note β callout appears once.
- Re-open / re-create the note β still exactly one callout (idempotency).
- Add
{{bible-verse}}to the daily-note template β placeholder is replaced at the configured spot. - With Templater enabled and a template that overwrites the note β still exactly one callout after ~4 seconds.
- Toggle themes in the settings β pool counter updates; verse changes on the next day.
- Command "Re-roll today's verse" β callout in the open note is replaced; re-running "Insert today's verse" yields the same re-rolled verse.
- Whole-Bible mode without download β notice + curated fallback; after "Download now" β verses from the whole Bible.
- Switch language β book names, notation and verse text follow.
- Mobile app: repeat steps 1 and 7.
- Create yesterday's daily note via the calendar β it gets yesterday's verse.
Development
npm install
npm test # vitest unit tests
npm run build # type-check + production bundle (main.js)
npm run dev # esbuild watch mode
npm run fetch-data # regenerate data/generated/ from the source Bibles (needs curl)
npm run validate-refs # structural checks + pool statistics for the curated list
Architecture: everything under src/core/ is pure TypeScript (no Obsidian imports,
enforced by a test) and unit-tested; the files in src/ are thin Obsidian glue.
Curated verse references live in data/curated-refs.json; the verse texts are
generated into data/generated/ at build time and committed.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.