Release management
Release channels, the latest.yml manifest, DMG packaging, and the make targets that build a signed Kumo.app for distribution.
Kumo publishes macOS app updates through GitHub Releases. Release artifacts include a signed app DMG and a small manifest consumed by the runtime update system.
Runtime discovery, five-minute asynchronous polling, local update notifications, checksum verification, and installer-helper behavior are documented in App Updates.
Release Channels
- Stable updates read
https://github.com/ProjectKumo/KumoApp/releases/latest/download/latest.yml. - Beta updates read
https://github.com/ProjectKumo/KumoApp/releases/download/pre-release/latest.yml. - Settings may override the manifest URL for development or private feeds. Leave it blank for the default GitHub Releases feed.
Manifest Format
latest.yml is uploaded as a release asset beside the DMG.
version: 0.0.1
channel: stable
downloadURL: https://github.com/ProjectKumo/KumoApp/releases/download/0.0.1/Kumo-macos-0.0.1-arm64.dmg
assetName: Kumo-macos-0.0.1-arm64.dmg
sha256: <64-character-sha256>
releaseNotes: |
See https://github.com/ProjectKumo/KumoApp/releases/tag/0.0.1The app also accepts the same fields as JSON for local testing and backwards compatibility. See App Updates for the runtime manifest contract and automatic-install requirements.
Building Artifacts
Use the release helper to build the Release .app, create the DMG, and emit latest.yml:
make release-dmg VERSION=0.0.1 CHANNEL=stableVERSION is passed through to Xcode as MARKETING_VERSION, so the built
Kumo.app/Contents/Info.plist and latest.yml use the same app version.
Override BUILD_NUMBER to set CFBundleVersion; it defaults to 1.
The artifact script validates the built app version before creating the DMG.
Release builds must also include the bundled Sub-Store payload in
KumoCoreKit resources: Node sidecar, sub-store.bundle.js, and
manifest.json. The Sub-Store frontend is no longer bundled; Kumo's SwiftUI
UI talks to the backend directly. Kumo does not download Sub-Store at
runtime; app updates are the update channel for the bundled Sub-Store
resources. The Node sidecar is not tracked in Git; make app-release runs
Scripts/prepare_substore_runtime.sh before invoking Xcode so the generated
runtime is present in the resource bundle without committing the large binary.
The DMG is laid out as a Finder install window. Assets/dmg-background.png
provides the 660×420 paper background with handwritten labels and a
pencil-drawn small-loop arrow from Kumo.app toward the /Applications alias.
Outputs are written to build/release/:
Kumo-macos-0.0.1-arm64.dmglatest.yml
Upload both files to the GitHub Release. For beta, set CHANNEL=beta; the manifest points at the pre-release tag.
Runtime Update Flow
For runtime behavior, see App Updates. That document owns the app-side polling, notification throttling, download cache, and installer-helper details.
Automatic replacement requires the current app's parent directory to be writable. If Kumo is in a protected location, the update flow reports a clear error and the user can install manually from the download page.
Persistence and logging
Where Kumo keeps state on disk — Application Support layout, state files, preferences, backups, the update cache, and every log channel.
App updates
How Kumo polls for new releases, throttles notifications, verifies downloads, and hands replacement work off to an external installer helper.