Skip to main content

Bible Module Format

A module is a single SQLite database file containing one body of study content — a translation, a commentary, a dictionary, a devotional, a topical index, a cross-reference set, or an entity tag graph — together with enough metadata to identify, license, and validate itself. Installing one is copying a file; removing one is deleting a file.

This section publishes the shipped SQL schemas verbatim, so you can build a module the reference application will read without consulting any source code.

  • Schema reference — the complete DDL for every module type, straight from the app's own schema files.

The three required tables

Every conforming module, whatever its type, carries:

  1. module_info — one row (info_id = 1) declaring identity (module_uuid), format / format_version, canon = protestant-66, versification = kjv-english, and licensing.
  2. verse_link — the single uniform content→verse linking shape (may be empty). verse_id_end is NOT NULL; a single verse is verse_id_end = verse_id_start.
  3. schema_version — at least one row recording the schema revision.

Generate and validate a module

The reference repository ships tooling for the whole round trip:

# 1. Emit an empty, conforming template pre-filled with a fresh module_uuid
node scripts/create-module-template.js --type=commentary --abbr=mycomm --name="My Commentary"

# 2. Fill the content tables (see the schema reference), then validate
node scripts/validate-module.js commentary_mycomm.db

The validator enforces every MUST in the format: canon and versification values, a valid module_uuid, the required tables, the range convention, and — for Bible modules — that no verse falls outside the 66-book canon.

The full normative specification lives in the repository at docs/Design/DataModel/ModuleFormat.md.