Home / Docs / extension compatibility
Developer Guide

Extension Compatibility & Updater

Package delivery specifications, SHA-256 pre-verification, and atomic rollback.

Extension Compatibility & Updater

Encrypt CMS implements the Central License Server (CLS) authenticated package delivery specification for commercial add-ons and updates.


1. Extension Update Delivery Flow

When the administrator checks for updates under Admin > System > Updates:

  1. Discovery: ExtensionUpdateService queries active extensions in /plugins and /themes, inspecting declared versions in plugin.json and theme.json.
  2. Entitlement Handshake: The CMS dispatches an authenticated POST request to:
    POST /api/v1/packages/{slug}/download
    Authorization: Bearer <InstallationToken>
    X-CMS-Domain: yourdomain.com
  3. Single-Use Signed Token: If entitled, the server returns a temporary signed download URL and authoritative 64-character hexadecimal SHA-256 hash.
  4. Pre-Extraction Checksum Validation: The CMS downloads the package into an isolated temporary file in storage/framework/ and calculates its SHA-256 checksum. If the hash does not match, extraction immediately aborts and cleans up temporary files.
  5. Atomic Backup & Extraction: Before overwriting any files, BackupService creates a complete backup archive of the active version. If extraction or manifest verification fails, the previous version is restored automatically.

2. Decoupled Core vs. Extension Updaters

  • Core Updates (CoreUpdateService):
    • Managed exclusively by CoreUpdateService.
    • Zero commercial license checks required.
    • Download hosts are restricted strictly to the Central License Infrastructure and authorized package delivery distribution servers.
  • Extension Updates (ExtensionUpdateService):
    • Handles commercial and community themes and plugins.
    • Core slugs (encrypt-cms, encrypt-cms-core) are strictly blocked from extension updater routes to prevent privilege escalation.

3. Verified Extension Contract

Extensions compatible with the Encrypt CMS updater must adhere to the following:

  • Semantic Versioning (SemVer 2.0.0, e.g. 1.0.5).
  • Strictly relative file paths within the ZIP archive.
  • Manifest entry_point pointing to an executable PHP file (index.php).
  • Archive size strictly under 50 MB compressed, expanding to no more than 200 MB and 5,000 files.