.NET React Templates
Concepts

Build coverage

Dated update cutoffs, Lifetime updates, and why paid licenses never expire.

A license doesn't unlock features by date of use. It unlocks every build released on or before its update cutoff, and keeps unlocking them forever.

The application embeds its product ID, expected issuer, public key and release date (YYYY-MM-DD). The license contains the registered name, organization, seats, edition, and either a dated cutoff (updatesThrough) or Lifetime coverage.

valid = signature valid AND issuer/product match AND paid edition
        AND (lifetime OR buildDate <= updatesThrough)
LicenseApp build datePro
Dated through 2026-09-212026-09-21Enabled
Dated through 2026-09-212026-09-22Renewal required
LifetimeAnyEnabled
Missing, tampered or wrong productAnyDisabled

The comparison is inclusive and uses UTC calendar dates.

Rules for release dates

  • Give each distributed version a fixed release date at build time. Rebuilding the same version keeps its original date.
  • Never derive coverage from the current time or a file timestamp. An already-covered version stays covered years later, and changing the system clock changes nothing.
  • To fix a mistaken release, publish a new version rather than editing the date of a shipped one.

One decision per build

Every Pro feature in a build uses the same result. Free features stay available regardless. There are no per-feature introduction dates: a newer uncovered build does not partially unlock older Pro features. Customers who want Pro in that build renew, or keep using a covered earlier version.

Renewal terms

A 12-month purchase sets the cutoff to 12 months after payment. A renewal extends from the later of the current cutoff and the payment date, so renewing early never loses time. Lifetime upgrades remove the cutoff.