Get started
Updates and compatibility
How Malini updates itself, and how the built-in Check compatibility job keeps your jobs and routines working when Malini's events change.
Open as markdownUpdates
Malini checks GitHub Releases for a new version on launch, every hour, and when your Mac wakes. Updates download in the background and install when you quit. Restart to Update in the app menu installs the newest release right away, and Check for Updates… checks now.
Malini must run from an Applications folder to update itself; started anywhere else, it offers to move itself there.
Every merged feat, fix, or perf change ships as a release, so updates are small and frequent.
Compatibility
Routines can trigger on Malini's events, and jobs can rely on them. An update can add, remove, or reshape an event.
After an update, Malini compares its events with the ones the version before it had.
When something changed, it emits app:updated with the old and new version and the change: the channels added, the channels removed, and each channel whose payload changed, with its payload type before and after.
Then Malini runs the built-in Check compatibility job with that change as context. The job:
- reads the current events with
events_list, and your jobs and routines withjobs_listandroutines_list, - finds every routine whose trigger names a changed or removed channel, or filters on a field that moved, and every job whose instructions rely on one,
- fixes each one with
jobs_saveorroutines_save, keeping the rest exactly as you wrote it, - shows you each edit and waits for your approval before it saves,
- never deletes a job or a routine, and leaves alone one that no new event can replace,
- ends with a summary of what it changed and what still needs you.
Check compatibility runs in your newest workstream. Like every built-in job, you can edit its instructions, and Reset brings back the original.
app:updated is an event like any other, so a routine can also run on app:updated.
Events reference
The events reference lists every channel and its payload for the version of Malini these docs describe.