Repository navigation
sysm 1.26.4.0 — Q4 2026 macOS 26 and Swift 6 Release
The first release that requires macOS 26. It moves the package to the Swift 6 language mode and carries three batches of correctness fixes from the macOS 27 framework-parity review, plus the bugs that verifying those fixes against the real apps turned up.
Breaking changes
- Requires macOS 26 (Tahoe) or later. 1.26.3.2 remains the last release that runs on macOS 13 through 15. The Homebrew formula now declares the requirement, so
brew upgradeleaves older systems on 1.26.3.2. reminders completeno longer completes whichever reminder it found first when several incomplete reminders share a title. It reports the candidates and their IDs, and the new--idoption picks one.photos exportreplaces an existing destination file instead of failing, matching how photo export already behaved.- For anyone using SysmCore as a library:
importFromICSreturns anICSImportSummaryof imported and skipped counts,completeReminder(_:)takes aReminderSelectorand returns the reminder it completed, and exported ICS UIDs now come fromcalendarItemExternalIdentifier.
Platform
- Builds in the Swift 6 language mode with strict concurrency. Public value models are
Sendable, and shared formatters, child-process pipes, and Photos result assembly no longer share mutable state across tasks. - Deployment target raised to macOS 26, which removes every availability guard and the Foundation Models fallback service.
- SysmCore API documentation is published on GitHub Pages.
Fixes
Calendar
- Reads ICS events that carry a
TZIDor a floating time. Such events were previously dropped without a word, which silently lost most of any file Outlook or Google Calendar produced. - Exports a repeating event once with its
RRULE, rather than one identicalVEVENTper occurrence, and writes an edited occurrence as aRECURRENCE-IDexception. - Imports a repeating event as a series, so an exported calendar round-trips.
- Skips events the calendar already holds on import, and reports how many it skipped.
- Keeps all-day events on the right day in both directions, instead of shifting them by the local UTC offset.
validateno longer reports contact birthdays. Google and Exchange deliver them into ordinary calendars as endless yearly series begun at the year of birth, or at the placeholder 1604, and judging a series by its first occurrence flagged every one of them.deleteandeditname the occurrence they will act on, and take--idand--future.
Reminders
- A due date given without a time creates an all-day reminder, and
--alarmsets a reminder alarm. create-listworks on a Mac whose iCloud account appears twice, one holding calendars and the other reminder lists. It used to fail with "That account does not support reminders".
--to,--cc, and--bccaccept several addresses separated by commas or semicolons. A list previously reached Mail as a single recipient whose address was the whole string.- Search dates are built from date components rather than English
date "..."literals, which failed or pointed at the wrong day under other locales and under 24-hour time. reply --alladdresses everyone on the original message.
Photos
- Exports slow-motion and edited videos, which previously failed with "Unable to access video data".
- Reads metadata from the original photo or video resource, and checks that a private size key exists before reading it, so a future macOS release cannot crash the command there.
- Hidden-asset lookups and the Faces-based
peoplecommand work as documented.
Notes
notes create, and every other command run without--folder, work on a Mac with more than one Notes account. Notes rejects a bare "default folder" there, so those commands failed with error -1728.
Weather
- Reads Open-Meteo times in the location's own time zone. Every hourly, daily, and sunrise time was previously shifted by that location's UTC offset.
- The hourly forecast starts at the current hour, and
alertsreports that the Open-Meteo backend carries no alerts instead of returning an empty list.
Other services
- Tags: tagging a symbolic link tags the link rather than whatever it points at, as Finder does.
- Music:
statusno longer starts Music when it is closed. - Network: a Wi-Fi query without Location permission returns the rest of the information with no SSID, rather than failing.
- Clipboard, Messages, Spotlight, Focus, System, and
schedulecarry further correctness fixes; see the commit list below.
Known limitations
- ICS import does not read
EXDATEor per-occurrence overrides, because EventKit cannot express a deleted occurrence on a series being created. A deleted occurrence returns when a file is imported. - A Windows time zone name, as Outlook writes it, is read as floating time in the Mac's own zone.
Validation
- 839 unit tests pass. CI builds and tests on macOS 26 with Xcode 26.6 and on the Xcode 27 preview runner, and validates the DocC documentation.
- Every fix in this release was also checked against the real Calendar, Reminders, Mail, Notes, Photos, and Music apps on macOS 26.
Changes since the previous release
- WZ-948: Release 1.26.4.0 (#18) (74efa0b)
- WZ-944: Fix bugs found in Phase 1 manual checks (#17) (770de95)
- WZ-930: Fix Phase 1 correctness bugs, third batch (#16) (2341fd4)
- WZ-929: Fix Phase 1 correctness bugs, second batch (#15) (478016f)
- WZ-928: Fix Phase 1 correctness bugs, first batch (#14) (4718807)
- WZ-916: Switch to Swift 6 language mode (6e3fd53)
- WZ-916: Fix Swift 6 warnings in test helpers (9c7a48d)
- WZ-916: Handle notSupported availability in ICS (1ef3ddc)
- WZ-916: Fetch the latest restore image with async (cb4cb13)
- WZ-916: Build Photos results with index maps (c5cbf06)
- WZ-916: Read child pipes without shared vars (de6a100)
- WZ-916: Make shared formatters and keys race-free (c806029)
- WZ-916: Mark public value models Sendable (83dbcd8)
- WZ-912: Document the macOS 26 requirement (121f71f)
- WZ-912: Raise the deployment target to macOS 26 (6c89b89)
- WZ-913: Publish SysmCore API docs on GitHub Pages (#11) (270c63c)
Installation
Homebrew
brew tap brndnsvr/tap
brew install sysmDirect Download
curl -L -o sysm.tar.gz https://github.com/brndnsvr/sysm/releases/download/v1.26.4.0/sysm-1.26.4.0-macos-arm64.tar.gz
tar -xzf sysm.tar.gz
sudo mv sysm /usr/local/bin/SHA256: 193897233f1d1d4822d562bc4f7cf030b0af2879da0131cded8b4297fef03e07