Skip to content
getbiblePublic

Repository files navigation

getBible

Cross-platform Flutter implementation of getBible, maintained at getbible/app. It targets Android, iOS, web, Windows, macOS, and Linux from one native Flutter codebase. Scripture comes from getBible Bible v3, reference previews use Query v3, and private reader data remains on the device. The reader does not use a WebView.

The React application at getbible/app.getbible.life and its live deployment are the product source of truth. Flutter must reproduce the same reader behavior and data contracts natively. See the web-to-Flutter parity contract.

Development status: the alpha reader includes Bible v3, Search and Query, contextual Study, unified personal/global bookmarks, private notebooks, complete backups and offline public resources. Automatic downloads and reader alignment are part of this candidate; actual run evidence and remaining device, language-review and store gates are recorded in testing and feature parity. Downloadable development packages are not store-approved releases.

Supported targets

Target Development/test command Distribution output
Android flutter run -d android Installable development APK; optional signed APK/AAB
iOS/iPadOS flutter run -d ios Simulator APP ZIP; unsigned device bundle; optional signed IPA
Web flutter run -d chrome Static website ZIP with an offline application shell
Windows flutter run -d windows Setup EXE and portable ZIP
macOS flutter run -d macos Drag-to-Applications DMG and APP ZIP
Linux flutter run -d linux Debian DEB installer and portable TAR.GZ

Download published versions from GitHub Releases. Alpha 5 establishes the corrected getBible naming and requires removing earlier alpha installations and their local test data. This development reset does not migrate previous installation or database names. See installation and testing for device requirements, unsigned-package behavior and checksum verification. Flutter creates application bundles; this repository's packaging scripts turn them into installers. Linux currently has a DEB and portable bundle, not an AppImage.

Requirements

  • Flutter stable pinned in .flutter-version (currently 3.44.6; use the same SDK as CI)
  • Dart 3.12.2 or newer
  • Android Studio/SDK for Android builds
  • macOS with Xcode for iOS/macOS builds
  • Native Linux/Windows toolchains for their respective desktop targets

See local development and error recovery for a checksum-verified SDK installer and target-specific preflight checks.

Start developing

flutter doctor -v
flutter pub get
flutter run

The application ID and iOS bundle ID are life.getbible.mobile. No API key is required for the public getBible API.

Choose a Bible passage

The translation button above the chapter heading opens its own searchable chooser. Search by translation name, abbreviation or language, inspect the selected translation's details, then choose Open in reader. The reader keeps the current book and chapter when the chosen Bible publishes them. Otherwise, it asks you to choose an available book and chapter before changing the reader. Browsing or cancelling a choice does not select or download another Bible.

Tap the current passage to open the book grid, grouped by testament with other published books retained. Choose a book to see its actual chapter grid, including introductions and nonconsecutive chapter numbers when supplied by that Bible. Back returns to books; choosing a chapter opens it. Search, passage controls and chapter arrows are placed toward the left. Compact screens use keyboard-aware sheets; wider windows use dialogs. The left menu retains reader appearance, text size, width, backups, downloads and other settings.

Scripture and reference previews

The reader discovers translations, books and chapters through https://api.getbible.net/v3, including published source IDs beyond the usual 66-book canon. It retains original verse text, lexical metadata, source styles, ordered chapter headings and introductions. The Source text styles reader preference changes presentation without modifying Scripture or private saved text ranges. Personal selected-text markings retain their original UTF-16 code-unit offsets and quote; a quote mismatch after a source revision stays saved without coloring unrelated text.

The verification icon toggles a compact explanation beneath the chapter header. It distinguishes verified Scripture from an offline copy whose current hash could not be checked, and links to the Bible API documentation. Translation licensing ends with the book artwork, “The Word for the world!” and “Powered by getBible APIs.”, linking to general documentation.

Open Reference preview from its icon beside the chapter heading, the settings drawer or verse context menu. Query v3 at https://query.getbible.net/v3 resolves the chosen Bible's citation without installing a translation. The compact sheet or wide panel shows the reference, translation and native selectable Scripture, with Copy, exact-verse Open and bounded citation back history. Closing preserves the reader position; Open loads the contextual chapter only when explicitly chosen. Finish or close an active inline note editor before using Open in reader; the preview keeps its draft in place while that editor is active. Missing or incompatible references display an error without substituting a default passage. Installed Bibles resolve supported references locally using their published book names and coordinates, without a Query request. Unavailable names or coordinates produce a clear error; see the offline search contract.

Search and Study

Online search uses https://search.getbible.net/v3 for the active Bible and loads additional pages only when needed. It preserves all/any/phrase and whole-word/substring modes, case sensitivity, testament or selected-book scope, diacritics, exclusions, proximity and canonical/relevance order. Reference queries display the complete resolved selection. Searching does not download a whole translation or silently switch to local corpus search.

Tap a Scripture word to open its dictionary context, or use native selection to search the exact selected phrase. Copy, markings and inline note controls remain available. Verse context actions open commentary or related public topics; the chapter context opens chapter commentary. Study Scripture opens as a centered dialog on wide windows and a keyboard-aware sheet on compact screens. Its passage context, selected text, Search selection action and Dictionaries / Commentaries tabs stay together. Personal tools use a separate resource selector for topics, markings, notebooks and verse notes. Closing restores reader focus and preserves its passage and scroll position.

Dictionary lookup retains source lexical IDs, lemmas, morphology and transliteration and confirms definitions across available resource indexes. Installed resources are searched first when present; Include online dictionaries explicitly expands that scope. Suggestions and unavailable resources are distinct from confirmed definitions. The chooser contains only dictionaries with a confirmed definition for the current lookup, including related-entry navigation. Strong's identifiers are actionable and repeated definitions remain visible. The full dictionary catalogue remains available through the unbound browser. Commentary uses published book/chapter coverage and retains ranged and introduction entries. Resource choices display their actual source language; unavailable coverage has an explicit state. Dictionary, commentary, topic and notebook citations reuse the same selected-Bible Query preview and do not navigate the reader until Open is chosen.

Each verse has a direct bookmark icon. Its scrollable menu shows linked topics; Add another topic expands a searchable list and adds a membership without removing existing ones. Clicking a topic opens its bookmarks, with All topics and Back to verse navigation. Topic cards load actual Scripture from the selected Bible through installed resources or Query, with bounded progressive loading, caching and per-verse retry. Fetched text never replaces a saved quotation.

Global and personal topics share a list while memberships retain their separate origins. Follow and Hide are local choices. Copy to my markings previews an independent private copy with collision-safe identities and duplicate-safe repeated copying. Public updates cannot edit that copy or personal notes.

Notebooks provides local titled documents with ordered text blocks and optional attributed Scripture quotations. Autosave, durable draft journals, Retry and conflict recovery preserve drafts across ordinary navigation and restart. Canonical one-note-per-verse editing remains inline and works across translations. Schema 3 adds notebook storage without converting existing notes. Use Backup and restore → Complete private backup to include notebooks, draft journals, verse notes, markings, reader preferences, reading position and Study choices/copy provenance. Website-compatible backup remains the v2 reader-data format and explicitly omits notebooks. A forced exit before a pending save completes can still lose its last uncommitted edit.

Backup and offline use

Open Backup and restore in the navigation drawer. Export prepares a snapshot before offering Save file and Copy; Scripture and notebook Markdown also offer system sharing where supported. Import selects a bounded JSON file, validates it and displays a preview before confirmation. The additive transaction preserves conflicting private work with deterministic identities. Backups contain private text in readable JSON; choose their destination deliberately.

The reader prepares the selected Bible for offline use in the background and automatically downloads all dictionaries and commentaries discovered in their catalogues. It does not download every Bible translation. Reading uses an available verified installation immediately while public acquisition runs through one queue. Downloads & storage shows progress, attribution, storage usage, retry and per-resource Keep offline controls. Turning that control off removes its local copy and persists an exclusion for that dictionary or commentary until it is enabled again.

Successful source checks are remembered for 30 days. Startup, resume or use checks resources whose interval has elapsed; unchanged hashes avoid another bulk download. Changed content is fully verified and indexed before atomic activation, and failures leave the previous installation readable. Check for updates bypasses the interval. Downloads run while the app is active; interrupted downloads restart on retry rather than resuming byte ranges.

Clear downloads removes public offline content while retaining private notes, notebooks, memberships, preferences and automatic-download exclusions. Default resources are acquired again on the next startup/use. The complete Bookmarks v1 dataset is a separate manual download and stays removed until requested again. Topic choices use API metadata or its saved copy, never a hardcoded list; downloading public content does not assign topics to verses.

Installed Bibles serve the reader and supported reference previews locally. Search prefers Installed when the selected Bible is fully available locally; its supported filters are stated in the search panel. An explicit source choice is retained, and Online remains available for service-only capabilities. Unsupported local filters never silently send the query online. Installed Study resources use the same native panels and citations. Public caches and downloaded corpora are excluded from private backups; reinstall public resources on a new device. Release Web packages also cache their application files after the first successful online visit. Once installation finishes, the browser can reopen the app with the network disabled. Browser storage eviction or clearing site data removes this capability and may remove private data; keep private backups.

See API/cache behavior, architecture, dictionaries, commentaries, public topics and notebooks for ownership, persistence and limitations.

Test the application

The fastest interactive test is the web target:

flutter pub get
flutter run -d chrome

For Android, enable developer mode/USB debugging or start an emulator, then run flutter devices followed by flutter run -d <device-id>. Every successful PR and main workflow builds versioned Linux, Windows, macOS, Android, iOS device, iOS simulator and Web packages. Download them from that run's Artifacts section. An unsigned iOS device bundle validates compilation; use the simulator bundle or a signed/TestFlight build for execution. Web files need an HTTP server.

pubspec.yaml is the single alpha/beta/rc/stable version source. Successful main CI automatically promotes its verified packages to GitHub Releases without rebuilding. An unchanged published version is skipped. Publish tested packages also accepts a successful main run ID for retrying publication of retained artifacts. Signing is optional and independently configured per target. See distribution and signing credentials. Store submission comes later.

pub.dev is not an application testing service. It is Dart and Flutter’s public package registry. This application is not intended to be published there as a reusable package. Test builds belong in GitHub Actions artifacts, GitHub Pages, TestFlight, Play Console internal testing, or locally attached Flutter devices.

Quality checks

dart format --output=none --set-exit-if-changed .
flutter analyze
flutter test
flutter build apk --debug

CI runs the same checks, native Linux reader/Study/offline-portability journeys, actual compiled browser startup/persistence checks and native-host builds for every target. It packages versioned artifacts and checksums. Consult testing before merging reader, storage, backup, cache or distribution changes.

Release builds

Android:

flutter build apk --release
flutter build appbundle --release

iOS, on macOS:

flutter build ios --release --no-codesign

Signing keys and provisioning profiles must never be committed. Complete instructions are in deployment and distribution.

Architecture

The code is divided into domain models/contracts, data adapters, application state, services, and presentation. SQLite is accessed through Drift's executor; network responses are parsed into strongly typed immutable models. Opened chapters are cached, their SHA endpoints are checked, and usable cached Scripture remains available when verification cannot reach the network.

lib/
  application/       reader lifecycle and independently owned Study controllers
  core/              errors, JSON validation, product identity, localization
  data/api/          shared transport and service-specific typed adapters
  data/database/     local SQLite schema and platform executors
  data/repositories/ cache and persistence implementations
  domain/models/     versioned data contracts
  domain/repositories/abstract persistence contracts
  presentation/      native reader, Search and adaptive Study UI
  services/          Scripture mapping, backup and Markdown operations

See architecture and data contracts.

Privacy

Verse notes, notebooks, draft journals, markings, preferences, cached Scripture and reading position stay on the device. The app has no accounts, advertising, analytics or tracking. Online Search sends the entered or explicitly selected query and chosen filters. Query previews send only the selected Bible and requested Scripture citation; Study requests retrieve public resources and coordinates. Private notebook/note bodies and markings are not uploaded. See the privacy policy draft.

Branding

The display name is exactly getBible; technical package and executable names use getbible where lowercase is required. ProductIdentity centrally owns the name and public destinations. Every generated Scripture link points to https://app.getbible.life; documentation and verification use the distinct destinations described above. API service roots remain in ApiConfiguration.

All launchers, favicons, splash artwork and window icons use the approved getBible artwork in assets/branding/. In-app identity combines the book artwork with native getBible text. CI checks the artwork manifest and naming contract. See the reader alignment contract and branding guide.

Documentation index

License

The existing repository license is retained in LICENSE. Scripture translations remain subject to the license and copyright metadata returned by getBible Bible v3; the application license does not relicense translation content.

Releases

Contributors

Languages