Static marketing site and public release-surface publisher for openstudio.org.in.
This repo is now the only public publisher for:
/releases/latest.json/releases/stable/latest.json/releases/ai-runtime/latest.json/releases/ai-runtime/stable/latest.json/appcast/windows-stable.xml/appcast/macos-stable.xml/appcast/linux-stable.xml/download/windows/latest/download/macos/latest/download/linux/latest/download/ai-runtime/windows/latest/download/ai-runtime/macos/latest/download/ai-runtime/macos/arm64/latest/download/ai-runtime/macos/x64/latest/download/ai-runtime/linux/latest/download/ai-runtime/linux/x64/latest/download/ai-runtime/linux/arm64/latest
GitHub Releases remain the binary origin. This repo publishes release metadata and appcasts, then exposes stable redirect surfaces that resolve to GitHub-hosted binaries.
npm install
npm run devnpm run stage-release-publish-inputs
npm run validate-release-publish-inputs
npm run build
npm run previewnpm run build stages deploy inputs into public/, validates them again from the staged output, and then runs the Vite build.
The desktop release pipeline is expected to generate these files and publish them as GitHub Release assets. The website workflow or a local operator stages them into release-input/ before the build runs.
Expected staged deploy-input files:
release-input/releases/latest.jsonrelease-input/releases/stable/latest.jsonrelease-input/releases/ai-runtime/latest.jsonrelease-input/releases/ai-runtime/stable/latest.jsonrelease-input/appcast/windows-stable.xmlrelease-input/appcast/macos-stable.xmlrelease-input/appcast/linux-stable.xmlwhenreleases/stable/latest.jsonincludesplatforms.linux
Expected desktop release asset filenames:
OpenStudio-release-latest.jsonOpenStudio-release-stable-latest.jsonOpenStudio-ai-runtime-latest.jsonOpenStudio-ai-runtime-stable-latest.jsonOpenStudio-appcast-windows-stable.xmlOpenStudio-appcast-macos-stable.xmlOpenStudio-appcast-linux-stable.xmlwhen Linux app metadata is published
Common AI runtime binary asset names referenced by metadata:
OpenStudio-AI-Runtime-windows-base-x64.zipOpenStudio-AI-Runtime-windows-directml-x64.zipwhen a downloadable backend archive is published instead of an install planOpenStudio-AI-Runtime-windows-cuda-x64.zipwhen a downloadable backend archive is published instead of an install planOpenStudio-AI-Runtime-macos-arm64.zipOpenStudio-AI-Runtime-macos-x64.zipOpenStudio-AI-Runtime-linux-x64.zipOpenStudio-AI-Runtime-linux-arm64.zip
Published output paths:
/releases/latest.json/releases/stable/latest.json/releases/ai-runtime/latest.json/releases/ai-runtime/stable/latest.json/appcast/windows-stable.xml/appcast/macos-stable.xml/appcast/linux-stable.xmlwhen provided
Validation rules:
- app release root/stable manifests must both exist and match after JSON normalization
- AI runtime root/stable manifests must both exist and match after JSON normalization
- app release JSON must include
schemaVersion,channel,version,publishedAt,releasePageUrl,platforms.windows, andplatforms.macos;platforms.linuxis optional - AI runtime JSON must include
schemaVersion,channel,appVersion,runtimeVersion,publishedAt,platforms.windows, andplatforms.macos;platforms.linuxis optional - AI runtime Windows metadata may be published as a legacy flat
platforms.windowsentry, an old nested backend-asset shape underplatforms.windows.backends, the newplatforms.windows.baseplusplatforms.windows.backends.<backend>.installPlanshape, or a mixed transition manifest that contains both legacy and new fields - AI runtime macOS metadata may be published either as the legacy flat
platforms.macosentry or as the current nestedplatforms.macos.arm64andplatforms.macos.x64entries - AI runtime Linux metadata may be published either as a legacy flat
platforms.linuxentry or as nestedplatforms.linux.x64andplatforms.linux.arm64entries - downloadable manifest asset entries must include
url,sha256,size, andfileName - Windows backend install-plan entries must expose an
installPlanobject and are published verbatim - Windows and macOS stable appcasts must be present, valid XML, and align with the stable app manifest enclosure data; the Linux appcast is required when Linux app metadata is published
Current AI runtime manifest shape:
{
"schemaVersion": 4,
"channel": "stable",
"appVersion": "0.0.22",
"runtimeVersion": "2026.04.05",
"publishedAt": "2026-04-05T00:00:00.000Z",
"platforms": {
"windows": {
"base": {
"url": "https://github.com/sdevil7th/OpenStudio/releases/download/v0.0.22/OpenStudio-AI-Runtime-windows-base-x64.zip",
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"size": 123,
"fileName": "OpenStudio-AI-Runtime-windows-base-x64.zip"
},
"backends": {
"cuda": {
"installPlan": {
"version": 1,
"steps": [
{
"action": "detect",
"backend": "cuda"
},
{
"action": "install",
"package": "openstudio-cuda-runtime"
}
]
}
},
"directml": {
"installPlan": {
"version": 1,
"steps": [
{
"action": "detect",
"backend": "directml"
},
{
"action": "install",
"package": "openstudio-directml-runtime"
}
]
}
}
}
},
"macos": {
"arm64": {
"url": "https://github.com/sdevil7th/OpenStudio/releases/download/v0.0.22/OpenStudio-AI-Runtime-macos-arm64.zip",
"sha256": "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef",
"size": 123,
"fileName": "OpenStudio-AI-Runtime-macos-arm64.zip"
},
"x64": {
"url": "https://github.com/sdevil7th/OpenStudio/releases/download/v0.0.22/OpenStudio-AI-Runtime-macos-x64.zip",
"sha256": "fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210",
"size": 123,
"fileName": "OpenStudio-AI-Runtime-macos-x64.zip"
}
},
"linux": {
"x64": {
"url": "https://github.com/sdevil7th/OpenStudio/releases/download/v0.0.22/OpenStudio-AI-Runtime-linux-x64.zip",
"sha256": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"size": 123,
"fileName": "OpenStudio-AI-Runtime-linux-x64.zip"
},
"arm64": {
"url": "https://github.com/sdevil7th/OpenStudio/releases/download/v0.0.22/OpenStudio-AI-Runtime-linux-arm64.zip",
"sha256": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
"size": 123,
"fileName": "OpenStudio-AI-Runtime-linux-arm64.zip"
}
}
}
}Build/runtime env:
GITHUB_TOKEN- Optional at runtime, recommended to reduce GitHub API rate-limit risk for the snapshot and installer redirect functions.
OPENSTUDIO_RELEASE_METADATA_DIR- Optional. Defaults to
release-input.
- Optional. Defaults to
OPENSTUDIO_REQUIRE_RELEASE_METADATA- Optional in local dev.
- Set to
truefor release-publish builds so missing or malformed metadata/appcasts fail the build.
OPENSTUDIO_DESKTOP_REPO- Optional. Defaults to
sdevil7th/OpenStudio. - Used by runtime GitHub helpers and by the publish workflow contract.
- Optional. Defaults to
Website workflow secrets:
NETLIFY_AUTH_TOKENNETLIFY_SITE_IDOPENSTUDIO_RELEASE_SOURCE_TOKEN- Optional but recommended if desktop release assets are private or if you want a dedicated token for release asset downloads.
Desktop-side secret outside this repo:
- a token with permission to send
repository_dispatchevents to this website repo
/download/windows/latest,/download/macos/latest, and/download/linux/latestresolve from/releases/stable/latest.jsonfirst, then fall back to GitHub latest-release asset matching if metadata is not available./download/ai-runtime/windows/latestresolves toplatforms.windows.base.urlwhen the new Windows manifest shape is present, otherwise it falls back to the legacy flatplatforms.windows.urlentry when available.- Windows backend install-plan metadata is preserved verbatim in the published JSON at
/releases/ai-runtime/latest.jsonand/releases/ai-runtime/stable/latest.json. /download/ai-runtime/windows/latestdoes not treatplatforms.windows.backends.cudaorplatforms.windows.backends.directmlas downloadable URLs when those entries only containinstallPlan./download/ai-runtime/macos/arm64/latestand/download/ai-runtime/macos/x64/latestresolve from the published AI runtime manifest and should be preferred when the caller knows the target architecture./download/ai-runtime/macos/latestremains a best-effort convenience redirect. It still supports the legacy flat macOS manifest entry, and for the new nested shape it will honor?arch=arm64or?arch=x64when present, otherwise it only redirects when it can infer the architecture safely./download/ai-runtime/linux/x64/latestand/download/ai-runtime/linux/arm64/latestresolve from the published AI runtime manifest and should be preferred when the caller knows the target architecture./download/ai-runtime/linux/latestsupports the legacy flat Linux manifest entry and otherwise falls back tox64, thenarm64, when no architecture is provided.- Netlify never hosts the
.exe,.dmg,.AppImage, or AI runtime archive files.
This repo includes a release-publish workflow triggered by repository_dispatch.
Assumed event name:
openstudio_release_published
Assumed payload shape:
{
"tag": "v1.2.3",
"channel": "stable",
"desktopRepo": "sdevil7th/OpenStudio"
}Workflow behavior:
- validate the dispatch payload and reject non-
stablechannels - validate
desktopRepomatches the configuredOPENSTUDIO_DESKTOP_REPO - download the generated metadata/appcast assets from the desktop GitHub Release for
tag, including the Linux appcast when present - map them into
release-input/ - run
npm ci - run
npm run validate-release-publish-inputs -- --root release-input - run
npm run buildwithOPENSTUDIO_REQUIRE_RELEASE_METADATA=true - deploy
dist/to Netlify
- Netlify config lives in netlify.toml.
- Release metadata and appcasts are published as static files from the site build output.
- The latest download paths are real Netlify redirects/functions, not React routes.
- All metadata and appcast surfaces are served with:
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
After deploy, verify:
curl https://openstudio.org.in/releases/latest.json
curl https://openstudio.org.in/releases/stable/latest.json
curl https://openstudio.org.in/releases/ai-runtime/latest.json
curl https://openstudio.org.in/releases/ai-runtime/stable/latest.json
curl https://openstudio.org.in/appcast/windows-stable.xml
curl https://openstudio.org.in/appcast/macos-stable.xml
curl https://openstudio.org.in/appcast/linux-stable.xml
curl -I https://openstudio.org.in/download/windows/latest
curl -I https://openstudio.org.in/download/macos/latest
curl -I https://openstudio.org.in/download/linux/latest
curl -I https://openstudio.org.in/download/ai-runtime/windows/latest
curl -I https://openstudio.org.in/download/ai-runtime/macos/latest
curl -I https://openstudio.org.in/download/ai-runtime/macos/arm64/latest
curl -I https://openstudio.org.in/download/ai-runtime/macos/x64/latest
curl -I https://openstudio.org.in/download/ai-runtime/linux/latest
curl -I https://openstudio.org.in/download/ai-runtime/linux/x64/latest
curl -I https://openstudio.org.in/download/ai-runtime/linux/arm64/latestCheck that:
- metadata/appcast files are live
- metadata/appcast files are uncached
- app download redirects resolve through the published app release metadata to GitHub Release asset URLs
- AI runtime redirects resolve through the published AI runtime metadata to GitHub Release asset URLs
- Branding assets live in
public/assets/openstudio/branding/ - Screenshot assets live in
public/assets/openstudio/screenshots/ - Share image contract lives at
public/assets/openstudio/branding/og-image.png?v=2