Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Bible CLI

An offline-first command-line application for reading and searching the Bible without leaving the terminal.

Status

The Go CLI is under active development and includes an offline WEBP reader backed by an embedded SQLite database. Reading output is styled when used in a terminal and automatically switches to stable plain text when redirected. See docs/PLAN.md for the product scope, architecture, milestones, and acceptance criteria.

Product direction

The initial interface will be command-oriented and friendly to both people and shell pipelines:

bible read John 3bible read "John 3:16"bible read "John 3:16-21" --plainbible search "for God so loved"bible booksbible random

The currently implemented commands include:

bible read John 3bible read "John 3:16"bible read "John 3:16-21"bible read Jn 3:16 --plainbible read John 3 --nextbible read Matthew 1 --previousbible read "1 Cor 13"bible booksbible search "living water"bible randombible translationsbible config show

bible books lists all canonical names, source codes, and accepted aliases. Chapter navigation crosses book boundaries, so moving forward from John 21 reads Acts 1 and moving backward from Matthew 1 reads Malachi 4.

Output adapts to its destination:

bible read "Psalm 23" # styled terminal outputbible read "Psalm 23" --plain # stable tab-separated outputbible read "Psalm 23" | less # automatically plain, with no ANSI escapesbible read "Psalm 23" --no-color # readable layout without terminal colors

--plain and --no-color are global flags and may appear before or after the subcommand.

Search works entirely offline and returns verses containing every query token, ranked by relevance with canonical Scripture order as a stable tie-breaker. Matching words are emphasized in interactive colored output:

bible search "living water"bible search "faith hope love" --limit 10bible search "kingdom of God" --plain

The default result limit is 20. Use --limit (or -n) to request between 1 and 100 results. Punctuation and case do not affect matching. A plain search with no matches writes no output, making it safe to use in shell pipelines. Match highlighting never changes --no-color, --plain, or redirected verse text.

Discovery commands also work offline:

bible randombible random --plainbible translations

bible random selects uniformly from all 31,103 bundled WEBP verses. bible translations reports the bundled text edition, language, canon, source, public-domain rights notice, trademark notice, and publisher text policy.

Configuration

Bible CLI uses the same configuration convention on macOS and Linux. The path is resolved in this order:

  1. $BIBLE_CLI_CONFIG_HOME/config.json
  2. $XDG_CONFIG_HOME/bible-cli/config.json
  3. ~/.config/bible-cli/config.json

The first two environment variables must contain absolute paths. Inspect and change preferences with the CLI instead of editing JSON directly:

bible config pathbible config showbible config set plain truebible config set color falsebible config set translation webpbible config reset

Saved preferences provide defaults. Explicit command-line flags take priority, including --plain=false and --no-color=false. Redirected output remains plain even when the saved plain preference is false.

The first release should:

  • work completely offline;
  • start quickly and ship as a single executable;
  • understand common Bible reference formats and book aliases;
  • produce readable terminal output and clean redirected output;
  • use Bible text that is legally redistributable; and
  • leave room for additional languages and translations.

Proposed stack

  • Go
  • Cobra for CLI command parsing
  • SQLite with full-text search
  • Lip Gloss for terminal presentation
  • Bubble Tea later, if a full-screen reader proves useful

Development

The project requires Go 1.26 or newer and Make. Run the complete local check:

make check./bin/bible version

See CONTRIBUTING.md for the development workflow and Bible text licensing requirements.

Installation

Tagged releases ship checksummed single-binary archives for macOS and Linux on Intel/AMD64 and ARM64. Public release downloads require no GitHub account, API token, or GitHub CLI. See the installation guide for archive verification, installation, source builds, and Bash, Zsh, Fish, and PowerShell completion setup.

License

Bible CLI's source code is licensed under the MIT License. Bible translations are separate works with their own copyright and redistribution terms; no translation should be bundled until its license and required attribution have been verified and documented. See Third-Party Notices for the bundled World English Bible text's provenance, public-domain status, trademark notice, and text policy.

About

An offline-first command-line Bible reader

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages