These static files are served from https://api.modernmidi.io.
/app-version: plain text major.minor.patch, for example 1.1.1./firmware-version: plain text major.minor, for example 1.11.Keep these paths and plain-text formats. Existing desktop releases use
const [major, minor] = text.split('.').map(Number), so appending a patch
component preserves the values older clients read. Do not add a v prefix,
JSON, labels, or release notes to either version file.
Older desktop clients still cannot detect patch-only updates: they continue to compare only major and minor. Updated clients read all three app components and accept old two-component app responses as patch zero. Firmware stays at two components.
/release-notes.json contains both release histories:
{
"app": [
{ "version": "1.1.1", "notes": ["Description of a shipped app change."] }
],
"firmware": [
{ "version": "1.11", "notes": ["Description of a shipped firmware change."] }
]
}
Each history is an array of releases with a version string and an array of
nonempty plain-text notes. An empty history is allowed. Use three components for
new app entries and two for firmware; historical app entries such as 1.1 are
also accepted. Keep entries newest first. The desktop also sorts them numerically
and renders notes as text, without HTML or Markdown interpretation.
The initial JSON preserves the notes previously bundled in the desktop app. It does not invent notes for firmware releases whose notes were not in that app.
package.json version./release-notes.json over HTTPS. Ensure the
JSON is served as application/json and all three responses retain the CORS
access used by the desktop (Access-Control-Allow-Origin: *). Allow for CDN
propagation before announcing the release.Publish the new JSON file before distributing a desktop build that depends on it. If it is missing or unavailable, the new desktop shows a retry message for notes; its version checks continue independently. No new version endpoint or server-side application is needed.