Skip to content

Experience Manager Changelog

Version 2.2 (unreleased)

  • Add: A Content tab on the Site shows its attached Collections with copyable site-origin endpoint URLs, and adds/removes proxy-enabled Collections in place (UC-605)
  • Add: Each Site's 7-day Access Token is published to KV under token:<nanoid> and refreshed daily; the routing manifest's new api block carries the key name, upstream host, /public prefix and attached collections (UC-605)
  • Add: Content served to a Site proxy carries relative, unsigned /public/-shaped URLs and no presigned storage links — byte-stable JSON the Worker and CDN can cache, with nothing upstream leaked to browsers (UC-605)
  • Add: The private image service accepts a Bearer token as an alternative to HMAC-signed URLs, scoped to assets referenced by Collections the principal can view (UC-605)
  • Security: Every private Content API route now authorizes on the Collection in the URL — record detail and asset routes previously skipped object permissions, letting any view_record holder read any collection by nanoid (UC-605)
  • Add: Sites carry a site:<nanoid> service account and attach multiple Collections — attaching grants the account read access, detaching revokes it immediately, and only proxy-enabled Collections may be attached (UC-605)
  • Add: Collections gain a Microsite Content APIs flag (proxy) — marks a Collection as servable through a Site's own domain without making it public on the Experience Manager (UC-605)
  • Fix: Renaming a Site re-homes it — the default hostname row is moved rather than duplicated, and CDN routing, DNS records and the managed Secret follow the new name instead of being stranded under the old one (UC-581)
  • Add: Rotating codes reach the Agent as a Secret — while a Site's production channel uses a rotating code, its secret is published to /sites/<hostname>/TOTP_SECRET and kept in step with every rotation, so a signage display can derive its own QR codes (UC-581)
  • Add: Managed Secrets — a Secret maintained by the Experience Manager from its owning record is badged Managed and cannot be edited or deleted in the Secrets UI (UC-581)
  • Add: Site access control — a Site's preview and production URLs each carry their own profile, protected with a password, a rotating code, or both; preview deployments are guarded by default and the live site is public by default (UC-581)
  • Add: Rotating access codes — the Site's Access tab shows a live QR code and 8-digit code that change every 60 seconds, alongside reveal/copy on the stored secrets, per-secret rotation and a sign-out-all-visitors action (UC-581)

Version 2.1.624 (2026-08-04)

  • Fix: User creation accepts a null or omitted email and no longer needs a password — one of the two is required, and validation errors attach to their field (UC-660)
  • Add: Sign-in codes — the login screen leads with "Email me a sign-in code" and mails a one-time code (valid 10 minutes) to sign in with instead of a password (UC-791)
  • Fix: Agent bootstrap scheduled task runs Interactive under the installing account, not S4U, so the Agent starts in a real logon session with a desktop (UC-777)
  • Add: Full Agent controls on the Node — a header menu adds Restart Applications, Start Autolaunch, Stop Applications and Reboot Node alongside Restart Agent (UC-804)
  • Fix: Global search results open a Node Template — results carry a stable content_type_key that the UI routes on instead of the display label (UC-675)
  • Add: Schedule exception lifecycle — a date exception is read-only once its last date has passed, and a nightly task removes it 7 days later (UC-809)
  • Add: Schedule acknowledgement — a Cluster Controller confirms the hours it holds via POST .../schedule/synced/; a change to them clears schedule_synced (UC-800)
  • Fix: ClusterController, NodeControl and ClusterScheduleException inherit their object permissions from their Cluster; existing records are backfilled (UC-800)
  • Add: Node Event backfill — events are recorded at the timestamp the Agent sends, not at receipt, and carry received_on with a ?received_since= filter (UC-799)
  • Add: Profile and Metrics backfill — the profile and metric endpoints accept a UTC timestamp and write the InfluxDB point at that time, not at receipt (UC-788)
  • Add: NodeEvent capture endpoint — the Agent records critical Node events (status, desktop violations, threshold breaches); repeats collapse onto one record (UC-785)
  • Add: Cluster operating hours — Clusters gain a timezone, schedule_enabled and per-weekday open/close times, plus ClusterScheduleException overrides (UC-787)
  • Add: Schedule consumption — the Node detail shows Today's Hours, and the Cluster Controller config delivers the raw schedule, exceptions and On/Off presets (UC-787)
  • Add: Application Groups — OS-agnostic application metadata consolidated into a shared ApplicationGroup model, with API, admin and full frontend UI (UC-694)
  • Add: Program autolaunch via Node Templates — link a Program with TemplateProgram and dispatch it to nodes on ProgramStart (UC-656)
  • Add: launched_by launcher references — apps resolve a host launcher (Web Wrapper, project_file host), auto-bound and pruned per template (UC-656)
  • Add: Node Program playback controls — transport pallet with a live MQTT playhead bar, playing-asset name, and Mute/Unmute (UC-715)
  • Add: Playlist Program editor and preview player — segmented scrubber, auto-advancing preview, film timecode, and per-type editors (UC-712)
  • Add: Cluster facility map — mark a default Cluster and author map levels/zones in a zoom/pan UI with cluster-derived permissions (UC-703)
  • Add: Application icon and screenshot fields, surfaced in serializers, the form, and the detail header (UC-664)
  • Add: Application version retention policy — configurable retention with storage cleanup and a dry-run management command (UC-672)
  • Add: Delete Folder action in the Media header menu, permission-enforced and blocked while the folder still has assets (UC-699)
  • Add: Backfill ipc/<nanoid> broker topic for existing Nodes (UC-698)
  • Add: Application launch actions — ApplicationLaunchAction models distinct app launch scenarios, persisted on the ApplicationGroup (UC-754)
  • Add: Control Protocol config on Application Groups and Node Template applications — edited per template, encrypted for Nodes, and inherited from their apps (UC-709)
  • Add: Syndicate ApplicationGroups as a first-class resource — launch fields sync over syndication and group artwork is served via a signed license-server proxy (UC-766)
  • Improvement: Split the application version listing into separate Release and Development tabs on the Application Group and Build detail views
  • Improvement: Node Template UI folds actions into a three-dot menu, drops Universal OS, and guards Universal Templates server-side (UC-656)
  • Improvement: Replace the Program tab bar with a three-dot menu; stabilise header height; publishing no longer leaves the form dirty (UC-712)
  • Improvement: Agent scheduled task uses an ISO 8601 logon delay and re-registers on upgrade so triggers refresh (UC-697)
  • Improvement: Add a representation property to the Node model (UC-684)
  • Improvement: Rasterise SVG asset variants to PNG for consistent variant output (UC-716, UC-751)
  • Improvement: Consolidate search on the shared SearchIndex implementation and align media asset search with the shared trigram + FTS index (UC-718)
  • Improvement: CMS collection cache invalidation by URL prefix — centralised, with a per-tenant CDN_HOST in cache_prefix and Cloudflare purge logging (UC-552)
  • Improvement: Reconcile syndicated apps by (group, os) instead of (nanoid, uuid) (UC-742)
  • Improvement: Skip node metrics polling while the tab is hidden and catch transient fetch failures (UC-743)
  • Improvement: Batch and self-requeue audit log retention to drain the backlog (UC-439)
  • Fix: Store media fps as a float to support fractional frame rates (UC-713)
  • Fix: Compute node reboot time only after the wake time is parsed (UC-711)
  • Fix: Skip hash computation for distributed application versions (UC-692)
  • Fix: Stop the compute_hashes error storm when a bundle file is absent from storage (UC-680)
  • Fix: Resolve AttributeError on ApplicationVersion.app and ApplicationBundleFile.file (UC-685)
  • Fix: Resolve BrokerUserAcl.DoesNotExist race condition in sync_broker_acl (UC-690)
  • Fix: Guard null/undefined values in CMS fields, Application, and Node Detail views (UC-691)
  • Fix: Resolve CSP violations for Sentry ingest, WASM eval, and admin inline scripts (UC-682)
  • Fix: Reuse the open draft on Program save instead of versioning every save
  • Fix: Reload the app on a stale chunk after deployment
  • Fix: Serialize concurrent record PATCH requests with select_for_update
  • Fix: MQTT Messenger auto-reconnect with wait-for-connect and a unique per-process client_id to stop reconnect thrashing
  • Fix: Allow null on optional ApplicationGroup reference fields
  • Fix: Allow namespace-based Application create by disabling the auto UniqueTogetherValidator
  • Fix: Reliable kiosk wake-without-lock-screen and robust reboot (UC-612)
  • Fix: Stop the record form crashing on a regex constraint containing / (UC-745)
  • Fix: Mark record fields, model schema, and published_on as blank=True to stop full_clean reconcile false-positives (UC-724)
  • Fix: Guard the preferences key lookup against missing keys (UC-744)
  • Fix: Fix the Text ID blur handler reading the wrong argument (UC-747)
  • Fix: Guard null nested constraint groups and sanitize null field values before loading vueform (UC-748)
  • Fix: Guard reloadRecord against a null record on rapid navigation (UC-749)
  • Fix: Stop record mount when the data model fails to load, and re-check the model in reloadRecord after the fetch (UC-750)
  • Fix: Guard node.data in Node Detail unmount before reading the nanoid (UC-772)
  • Fix: Guard a null MQTT client in subscribe/unsubscribe (UC-773)
  • Fix: Guard RecordVersion.__str__ when the parent Record is deleted (UC-774)
  • Fix: Application Group save no longer rejects an empty Control Protocol (UC-709)
  • Fix: Syndicated app download 500 after a distributable moved to its group (HOTFIX)
  • Fix: Application Details (HOTFIX)
  • Fix: LG + Pixera control protocols (HOTFIX)
  • Fix: Shadow Method for Schema (HOTFIX)
  • Fix: Pin three to ^0.172.0 to repair the broken 3D model preview (HOTFIX)
  • Maintenance: Patch frontend deps for axios, brace-expansion, and js-yaml CVEs (HOTFIX)
  • Maintenance: Bump cryptography, Django, and msgpack for pip-audit security fixes (HOTFIX)
  • Maintenance: Replace dead yarn audit with osv-scanner; bump dompurify (HOTFIX)

Version 2.0.593 (2026-06-15)

Version 2.0 delivers a comprehensive UI refresh across the entire application, introducing new Bricolage and Geist Mono typography, a dark/light theme system, a reorganized sidebar, and an improved dashboard — establishing a consistent visual language for all new and existing surfaces. The CMS received the most significant updates, with a persistent sidebar submenu for collection workspace navigation, a rebuilt Records index with sort, filter, language, and status toolbar, a new field type picker, drawer-based field editing, and archive/delete workflows for records, collections, and data models.

The Digital Asset Manager was similarly rearchitected, replacing the inline folder grid with a fixed submenu tree panel, adding a versioned asset upload tab, thumbnail replacement UI, and a file type and sort toolbar that matches the CMS Records pattern. New dedicated screens were added throughout — Cluster Management, Application Templates, Audit Logs, Team Management, and a full Microsite Hosting interface with active display, rotation, and forms support — bringing previously admin-only or API-only capabilities into the main application UI.

  • Add: Microsoft SSO signin (UC-267)

  • Add: Password set/change UI (UC-327)

  • Add: Full-text search endpoint for the central SearchIndex (UC-407)

  • Add: Node metrics collection and retrieval for Node (UC-544)

  • Add: Team Management UI (UC-560)

  • Add: Microsite Hosting Platform (UC-576)

  • Add: Command Pallet with limited content object search (Hotfix)

  • Add: Cluster Management UI (UC-562)

  • Add: Manual Application upload (UC-344)

  • Add: Application Template UI and Node Template improvements (UC-542)

  • Add: CDN/Cache purge with URL prefix (UC-552)

  • Add: CMS sidebar submenu panel with persistent collection workspace for navigation within Content and Data Models sections (UC-633)

  • Add: CMS record version history listing and preview, with restore from any previous version (UC-90, UC-638)

  • Add: CMS DataModel version history listing and schema restore (UC-88)

  • Add: CMS DataModel schema reconciliation on publish, creating draft record versions that reflect schema changes (UC-87)

  • Add: CMS record field Orderable option to expose API result ordering on that field (UC-61)

  • Add: CMS record field Private option to exclude field values from public and private content API responses (UC-62)

  • Add: CMS Records index sort and filter toolbar with language selector, status filter, and sticky session state (UC-85)

  • Add: Archive and hard-delete CMS records, collections, and data models (UC-83, UC-641)

  • Add: DAM folder navigation refactored to persistent fixed submenu panel with tree expand/collapse and drag-drop support (UC-645)

  • Add: DAM asset list sort by file name and file size; filter by file type (UC-645)

  • Add: Asset version upload tab with file drop zone and version history table (UC-511)

  • Add: Asset thumbnail/posterframe upload and replacement UI (UC-511)

  • Add: Asset original and per-version file downloads in asset detail (UC-512)

  • Add: Content References section on Asset Metadata tab listing published CMS records referencing the asset (UC-639)

  • Add: Audio bitrate and audio codec metadata extraction and display for linear media assets; mutagen-based extraction with embedded ID3/Vorbis/RIFF tag support (UC-523)

  • Add: Programs management feature — DTOs, models, admin, and API (UC-655)

  • Add: Dedicated agent application type with X-XOM-AID header resolution and node update metadata endpoint (UC-235)

  • Add: Node, Cluster, Application, and Node Template indexed into full-text search and accessible via command palette (UC-593)

  • Add: Node Template OS filtering and TemplateApplication CRUD in Node Template UI (UC-346)

  • Add: API rate limiting opt-in via USE_API_RATE_LIMITING environment flag (UC-619)

  • Improvement: Dispatch io.upswell.xmanager.Restart on Node, Template, App Version or Content Change (UC-135)

  • Improvement: Node Template display materialized launch command for debugging (UC-266)

  • Improvement: Ensure user is running Node Powershell scripts as an Administrator and notify (UC-268)

  • Improvement: Replace uuid with mid set to nanoid when sending io.upswell.xmanager.Update (UC-329)

  • Improvement: Remove Edit and CI options for distributed Applications (UC-426)

  • Improvement: Configure retention policy and apply to Audit models to prevent over accumulation (UC-439)

  • Improvement: Automatically assign Broker permissiosn for nominated Cluster Controller (UC-477)

  • Improvement: Prevent incompatible (OS) Node Template to Node (UC-484)

  • Improvement: Disable Node User and clean-up Broker Authorized Permissions on delete Node (UC-489)

  • Improvement: Reorganize sidebar and group features (UC-546)

  • Improvement: Remove Admin panel link from sidebar (UC-559)

  • Improvement: Add new UI Fonts Bricolage and Geist Mono, refresh UI (UC-549)

  • Improvement: Dashboard UI improvements (UC-567, UC-570)

  • Improvement: Improve Login workflow and UI (UC-565)

  • Improvement: Audit Logs UI improvements (UC-556)

  • Improvement: User Metrics improvements (UC-582)

  • Improvement: Hosted Sites additional features — active display, rotation, CORS configuration, manual version upload, and full-text search indexing (UC-589, UC-597, UC-598, UC-599, UC-600, UC-604, UC-606)

  • Improvement: Content and Media object permission refinements (UC-547, UC-548)

  • Improvement: Improve full text search stemming on SearchIndex through trigram similarity (UC-571)

  • Improvement: Sync object permissions to SearchIndex item from parent (UC-572)

  • Improvement: Migrate from PIP to UV (UC-617)

  • Improvement: Begin layering in keyboard shortcuts (Hotfix)

  • Improvement: Gunicorn performance improvements (Hotfix)

  • Fix: Container User Permissions (UC-22)

  • Fix: Remove legacy Vue components (UC-28)

  • Fix: Application Direct Upload error patch (UC-51)

  • Fix: Node Group Permissions (UC-254)

  • Fix: Gate Experimental Features (UC-444)

  • Fix: License server import error in specific non-license server edge cases (UC-459)

  • Fix: Experimental Control Panel Env Var format discrepancies (UC-488)

  • Fix: Render Application Release Notes Markdown as HTML (UC-495)

  • Fix: IsAuthenticated check (UC-561)

  • Fix: Broken TLS Configuration (Hotfix)

  • Fix: Dial Node Graphs (Hotfix)

  • Fix: Team admin permissions leak (Hotfix)

  • Fix: Agent ps1 installer additional fixes (UC-612)

  • Fix: CMS UUID is not JSON serializable (UC-595)

  • Fix: CMS DataModel field txtid immutable after creation to prevent schema key conflicts (UC-86)

  • Fix: CMS DataModel schema validation errors now surfaced in UI on save and publish (UC-79)

  • Fix: CMS DataModel API enforces locked and archived flags; locked/archived models reject edits, schema changes, and publish (UC-642)

  • Fix: Guard against None version in CMS model and record publish endpoints (UC-630)

  • Fix: Null guards for missing version or schema in CMS Records API (UC-624)

  • Fix: CMS pointer field restricted to records of the nominated pointer model (UC-66)

  • Fix: CMS asset field restricted to assets of the nominated media type (UC-67)

  • Fix: CMS record create permission enforced at API level (UC-98)

  • Fix: CMS RecordVersion fields validated against DataModel schema on save (UC-99)

  • Add: CMS DataModel field types: Date, Datetime, Time (UC-57), Color (UC-60), IPv4 (UC-91), IPv6 (UC-92), UUID (UC-93), Phone/E.164 (UC-94), Country/ISO-3166-1-alpha-2 with searchable picker (UC-96), Location/lat-lng (UC-108)

  • Fix: CMS Location field raises "undefined must be a number" when left empty or set to 0 (UC-108)

  • Fix: CMS record form validation rules never applied and never blocked save on invalid input (UC-65)

  • Fix: CMS new records not published when using Save and Publish; autopublish flag was dropped on create (UC-550)

  • Fix: CMS Record form Save and Publish button always styled disabled; align record form field and button styles with Drawer form pattern (UC-554)

  • Fix: CMS pointer list display name lost after reordering list items (UC-586)

  • Fix: CMS record list title showing stale pre-rendered value after saving a draft or publishing; list now always displays the current version title (UC-163)

  • Fix: CMS record form submitting POST to /vueform/process on Asset field interaction; ButtonField missing type="button" caused browser to treat it as a submit button (UC-101)

  • Fix: CMS DataModel field form validation errors shown before user input; reset validators after load settles (UC-84)

  • Fix: Block models now reject standalone record creation at both the model (clean) and serializer (validate_model) layers; Block entity records are structural only and must be embedded in parent records (UC-103)

  • Fix: CMS block field model accumulation bug causing asset/pointer hydration to silently skip all but the last block field; also fixes AttributeError when block model key is absent (UC-596)

  • Fix: agent.ps1 Installer not properly escaping Desktop shell command (UC-611)

  • Fix: Handle MQTT Autorization Exception (UPSWELL-EXPERIENCE-MANAGER-1Q)

  • Fix: Data model notification not serializing model object before dispatch (UPSWELL-EXPERIENCE-MANAGER-2P)

  • Fix: Media asset search reindex triggered after AssetVersion processing completes and on Folder save (UC-115)

  • Fix: Folder name indexed as a searchable term in full-text search (UC-115)

  • Maintenance: Remove Experimental Brightsign Packaging in-favor of Universal Applications (UC-435)

  • Maintenance: Supply chain hardening via uv exclude-newer and first-index dependency resolution strategy

  • Improvement: Self-host Redoc API documentation bundle to eliminate CSP violations (UC-626)

  • Fix: Analytics capture attendance measurement and mixin dispatch bug (UC-334)

  • Fix: N+1 queries in node_online_status resolved with select_related (UC-618)

  • Fix: Catch license server connection and SSL errors as warnings instead of errors (UC-621)

  • Fix: Downgrade license server non-200 response from error to warning (UC-620)

  • Fix: Catch InfluxDB write failures in node_online_status, log as warning (UC-623)

  • Fix: Catch InfluxDB ApiException in analytics series endpoint, return 503 (UC-627)

  • Fix: Http404 returned instead of raised in ControlPanelView (UC-629)

  • Fix: CMS list view asset thumbnails blank when rendered_record is cached (Hotfix)

  • Fix: ClusterForm dirty-on-open by switching update() to load() + clean() (Hotfix)

  • Fix: CommandPalette vnode unmount race on navigation (Hotfix)

  • Fix: Remove locked_out field from AccessAttempt serializer (Hotfix)

  • Fix: Stop new hyphenated CMS field txtid values; grandfather existing (Hotfix)

  • Fix: Optimize Node list endpoint to remove N+1 cascade (Hotfix)

  • Fix: Dropdown filters (Search/Type/OS/Status) on Applications list (Hotfix)

  • Fix: Application edit buttons (Hotfix)

  • Fix: Create writable HOME directory for app user, resolving /home/www EACCES error (Hotfix)

  • Fix: Sentry DSN configuration (Hotfix)

  • Maintenance: Bump Django to 6.0.6 and pip to 26.1.2 to address pip-audit CVEs (Hotfix)

  • Maintenance: Address Bandit and Semgrep security findings (UC-652)

Special Instructions

Fix

sql
UPDATE search_searchterm SET value = value;
UPDATE search_searchindex SET title = title;

Clean-up orphaned Node users:

shell
python manage.py clean_orphaned_node_users

Version 1.6 (2026-04-25)

  • Implement CMS record pre-rendering to improve API performance (UC-557)

Version 1.5.558 (2026-04-11)

  • Add: Support for upstream CDN caching via /public/ API routes with swappable backend (UC-522)
  • Add: CMS Collection cache invalidation (UC-517)
  • Add: Content Security Policy, report mode only (UC-538)
  • Fix: Fix image service permissions with new /public/ endpoint and /service/ lockdown (UC-182)
  • Fix: Broaden License Server JWT Exception Scope (UC-508)
  • Fix: CMS Record Serializer missing request context (UC-527)
  • Fix: CMS uninitialized block NoneType exception when block is is empty (UC-528)
  • Fix: CMS record select version logic mismatch, root cause multiple issues (UC-530, UC-532, UC-534)
  • Fix: Update generate_presigned_post to use AWS s3v4 signature (UC-539)
  • Hotfix: Insecure YAML Deserialization
  • Hotfix: Tighten Control Panel dashboard permissions
  • Hotfix: Add CMS Collection API URL's to CMS Collections UI
  • Hotfix: Enforce ownership permissions on Media Collection management API
  • Hotfix: Add SECURE_HSTS_SECONDS
  • Hotfix: CMS iterator error UPSWELL-EXPERIENCE-MANAGER-2Q
  • Hotfix: CMS query performance improvements

Version 1.5.540 (2026-02-27)

WARNING

Version 1.5 introduces breaking changes with the migration from Celery to Django RQ. Worker commands MUST be updated prior to deployment.

  • Add: Improve Media Asset Variant exception handling (UC-24)
  • Add: Expand ImageService resize modes to fit|fill|pad|stretch (UC-25)
  • Add: SRT/VTT Files to Transcript as separate loadable files (UC-399)
  • Add: Extract Audio Metadata (UC-411)
  • Add: UI for managing (including deleting) Asset Variants within an Asset record (UC-505)
  • Add: API Endpoints for Flow models ContentTypeTrigger, Flow and FlowExecution (UC-506)
  • Add: Media support for 3D (glb) models with model preview (UC-510)
  • Bug: Asset Variant required width and height, could not be constrained by one dimention (UC-479)
  • Refactor: Replace Pillow with PyVIPS to improve image generation performance and memory management (UC-442)
  • Refactor: Replace Celery with Django RQ to lighten overall application memory footprint (UC-500)
  • Refactor: Replace OpenCV with ffmpeg and ffprobe for video handling to improve memory utilization (UC-501)
  • Hotfix: CI filename for uploded Electron build to match script zipped builds
  • Hotfix: Remove legacy S3 utility methods

Version 1.4.533 (2026-02-21)

  • Add: Inline Audio/Video player for Media detail page (UC-20)
  • Add: Django Spectacular with Redoc for API documentation (UC-169)
  • Add: Audio/Video Speech-to-Text transcription through Atlas AI Gateway (UC-396)
  • Add: Individually dimensioned embedding models for SearchIndex content (UC-403)
  • Add: Integration with the Atlas AI Gateway for a unified AI utility API (UC-404)
  • Add: Flow Designer logic for user and system designed model object processing (UC-408)
  • Add: Allow NodeControl's to be disabled (UC-433)
  • Add: Associate Control Panel with Cluster for panel hosting on dashboard (UC-434)
  • Add: Application Bundle hosting for Universal (HTML) applications (UC-434)
  • Add: Automatically add Web Wrapper to application Template with Univeral application (UC-443)
  • Add: Replace bootstrap.ps1 disable Windows features with Debloat (UC-445)
  • Add: Control Gateway Scheduler and Presets to admin (UC-486)
  • Add: CI script support for zip file artifacts (UC-492)
  • Add: CI pre-check script for existing version check (UC-472)
  • Bug: Fix Node Registration failure on duplicate Noad alias, add random string (UC-52)
  • Bug: Improve token aquisition retry logic (UC-197)
  • Bug: Profile raises 401 on occasion (UC-376)
  • Bug: ApplicationVersion upload raises OOM error due to download to memory v. streaming chunk read (UC-440)
  • Bug: Improve ImageEngine file loading to streaming chunks per UC-440 (UC-441)
  • Bug: Fix Agent Powershell Windows Task Scheduler bug (UC-446)
  • Bug: Fix incorrect version sort key in Agent Shell and Powershell script (UC-447)
  • Bug: node_online_status attempt to log metric when Influx is not available/configured (UC-465)
  • Bug: Fix Worker applications_consume_syndicated unregistered task error (UC-468)
  • Bug: Agent fails on OpenGL error on headless device (HOTFIX)
  • Maintenance: Quaterly patch updates Django to 5.2.9 and associated deps to latest (UC-428)
  • Refactor: Migrate shared Atlas data objects to breakout dto package for reuse (HOTFIX)
  • Remove: Remove Content Intellenge Backend, replace with Atlas AI Gateway and flows (UC-410)
  • Hotfix: Add License Token verification endpoint for license server
  • Hotfix: Cloud Connect reconnect on connection failure with backoff
  • Hotfix: Node display layout when x,y positions overlap, handle case
  • Hotfix: Node, improve Cloud Connect offline/disconnect handling

Version 1.3.486 (2025-10-09)

WARNING

This version refactors the AV Control API's introducing siginificant changes affecting Liminal installations. When using version 1.3 or greater, ensure Liminal is updated to 0.8 or greater.

  • Add: ApplicationVersion version_key to properly sort semantic versions (UC-353)
  • Add: UI to Create Cluster Device (type of Node) for Control (UC-354)
  • Add: Control API's for Control Protocols and Node Control endpoints (UC-354)
  • Add: Application option for pre-installed application to support locally installed application launch (UC-367)
  • Add: Add Node Interface (Media, Power) and Protocol (VLC, PJLink, MadMapper, Symetrix, Upswell AV) definitions (UC-392)
  • Refactor: Consolidate node.NodeControl and config.ControlProtocol into new control app (UC-354)
  • Refactor: Update NodeTemplate to use Application, not ApplicationVersion to support installed application launch. (UC-367)
  • Refactor: Improve Node Control Assignment API's (UC-392)
  • Remove: Deprecate Node controled_by and related fields, moving config to control.NodeControl (UC-354)
  • Remove: Disable use of Node Template content model pending review, currently uses CMS Collections (UC-368)
  • Remove: Remove Application Plugins, full deprecated (UC-370)
  • Remove: Legacy AWS Elastic Container Service task files (HOTFIX)
  • Remove: Application Virtual Machine application types (HOTFIX)

Version 1.2.476 (2025-08-15)

  • Add: Improve Application list and detail screens to match newer UI approches (UC-337)
  • Add: Bash and Powershell CI/CD upload scripts to simplify CI based deliveries to the Experience Manager (UC-328)
  • Add: Add CI pipeline templates (in the web console) for Bitbuckets, Github, Gitlab and Jenkins (UC-32*)
  • Add: Edit Screen for Node in web UI (UC-314)
  • Add: Secure Parameter (Environment Variable) API's to allow for web console editing (UC-339)
  • Add: Secure Parameter (Environment Variable) web console UI (UC-339)
  • Add: List/Detail screens for the Node Application Template (UC-340)

Version 1.2.467 (2025-08-03)

  • Fix: Admin error when adding Node due to read-only field misconfiguration (HOTFIX)

Version 1.2.460 (2025-07-15)

  • Bug: Fix for S3 addressing, broken with Django 4.2+ settings DEFAULT_FILE_STORAGE => STORAGES (HOTFIX)

Version 1.2.449 (2025-07-11)

WARNING

Drops support for Postgres 13 (recommend upgrade to 17).

  • Add: Automatic Node DNS registration for Experience Fabric Nodes (UC-300)
  • Add: Automatic Node TLS issuance for Experience Fabric Nodes (UC-300)
  • Add: Enable Remote Desktop Protocol (cRDP) via Node Boostrap Powershell Script (UC-309)
  • Add: Disable News and Interests via Node Boostrap Powershell Script (UC-313)
  • Add: Local TLS Certificate for Development at https://localhost.int.upswell.io (WWW + MQTT) (UC-321)
  • Add: Reboot +5m after wakeup in Powershell scheduler script (UC-323)
  • Add: Support for MQTT legacy topic scheme assignments and permissions via Cluster (UC-324)
  • Deprecated: Postgres 13 support
  • Fix: Agent Powershell Install Script throwing enumeration error (UC-248)
  • Fix: Sync MQTT (Broker) permissions on the Node post_save (HOTFIX)
  • Maintenance: Upgrade to Django 5 with update to all dependencies (UC-18)

Version 1.1.438 (2025-06-25)

  • Add: Master License Server for Licensed application tracking with reporter API's (UC-283)
  • Add: Application UUID and SHA-256 to Application/Version serializer (HOTFIX)
  • Add: CMS Unpublish Action (UC-100)
  • Add: Node GPU load to UI detail (UC-187)
  • Add: Node Experience Fabric API/UI (UC-291)
  • Add: Node License Detail (UC-292)
  • Maintenance: Update frontend from Node 18 to 22.16.0 LTS
  • Maintenance: Pin pyenv to Python 3.11.13
  • Deprecated: Formally deprecate MySQL

Version 1.0.425 (2025-05-18)

Omnibus release, including numerous bugfixes, and improvements along with the development of integrated CMS, Media Management, License Management and Node control.

  • Hotfixes: Analytics/Influx, Sonar
  • Applications: Node manual provision API (no user frontend)
  • Cluster: Deprecate use of Broker model, use MQTT in environment
  • Notifications: A Slack notification backend
  • CMS: Alpha release of dynamic content management system
  • Search: Application Wide Full Text Searching
  • UI: Global UI Improvements

Version 0.6.1 (2023-06-02)

  • Accounts: Added Support for Teams and Team level permissions with declarative user roles
  • Media: Complete refactor of Media, adding support for multiple languages, asset version and variants
  • Media Collections: Added new media collections for grouping/pinning media
  • Media Resize API now provides on-demand asset resizing
  • Preferences: Added new application to manage global application preferences for an instance
  • Add content intelligence: EXIF/IPTC extraction, feature/object detection
  • Deprecate Django Celery Beat in-favor of static scheduler

Version 0.6.0 (2023-06-02)

  • Brightsign: Adding support for Brightsign Application bundles
  • Brightsign: Adding current-sync.json content delivery endpoint for Brightsign from Application Version bundle
  • Add support for Single Signon with Google and Microsoft Azure
  • Add support for temporary Mosquitto access token for web based connections
  • Renable Asset library and CMS
  • Refactor front-end to Vue3 + Tailwind
  • Improved login screen designs

Version 0.5.3 (2023-04-14)

  • Upgrade: Python 3.7 => 3.11, Django 3 => 4, all Python dependencies
  • Support for macOS ARM development

Version 0.5.2

  • Add Secure Parameter (environment variable) Store
  • Add environment variables to the API
  • HOTFIX: API rate limiting

Version 0.5.1

Version 0.5.1 is a minor release that resolves integration issues when using MySQL a database backend.

  • Migrate Mosquito to use mosquitto-go-auth plugin as for authentication and authorization
  • Improve Mosquitto PBKDF2 hashing strength to support SHA-512 (resolves Bandit/Sonar weak hash errors)

Version 0.5.0

Version 0.5.0 is a major release and is not backwards compatible with versions < 0.5.0 without significant database work. It is recommended to install 0.5.0 and migrate existing applications and configurations to the new version.

  • New Node automated provisioning workflow for Nodes to register themselves
  • Significant refactor of Clusters MQTT behavior with updated Broker model
  • Nodes now use users for authentication (instead of Node specific NodeTokens)
  • Added support for Node object permissions, allowing Nodes to only access resources they own
  • Added Public Key encryption of sensitve data fields in API response
  • Added support for the managing Mosquitto access and permissions with mosquitto-auth-plug
  • Change API authorization to use JSON Web Tokens (JWT)
  • Added complete audit trail to Admin
  • Add login attempt monitoring and brute-force protections
  • Merge settings into single settings file with only env variable configuration
  • Add linting support with SonarLint, bandit and flake8
  • Introduce and expand test coverage of key transactions and API endpoints
  • Removed multi-tenant architecture

Atlas Hybrid cloud, on-premesis platform for large scale media program development, delivery and operation.