Bible search and display web app
Built using Crystal (programming language), Kemal (web framework), SQLite (database)
- Interlinear search results
- Full text search: English, Hebrew, and Greek
- Provide your own Bible content
- No server required - uses sqlite database (local)
- Good performance - compiled code
- Query Greek and Hebrew by root/lemma
- Search for works with specific part of speech
- Strong's definitions - both popup and inline
- See difference, union, and intersection across prior search results
- Uses Bootstrap 5
- Install Crystal - https://crystal-lang.org
- Install Kemal - https://kemalcr.com
- Clone this repo
- Rename
.env-exampleto.env& update values to match your environment - Install dependencies -
shards install - Install just - https://github.com/casey/just (optional)
- Install watchexec - XYZ (optional)
- Set up the database - instructions pending
- Install Bible context server - c.f. https://github.com/balain/bible-context-server
-
dotenv - https://github.com/drum445/dotenv
-
sqlite3
-
kemal
-
Local copies of D3 (http://d3js.org/d3.v4.min.js)and Dimple (http://dimplejs.org/dist/dimple.v2.3.0.min.js)
- Download and store in the bcv-kemal/public/js folder or update bcv_chart.cr to point to them by URL
- just
- watchexec
- local bible-context-server instance (localhost) - for contextual popups
- Set up .env file with sensible defaults, including Bible Context Server (see below for details)
- Run
just watch(orcrystal run src/bcv-kemal.cr)
- Run
just prod(orKEMAL_ENV=production crystal run src/bcv-kemal.cr --release -O3)
- Run
just build-prod(orKEMAL_ENV=production crystal build src/bcv-kemal.cr -o bcv-kemal --release -O3)
Set up a new .env file with sensible defaults
DBFILE: Path to SQLite database fileBASE_ENG_TRANS: Base English translation to use for full text search
CXT_OL_TIPPY_METHOD: Method (http|https) of bible-context-server instanceCXT_OL_TIPPY_PORT: Port of local bible-context-server instanceCXT_OL_TIPPY_PATH: Path of local bible-context-server instanceCXT_OL_ICON: Icon to use for context popup
CXT_GGL_TIPPY_METHOD: Method (http|https) of bible-context-server instanceCXT_GGL_TIPPY_PORT: Port of local bible-context-server instanceCXT_GGL_TIPPY_PATH: Path of local bible-context-server instanceCXT_GGL_ICON: Icon to use for context popup
See .env-example for details
- Change SQL to parameterized queries
- Document database schema
- Document .env fields
- Document content ETL
- Capture performance metrics
- English Bibles: https://openbible.com/texts.htm - several translations available
- Greek New Testament:
- Hebrew Bible:
- Strongs: https://github.com/STEPBible/STEPBible-Data/tree/master/Lexicons
- Queries are parameterized - avoids SQL injection
- Kemal server is http, not https
- There is no support for separate users or authentication - e.g. query history is shared across all clients
- Content: Abide by all copyrights and other content restrictions
TODO: Write development instructions here
- Fork it (https://github.com/balain/bcv-kemal/fork)
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request
MIT
Copyright © 2025
See LICENSE for full license content.
- John - creator and maintainer