v1.5.13 — Performance, Dice Parser v8 & iCloud Hardening
Released on March 23, 2026
This one is mostly under the hood — but the kind of under-the-hood work you’ll actually feel. The two big wins: iOS fresh-install table copy went from nearly three minutes to under a minute, and a macOS startup hang that left some players staring at a black spinner for 85+ seconds is gone. There’s also a complete rewrite of the dice engine (v8), a batch of iCloud fixes that came out of weeks of debugging sync edge cases, and a security hardening pass on Expanded Features table access.
No new tables or features this time. Those followed in v1.6.0. This release is about making what’s already there faster and more reliable.
Highlights
- iOS first-run setup: 166s → 43s. Replaced sequential per-file isolate spawns (708 total) with parallel batches of 50 and removed redundant fsync calls. New users now see a themed progress screen with a Mythic badge and table count instead of a black spinner.
- macOS startup hang fixed. App Nap was throttling iCloud file I/O when the IDE held window focus — moved non-critical metadata sync to fire-and-forget.
- Dice Parser v8. Migrated from
dart_dice_parser(pub.dev) tomythic_dice_parser(our own fork). Async rolling API, cleaner compound dice display (no more showing both trigger and result), and sorted drop/keep output — discarded dice first, kept dice second. - iCloud reliability pass. Fixed invisible journals after a storage refactor, stale names after rename, sync status misreporting, and a crash when resetting storage to default.
- Expanded Features table security. Table access now uses a hardcoded registry of 181 table IDs compiled into the binary — editing the JSON field on disk no longer bypasses the entitlement check.
Changed
- Removed all Git submodules; private dependencies now live on OnePub package hosting. All CI pipelines authenticate with
ONEPUB_TOKEN. - Migrated to Font Awesome Pro 7.2.0 (4,318 icons, 115 new).
- Dice roller: compound dice now replace the trigger die with the compounded sum. Drop/keep operations sort discarded dice first for clearer visual hierarchy.
- Adventure Log: action buttons (copy, edit, delete) on log entries are now behind a collapsible chevron to reduce visual clutter.
- All file I/O moved off the UI isolate via a shared
IoIsolateRunner— eliminates UI-thread jank from file reads on all platforms. - Formula export now uses the platform share sheet on mobile and a Save File dialog on desktop (the old directory picker was broken on mobile).
- macOS: migrated Mac App Store detection from deprecated
appStoreReceiptURLto StoreKit 2.
Fixed
- Performance: iOS fresh-install table copy from ~166s to ~43s (parallel batches, removed redundant fsyncs).
- Performance: macOS startup hang (85+ seconds) caused by App Nap throttling iCloud I/O in IDE debug mode.
- macOS: Meaning tables and event focus tables failing to load after Flutter 3.41.1 merged UI/platform threads — migrated
Isolate.runcalls tocompute(). - iCloud: Journals and backups invisible after the storage architecture refactor — path prefix filtering was comparing against bare filenames.
- iCloud: Stale journal names after rename — routed post-mutation refreshes through immediate-consistency listing.
- iCloud:
enableCloudSyncreturning success after a failed migration — UI could show sync enabled while storage stayed local. - iCloud: App hangs from blocking
readInPlace/sync I/O on the main isolate — replaced with async hydration and parallelized reads. - Storage: Crash when tapping “Reset Storage Location” while already on the default path.
- Adventure Log: Black screen crash when dismissing narrative entry or log edit sheet during async submit — added
PopScopeguard. - Dropdowns: Overlay remaining active after route pop, causing focus traversal crashes.
- Categories: File load crash on filesystem race condition — now falls back to restore-from-assets.
- Journals:
loadLastSavedJournalfailing when the directory contains unreadable files — now skips them.