Skip to content
Article SepoEngine System Update Specification
☀️ Light Clean and bright
📜 Sepia Warm and vintage
🌤️ Light Gray Subtle and neutral
🔵 Light Blue Calm and serene
🌙 Dark Easy on the eyes
🌑 Dark Gray Deep and modern
🔷 Dark Blue Professional and sleek
🌿 Forest Calm and natural

SepoEngine System Update Specification

Technical reference for building update packages (.zip) compatible with SystemUpdater and SystemUpdateController.


1. Package structure (ZIP file)

When creating the ZIP, update-manifest.json must sit at the root. Do not wrap the package in a parent folder before zipping.

Correct ZIP content:

/update-manifest.json
/contents/
   /Core/
      Router.php
   /UI/
      styles.css

2. Manifest schema (update-manifest.json)

The manifest is a JSON object that controls the surgical file swap.

{
  "version": "1.2.3",
  "description": "Short summary",
  "files": {
    "contents/Router.php": "SepoEngine/Core/Router.php",
    "contents/styles.css": "public/assets/css/styles.css"
  },
  "delete": [
    "SepoEngine/Core/OldUnusedFile.php"
  ]
}

Key reference:

  • version — the target system version.
  • description — short summary; visible in update history.
  • files — map of "ZIP Path" to "Server Path".
  • delete — array of server paths to remove.

3. Path rules and constraints

  • All server paths are relative to the project root (e.g. /xampp/htdocs/sepodesk/).
  • Do not use absolute paths (C:\...) or leading slashes (/).
  • Files listed in files will overwrite existing files automatically.
  • The delete array is only for files that should no longer exist.
  • Ensure the ZipArchive extension is enabled in php.ini.

4. Constants (UpdatePackageSpec)

  • MANIFEST_FILENAMEupdate-manifest.json The required filename for the instruction manual inside the ZIP.
  • TEMP_STORAGESepoEngine/Storage/Temp/latest_update.zip The standard directory for storing temporary uploaded packages.
  • HISTORY_TABLEtsp_sys_updates The database table where update history is recorded.
class UpdatePackageSpec
{
    public const MANIFEST_FILENAME = 'update-manifest.json';
    public const TEMP_STORAGE      = 'SepoEngine/Storage/Temp/latest_update.zip';
    public const HISTORY_TABLE     = 'tsp_sys_updates';
}