Commercial SupportGuaranteed response times on Shiny bug fixes, straight from the maintainers. Plans from US$1,500 a year.Guaranteed response times on Shiny bug fixes, straight from the maintainers. Plans from US$1,500 a year.See the plans
AI Conversations, Speech, & Audio ReleaseHave a full conversation with AI, use speech commands, and interact with audio content seamlessly.Have a full conversation with AI, use speech commands, and interact with audio content seamlessly.
RequiredWhen =r=> r.WhatsNew?.Contains("[required]") ==true// default: every update optional
};
GitHub releases are not signed. The provider checks the asset’s SHA-256 when GitHub reports one (digest,
on assets uploaded since mid-2025). Beyond that, trust rests on HTTPS to GitHub and on who can publish to
the repository. Drafts are never offered. Only the newest 100 releases are read, and GitHub Enterprise
Server URLs work too. Unauthenticated API calls are limited to 60 an hour per IP address.
Anything else — a manifest file, an endpoint of your own — is two methods:
publicinterfaceIUpdateProvider
{
// Null when there is nothing newer. currentAppVersion is null when no build is bundled or installed.
publicclassUpdateInfo// derive to carry a download URL
{
publicrequiredWebAppVersionVersion { get; set; }
publicboolIsOptional { get; set; } // false installs before the app shows
publicstring? WhatsNew { get; set; }
publicDateTimeOffset? ReleaseDate { get; set; }
publiclong? FileSize { get; set; } // checked when set
publicstring? Sha256 { get; set; } // checked when set
}
Whatever the provider, the host keeps the same rules. It gives up on the check after CheckTimeout, and
refuses a release that isn’t newer than the one it runs. It checks the size and hash when they’re given,
and opens the archive, entry document included, before installing it. An exception from the provider
counts as being offline. An InvalidDataException rejects the release instead. The host owns the provider
and disposes it.
Hashes and sizes are computed and cached. Implement IWebAppReleaseStore to serve releases from blob
storage or a database instead. Set downloadUrl in the sidecar to serve the zip from a CDN; the
signature still covers it.
Create a key pair once, with WebAppReleaseSignature.CreateKeyPair() or openssl:
optional. It downloads in the background and applies next launch, or when the page calls POST /_bridge/host/apply-update.
Release needs a newer native app
skipped. Set minimumHostVersion when a web build depends on bridge endpoints older apps don’t have.
Offline or server down
the newer of the bundled and installed builds is served.
With another provider, the provider decides which release is newest and whether it’s required (IsOptional).
Nothing installed still means required, and offline still means the newer of the bundled and installed builds.