Skip to content

About

MacOS presentation app to display Holy Bible verses in two translations.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

ViewTheWord

A local macOS app for browsing and projecting Bible verses in one or two translations. Requires an Apple Silicon Mac running macOS 26.0 or later. Malayalam BSI and English UKJV are included; an internet connection is not required.

Getting started

  1. Choose a book and chapter, or enter John 3:16 in Ref mode and press Return. A submitted reference projects immediately; browsing a book or chapter only navigates. Activating a bookmark or history entry loads and projects its verse.
  2. Click a verse to project it. In the verse list, Up/Down projects the previous/next verse; Option-Up/Down loads the previous/next chapter. Space projects the selected verse using this tab's translations, or stops output if that verse and those translations are already live.
  3. Open Manage Outputs from Settings or the projection controls. Assign the Audience destination to a monitor, or add native and AltView destinations. Use Identify and Name… to distinguish identical monitors. ViewTheWord remembers their numbers, names, and macOS display UUIDs, including disconnected monitors. Close an output before changing its monitor assignment. Enabled native destinations use distinct monitors; None leaves an output unassigned. If its monitor disconnects, becomes mirrored, or cannot be distinguished, output closes; reconnect it and explicitly project again.
  4. Watch the Live reference and output display above the verse list. Preview shows the output layout; Blank hides the content while keeping the window open; Stop cancels pending projection and clears scripture; open outputs with clock standby enabled remain clocks. Escape in the passage stops output, and Escape on a native output closes that output. With a transparent background, Blank reveals the underlying screen content. An open projection keeps the Mac and displays awake, including while blanked or transparent; the last native output closing and quitting release this protection.
  5. Choose Primary and Secondary translations in each passage tab. Choose None under Secondary to show only the primary translation. Changing translations in the tab supplying live output refreshes the projected verse and preserves blanking; projection stops if that verse is unavailable. Open Settings with Command-comma to edit reusable output profiles, manage destinations, or manage the Bible Library. Audience keeps the existing appearance; Confidence shows both available translations; Lower Third uses compact placement and chroma green. Show clock when empty or blanked is available to every native profile and is on by default for Confidence. Enabled, assigned outputs with that setting on start their clock on launch without projecting scripture. The setting applies to every native output using the profile. Each native output can use a different profile while following the same committed verse.

Use Command-T to keep another passage ready in a native tab, or Command-N for a new window. Open in New Tab in a reference's context menu (or Command-Return for the selected passage) prepares it without changing output. Switch with Control-Tab / Control-Shift-Tab, drag tabs to reorder, and close with Command-W. Each tab retains its navigation, search, scrolling, and translation choices. New tabs and windows start with a copy of the opening or selected tab's translations. Bookmarks, History, the translation library, and Live output are shared; closing the tab that projected a verse leaves output running.

Tab headings show the passage and translation abbreviations. A green ● Live marker identifies the tab supplying output; ● Blanked keeps that identity while output is hidden. Selecting another tab leaves output unchanged. Only projecting from another tab transfers the marker and control of live translations. After the source tab closes, output keeps its last content until another projection or Stop.

The top-right Output menu provides quick monitor, text-size, padding, alignment, reading-direction, translation-layout, names and transparency controls. Choose its Default output, or select a destination in Manage Outputs and click Make Default beneath the list. The list marks the current default. Use the + menu to add a Native Output or AltView Output, and − to remove the selected output. Quick appearance edits give that destination its own customized profile and leave other outputs and reusable profiles unchanged. A disabled default stays selected with greyed controls and a visible explanation; Manage Outputs remains available. AltView defaults offer the receiver's advertised layouts, with appearance controlled in AltView. Project, Blank and Stop continue to apply to all enabled outputs, regardless of the default.

The verse and chapter highlights show your current selection, including after projection stops. Live shows which reference is being projected when you browse elsewhere.

Use View The Word → Check for Updates… to download and install new releases. Automatic checks show an Update button without interrupting your work; choose the update and install it when you are ready to restart. You can turn automatic checks off in the app menu. Existing users install the first version with this feature manually. See self-updates.

In the chapter grid, arrow keys follow the current arrangement and keep focus there. Return or Space opens the selected chapter again; Command-Left/Right moves between workspace columns. In the verse list, Command-Up/Down jumps five verses, Page Up/Down jumps ten, and Home/End selects the first/last verse. Left/Right moves from the verse list to another column or search.

Bookmarks are available from verse actions and appear with history beneath the chapter list. Only direct reference submissions are added to history. Adding, removing, and clearing bookmarks support Undo/Redo. If a stored history/bookmark file is unreadable, the app preserves a recovery copy and shows a message.

AltView output

Open Manage Outputs, add an AltView destination, and select its row. This Mac is selected by default for new connections and waits for the local AltView receiver; saved receiver choices are retained. To use another Mac, select its discovered receiver or choose Manual address and enter its host and port. Enter the eight-character code shown on the receiving Mac. Allow Local Network access when macOS asks. Connect Only pairs the receiver without enabling or changing output; enable the scripture destination separately, then project a verse in ViewTheWord to send it. ViewTheWord restores saved receiver control connections at startup independently of output enablement. Each receiver has independent connection and output status, and multiple destinations share one discovery service. To reconnect manually, leave the code empty to reuse the saved pairing.

Choose This Mac when AltView runs on this Mac. Discovery finds its current port and keeps tracking it with Settings closed; manual connections need the port shown in AltView Settings. AltView shows both selected translations on Confidence in labelled side-by-side columns, beneath a shared reference and clock. Audience stays primary-only. Blank retains both Confidence texts; Stop clears them. A missing or unselected secondary uses a full-width single column.

Layout lists the receiving Mac’s available layouts, with Scripture selected by default when available. Choose Receiver’s layout to send no template request. A choice applies when you next project a verse; changing it does not update live output. Blank, translation refresh, and reconnection retain the last published choice. Unavailable choices stay saved but are omitted when sending, and unsupported layout requests are omitted. Settings also reports whether AltView follows the request or overrides it with a fixed template or custom layout.

A compact status badge in the workspace footer and Settings turns green while the paired receiver is connected, amber while connecting or unavailable, and gray when off. The footer continues updating with Settings closed and leaves keyboard focus unchanged. Green confirms the connection; output readiness and snapshot acknowledgements are reported separately.

AltView Audience receives the reference, primary verse text, and translation name. Confidence additionally receives the committed secondary verse and its actual translation name. If the primary verse is absent, the available secondary text and name form the existing single-translation fallback on both outputs. Verse changes, source-tab translation changes, Blank/Unblank, and Stop/Escape follow local projection. Browsing, switching tabs, and closing a passage tab leave output alone. Appearance and the receiving display remain controlled in AltView.

The connection runs independently of browsing and local projection. If the receiver is offline or AltView restarts, ViewTheWord retries one connection at a time in the background, with delays increasing to 30 seconds. Rapid changes send the newest snapshot without accumulating a backlog. Projecting a verse takes output from another connected app without requiring that app to release or ViewTheWord to reconnect manually. A projection made during reconnection remains queued until AltView grants it; Stop cancels it. Background reconnection alone resumes a former owner's output only if no other sender controls AltView. Cancel stops a pending connection or retry; Disconnect is available only when connected. Both disable remote sending for the current app session without stopping local projection. Pairing secrets and receiver identity are saved together in Keychain, with an in-session fallback and visible notice if saving fails. Keychain read failures are explained in Settings. A changed receiver code or identity requires entering its code again.

Update AltView, eucaly and ViewTheWord together: this integration requires protocol 3, with no older-protocol fallback. Receiver UUIDs are the Keychain account identity; service renames and current endpoint resolution retain the pin. Previous unpinned service/manual records may require pairing again. Reset Pairing in AltView stops text and Media and rotates both credentials; ViewTheWord enters the new receiver code and remains a scripture sender. It does not receive Media credentials or start Media. The workspace footer and Settings report snapshot acceptance and output readiness separately. A closed output window, preview-only window, missing display, minimized window, sleeping display, or unavailable artwork is reported even while text is accepted. If acknowledgements are delayed, sending and local projection continue. Acceptance confirms receiver state, not rendered pixels or downstream HDMI output. Text over its protocol limits stops only ViewTheWord’s remote output and shows a notice; local projection continues.

Searching

In Ref mode, short book prefixes work: p 1 1 opens Psalm 1:1, and 1p1 1 opens 1 Peter 1:1. When several book names match, the first book in Bible order is used. The chapter must exist in that book, so 1p140 is rejected.

Spaces, a colon, or a period can separate the chapter and verse. psa 5 5 opens Psalm 5:5, and psa 5 defaults to Psalm 5:1.

Choose Words or Phrase beside the search field:

Input Mode Meaning
jesus mary Words Both whole words, using implicit AND
god OR love AND mercy Words God, or both love and mercy
love NOT hate Words Love without hate
god AND (love OR mercy) Words Explicit grouping
his only begotten son Phrase Literal substring
nt: faith AND hope Words New Testament only
john: light Either text mode Only John

NOT binds before AND, then OR. Parentheses change that order. Phrase search treats % and _ literally. Filters also include ot:. Malformed expressions and unsupported reference ranges produce an explanation instead of silently changing the query.

Search matches either selected translation and shows the counterpart translation for each verse. Results are ordered by book/chapter/verse. 100+ results means more are available through Load more results. Arrow keys select a result; Return, Space, or clicking projects it. Command-L returns focus to search. Tab and Shift-Tab follow normal macOS control navigation.

The native search field submits on Return or the search action. Its magnifying-glass menu lists recent queries for the current search mode. The cancel button clears the draft and pending browsing/search; Escape stops projection and preserves the draft. These recent queries are separate from the saved verse history.

Translations

Use Settings → Bible Library → Import Bible, or open a .bible file with ViewTheWord. Choose translations in each passage tab, including while viewing search results. The last translation selection is remembered for the first tab next time; existing tabs keep their own choices. Imported translations immediately appear in every picker. Re-importing a filename offers replacement; the existing copy survives a failed validation. Remove moves an imported translation to Trash. Included translations cannot be replaced.

If a preferred translation is unavailable, the tab uses an available Bible and restores the preference when it is imported again. Choosing another translation replaces that preference. If no translations are available, the workspace shows an import message and stops live output from an open source tab. Importing restores browsing; project a verse to resume output.

The app validates and indexes a private copy of each import. Translation numbering can differ: missing verses fall back to another available row for navigation, while unavailable live references stop projection. See the file format and converter guide for producing .bible files.

Build and test

Open ViewTheWord.xcodeproj in Xcode 26.5 or later, choose the ViewTheWord scheme, and configure your signing team. CI uses macOS 26 with Xcode 26.5 selected explicitly. For a local build without a configured signing certificate:

xcodebuild -project ViewTheWord.xcodeproj -scheme ViewTheWord -configuration Debug -derivedDataPath build/DerivedData CODE_SIGNING_ALLOWED=NO build
swift test --scratch-path build/SwiftPM
python3 scripts/test-review-regressions.py
python3 scripts/test-release-workflow.py

The Swift package tests the same parser, database, import, navigation, projection preparation, persistence, text fitting, and native reference-table sources used by the app. Native tests exercise keyboard events, focus, scroll restoration, and row actions. CI runs these checks plus Debug and Release builds once per PR update and on pushes to master; feature-branch pushes and release tags do not start a second run. New commits cancel older runs for the same PR or branch. Manual checks cover physical keyboard/VoiceOver behavior and displays.

With local Xcode signing configured, make build exports an Apple Silicon (arm64) app to ~/Applications. Xcode and CI use the same architecture. Run make to list commands. make clean removes build caches while preserving saved releases and refuses to run during a release.

The layered VTW app icon is editable in Icon Composer. See the icon source and rendering guide for appearance previews and build integration.

The passage workspace uses native AppKit controls and an independent navigation model for each tab. One shared LiveProjectionController publishes committed scripture and owns every native output window and AltView destination session. Settings also uses native AppKit controls. Help, preview, and projected content are separate SwiftUI screens. See the architecture guide for state ownership, navigation, data access, and validation boundaries.

Maintainers can find signing, notarization, and publishing instructions in the release guide.

About

MacOS presentation app to display Holy Bible verses in two translations.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Contributors

Languages