owlette docs
dashboardadmin

installer management

Upload, manage, and distribute agent installer versions.

Location: admin panel -> installers (/admin/installers)

The dashboard uses the same canonical /api/installer/* public management API as the CLI and SDKs. All actions require a superadmin session.


uploading a new version

  1. Click upload new version.
  2. Select or drag in a .exe installer. The dialog accepts only .exe files and auto-detects X.Y.Z from filenames such as Owlette-Installer-v2.11.0.exe.
  3. Confirm the X.Y.Z version number, add optional release notes, leave Set as latest version (recommended) checked unless this is a staged upload, then click upload installer.

The dashboard uses a three-step upload flow:

  1. request URL: POST /api/installer/upload with version, fileName, contentType, optional releaseNotes, and setAsLatest (defaults to true). The route requires an Idempotency-Key, validates the version and .exe filename, creates an installer_uploads/{uploadId} record, and returns a signed uploadUrl, uploadId, storagePath, and expiresAt. The signed URL expires after 15 minutes.
  2. upload binary: the browser PUTs the installer binary directly to the signed Storage URL and shows upload progress.
  3. finalize: PUT /api/installer/upload with the uploadId and dashboard-computed checksum_sha256. The route requires an Idempotency-Key, verifies the pending upload record has not expired, confirms the object exists, recomputes SHA-256 from the stored binary, rejects mismatches with checksum_mismatch, writes version metadata, and updates latest if requested.

version table

Each active version shows:

columndescription
versionVersion number
file sizeInstaller file size
uploadedUpload date
uploaded byUser who uploaded it
release notesChange description, or no notes
actionsset as latest, download, copy link, or delete

Soft-deleted versions are hidden from the dashboard list.

Each finalized version stores this metadata under installer_metadata/data/versions/{version}:

fieldsource
versionConfirmed X.Y.Z version from the upload dialog
download_urlLong-lived signed read URL generated during finalize
checksum_sha256Server-computed checksum for the stored binary
release_notesOptional notes from the upload dialog
file_sizeStorage object size in bytes
uploaded_at / release_dateFinalize timestamp
uploaded_byUser or API key actor that finalized the upload
deletedAtnull for active versions; set when soft-deleted

actions

set as latest

Uploads set the latest pointer by default. Clearing Set as latest version (recommended) keeps the version available in the table without changing the public latest installer.

Promote any uploaded, active non-latest version later with set as latest, which calls POST /api/installer/{version}/set-latest and rewrites installer_metadata/latest. Use this for rollback if a newer installer has issues.

download

Downloads use the signed download_url returned by the installer API.

delete

Delete soft-deletes the version through DELETE /api/installer/{version}. It does not remove the Storage object during the interactive action.

You cannot delete:

  • the current latest version (latest_version_protected)
  • a version when doing so would leave fewer than two active versions (min_versions_violated)

cleanup

The clean up action identifies superseded patch versions:

  • not the newest patch in its major.minor series
  • older than the retention window
  • not the current latest version

Each candidate is soft-deleted via the public API.


public download button

All users see a dashboard download button that points to the current latest installer. The unauthenticated permalink remains GET /download; admin management metadata comes from GET /api/installer/latest.


storage

Installers are stored under:

agent-installers/versions/{version}/Owlette-Installer-v{version}.exe

Metadata is stored in Firestore under:

installer_metadata/latest
installer_metadata/data/versions/
installer_uploads/{uploadId}

on this page