polygonhunter41 downloadsStart 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.
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.
{{bible-verse}}
placeholder in your daily-note template, or manual commands.Until the plugin is listed in the community directory:
main.js, manifest.json and styles.css from the latest release.<vault>/.obsidian/plugins/daily-bible-verse/ and place the three
files inside.Or install via BRAT with the repository
polygonhunter/daily-bible-verse.
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).
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).
| 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(...).
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).
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.
| 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.
obsidian-daily-notes-interface).isDesktopOnly: false, no Node APIs).For testing in a real vault (this repo's CI covers unit tests and the build):
{{bible-verse}} to the daily-note template → placeholder is replaced at the
configured spot.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.