Open source, for churches
Lumina Live
During a service, one person runs the screen: a hymn, a Bible passage, the sermon slides, a video. Lumina Live is the desktop app for that job — a control window for the operator, a projection window for everyone else — and since October 2026 it is open source, with installers for Windows, macOS and Linux.
The problem
Lumina Live — called WorshipApp until October 2026 — was built to replace EasyWorship. It is the third attempt at it: an earlier project, now archived, and a plain-JavaScript version came first.
Operators already know EasyWorship’s two-step flow — pick an item, check it in the preview, only then send it live — so the replacement keeps it.
Constraints
- Runs on Windows, macOS and Linux; developed on a Mac.
- Live use: if the projector disconnects, the picture comes back by itself when it reconnects; if the projection window closes, it returns exactly as it was.
- Offline: everything local, including the Bible text and its search.
- Slides arrive as PowerPoint files — among them .pps hymnals that advance on their own, with the music embedded.
- Open source under GPL-3.0: the code, its documentation and its tests are public, in English, for anyone who wants to contribute.
What I built
An Electron app with a strict split: the main process owns state and the database, the operator works in a control window, and the projection window is a pure function of the last output it received. Reopen it and the main process replays that output — the screen comes back exactly as it was.
Secure defaults kept on — sandboxed renderers, web security enabled — with local files served through a custom worship:// protocol by id, never by path.
SQLite with Drizzle for service programmes, the media library and the Bible — the public-domain Reina-Valera 1909 ships with it, other versions import from five formats — with FTS5 full-text search that ignores accents, so typing “senor” finds “Señor”.
Any video or audio plays: whatever Chromium can’t decode is converted in the background by a bundled FFmpeg, without touching the original. The interface speaks English, Spanish, Italian and Portuguese, and the dictionaries are typed against each other, so a missing string doesn’t compile.
The hard parts
Control window
The operator queues songs, passages, slides
Main process
Owns state and SQLite; replays the last output
Projection window
A pure function of the last output
Slides pipeline
- .pptx
- LibreOffice
- pdf.js
- WebP
- (Cached by content)
One typed IPC contract
Every message between processes is declared once, in a single contract type. A missing or mistyped handler doesn’t compile, and errors travel back as a typed result instead of exceptions crossing process boundaries.
PowerPoint without PowerPoint
Automating PowerPoint over COM tied the app to Office. The current pipeline converts .pptx to PDF with headless LibreOffice, renders each page to WebP with pdf.js and caches the result by content — sidestepping the fact that LibreOffice exports only the first slide to PNG. Slide timings and audio are read straight from the presentation’s XML.
Reading it as a stranger would
Before the repository went public, its whole history was swept for keys, tokens and local paths, the licence was agreed with the author of the first version, and the bundled Bible was checked. Its spelling — “y fué la luz”, “ha dado á su Hijo” — gave it away as the 1909 Reina-Valera, in the public domain, not the copyrighted 1960 edition it was labelled as. It was renamed, with a migration for existing installs.
A space in the path
The Linux packages were tested in containers with Chromium’s sandbox really on — the end-to-end suite turns it off. That caught a .deb that wouldn’t start: installed under “/opt/Lumina Live”, the sandbox helper’s path was split at the space. It now installs to /opt/lumina-live and keeps the product name in the menu.
Result
- Released as open source on 23 October 2026: version 2.2.0-beta.4, with installers for Windows, macOS and Linux — Linux still marked experimental.
- 403 unit tests and 104 end-to-end tests, the end-to-end suite run against the packaged app.
- Next: the stable 2.2.0, once this beta has run a real church service.
This project is open source: its code, issues and releases are public on GitHub. Figures are illustrations.