[sword-devel] PocketSword
Maxwell Murunga
maxmmur at gmail.com
Wed Jul 8 01:51:55 EDT 2026
Dear all,
I am the Maxwell who wrote in briefly on January 14th suggesting a Swift
port of PocketSword. I want to follow up, now that I actually have
something concrete to show.
In the months since that thread, I changed approach. Rather than a
Swift-only port — which would have solved the iOS problem but done nothing
for the broader ecosystem — I built a full Kotlin Multiplatform
implementation that targets Android and iOS from a single codebase. The
project is called *HisWord* and it is open source here:
*https://github.com/maxymurm/hisword*
I want to be transparent about what it is and is not, and about where I
stand in relation to the existing community efforts.
------------------------------
*What it covers*
HisWord is a unified platform built around two Bible engine implementations:
The first is the *SWORD library* (CrossWire). The project includes a fully
working PHP port of the SWORD engine — covering ZTextReader, RawTextReader,
ZComReader, RawComReader, ZLDReader, RawLD4Reader, RawGenBookReader, and
markup filters for OSIS, GBF, THML, TEI, and plain text, plus a
VersificationRegistry supporting all eight versification schemas. This PHP
engine has 84 passing PHPUnit tests and powers a web frontend (Inertia.js +
React). On the mobile side, the SWORD KMP engine (Kotlin/Native on iOS, JVM
on Android) was ported to pure commonMain Kotlin with expect/actual
wrappers for platform I/O. Genesis 1 loads in under 12ms on device. Both
implementations give access to the full CrossWire module catalog.
The second engine is *YES2/Bintex* — the proprietary compressed format used
in Yuku's Quick Bible / androidbible app for Android, covering
approximately 100 high-quality South-East Asian and Indonesian
translations. This engine was ported entirely from Java to pure Kotlin (no
JNI, no platform-specific I/O in commonMain), and includes BintexReader,
SnappyCodec decompressor, Yes2Reader with section index, and a
Yes2TextDecoder that handles all YES2 markup tags including red-letter
text, pericope headers, Strong's numbers, footnotes, and cross-references.
Both engines implement a single BibleReaderInterface. All UI, search, sync,
and study tools are completely engine-agnostic — the reader screen has no
knowledge of whether it is presenting a SWORD zText module or a YES2
compressed file.
------------------------------
*Architecture in brief*
The mobile app is Compose Multiplatform (Kotlin 2.x) with Voyager
navigation, SQLDelight for type-safe SQLite, Ktor for HTTP and WebSocket,
and Koin for dependency injection. The backend is Laravel 12 with
PostgreSQL, Redis, and Laravel Reverb for WebSocket broadcasting. The sync
layer uses a revision-vector delta protocol, with last-write-wins conflict
resolution and device-ID-based echo prevention on the WebSocket channel.
------------------------------
*What is complete*
Work began on March 13, 2026. As of today, across 23 commits:
- *Backend: complete*. YES2/Bintex PHP engine, SWORD PHP engine
(pre-existing), unified BibleReaderFactory, REST API, sync controller,
Reverb broadcasting, YES2 catalog, web frontend, CI/CD, production
deployment.
- *Mobile: complete*. Both binary engine readers, unified interface,
BibleReaderViewModel and full reader UI, navigation, full-text search
(parallel YES2 FTS and SWORD), markers system (bookmarks, highlights,
notes, labels), sync engine with WebSocket, Google/Apple Sign-In, reading
plans, devotionals, songs, study pad, word study (Strong's),
cross-references, VOTD widget, onboarding, splash screen, deep links,
share/clipboard, Sentry crash reporting hooks.
- Tests: 379 unit tests across 20 test files — binary readers,
repositories, sync events, UI flows, ARI encoding, performance bounds, and
accessibility validation.
------------------------------
*Relation to existing projects*
I want to be careful here. Bishop, Ezra, and AndBible are mature, respected
projects that serve real users every day. I am not suggesting HisWord
replaces them. What I am offering is an alternative starting point for
anyone who specifically wants:
- A PocketSword-like experience on iOS (SWORD modules, commentaries,
dictionaries, full module catalog)
- A Kotlin-first codebase with no Objective-C, no C++ JNI in the mobile
layer, and no JavaScript/TypeScript
- Native Compose UI that is shared between Android and iOS
- A unified abstraction over both SWORD and the YES2/Quick Bible format
To @Aaron Rainbolt's note about the deleted KMP repository from November
2024 — this is a different project entirely and has no relation to that one.
------------------------------
*On stewardship*
I do not claim ownership of this work. The SWORD library is CrossWire's.
The YES2 format and Quick Bible engine belong to Yuku contributors. I
started this project because I use these tools personally and wanted
something that worked cleanly on iOS, and no suitable open-source
implementation existed that I could find.
I am open to the project moving under CrossWire or another appropriate
organization. I am also open to handing stewardship to anyone with more
capacity — I have other commitments at the moment. If @Michael Johnson or
anyone on the list would like to continue this work or fold it into a
larger effort, please reach out. Collaboration is the point.
If anyone wants to review the code, file issues, test on iOS, or contribute
features, you are welcome. The architecture documentation and an autonomous
execution prompt for AI-assisted development are both included in the agents
directory.
I can be reached at maxmmur at gmail.com.
Blessings,
Maxwell Murunga
On Wed, Jan 15, 2025 at 3:52 PM Troy A. Griffitts <scribe at crosswire.org>
wrote:
> Hi Ryan,
>
> No, you are not the only one. Marjan pointed this out to me a couple
> days ago when I first posted in this thread. Looking into it, Google
> had removed Bishop 2 weeks ago because we had not properly identified
> CrossWire Bible Society as an organization with our D-U-N-S number and
> government issued trade name license. I started that process then and we
> have now been confirmed and our apps are back in the store:
>
> https://play.google.com/store/apps/details?id=org.crosswire.bishop
>
>
> On 1/15/25 3:32 AM, Ryan wrote:
> > Am I the only android user who can't find Bishop on Google Play anymore?
> >
> >
> >
> >
> >
> >> Bishop does this and compiles for both iOS and Android:
> >>
> >> https://crosswire.org/applications/#bishop
> >>
> > _______________________________________________
> > sword-devel mailing list: sword-devel at crosswire.org
> > http://crosswire.org/mailman/listinfo/sword-devel
> > Instructions to unsubscribe/change your settings at above page
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://crosswire.org/pipermail/sword-devel/attachments/20260708/2b5c7634/attachment-0001.htm>
More information about the sword-devel
mailing list