Mosaic products documentation: Concepts, API Reference, Technical articles, How-to, Downloads and tools

Release Notes

The list below shows the latest releases and the respective features/improvements to Axinom Mosaic.

R98 (June 6, 2024)

New in this release


Media Template Bootstrapping

With this release we’re introducing a new, improved way to bootstrap custom solutions based on our media template. This process is powered by the Mosaic CLI and will guide users through the setup process, allowing to customize the experience to their needs. We’re planning to add further improvements to this process in the future, so stay tuned for more updates.

Mosaic Create CLI command

If you’re new and want to setup a new custom solution, please follow the instructions documented in the getting started section on the media template introduction docs.

If you want to learn more about the command and it’s options check out the mosaic-cli documentation.

Postgres 16.2

We now support Postgres v16.2 as the database version for Media Template. Please follow the below steps to migrate your existing local environment to the new version (your data will be preserved):

  1. Make sure your media-template repository is up to date with the latest changes. Especially the changes from this PR

  2. Run yarn run env-cmd --silent -f .env ts-node scripts/create-data-dump.ts from Media Template root.

  3. Run yarn infra:down

  4. Delete the Docker volume related to Postgres (docker volume rm infra_postgres_data)

  5. Run yarn infra:up --build

  6. Run yarn db:reset

  7. Run yarn run env-cmd --silent -f .env ts-node scripts/import-pg-dump.ts from Media Template root.


  • @axinom/mosaic-cli: Fixing some commands that were not crrectly returing a non-zero exit code in case there was an error. This will make it easier to use the CLI in automated scripts.

  • @axinom/mosaic-message-bus: We have made adjustments to the @axinom/mosaic-message-bus library to create the delay queues of Quorum type instead of Classic type. This will ensure the messages in those queues will have higher reliability and fault tolerance.

    However it’s not possible to simply change the type of a RabbitMQ queue from Classic to Quorum. Therefore, we’ve changed the name of the delay queues from delay:10sec, delay:30sec to delay:10s, delay:30s. After upgrading to the latest message-bus library, the services will start using the newly named queues, and the older queues will remain unused/unconsumed.

    The services will not need any changes, however the remaining unused queues (delay:10sec, delay:30sec) can be deleted via the RabbitMQ Management UI.

Managed Services

  • Image Service: Images can now be deleted. To delete an image, the user or token that is used must have Images: Edit AND Images: Delete permission, or just Admin permission for the Image Service.

    • Deletion can be done via UI (from Image Details station or Images Explorer station) or directly via the GraphQL API (deleteImage and startImagesDeletion mutations),

    • You can also send a DeleteImage command. If the image was found and and successfully deleted a DeleteImageFinished event will be sent that you can subscribe to. If the image deletion failed a DeleteImageFailed event will be sent. If an attempt to delete an image is made, but this image does not exist - not found - the operation will still succeed, but no events will be sent.

  • Image Service: Fixed an issue that prevented the Altair client to work correctly.

  • Localization Service: Fixed an issue with the validation of language tags in Localization settings.

  • Localization Service: Fixed a racing condition where localization values created immediately after the source entity registration were sometimes not saved correctly.

Customizable Services

  • Media Service: We improved the ingest process to be more resilient on large ingests, able to handle more entities at once, improved the progress reporting, and have improved error handling. (#291, #293, and #295)

  • Media Service: Messages the service uses to send to itself (e.g. during ingest) are now directly stored in the inbox table and won’t do a detour over the RMQ anymore (#292)

  • Media Service: We updated the version of the Altair package (#303)

  • Media Service: We updated the version of the pg-transactional-outbox package (#307)

R96 (May 6, 2024)

Breaking Changes

Removed APIs

We now have removed the deprecated events from the ID Service:

  • UserDeleted

  • UserRoleDeleted

  • ServiceAccountDeleted

Please refer to Planned Deprecations page to see the new events you may use instead.

New in this release


  • @axinom/mosaic-cli: A new CLI command mosaic service purge-permissions is introduced, which can be used to purge permissions from ID Service for a given Mosaic Service. More info can be found in the @axinom/mosaic-cli documentation.

  • @axinom/mosaic-ui: We introduced a new Tabs component. This component can be used to structure the fields on detail pages. To find more about the control and some general things to keep in mind when designing workflows using this component, check out the Storybook.

Managed Services

  • Video Service: The video-select-field micro-frontend extension now has a new optional property predefinedFilterValues that can be used to specify additional filters that should be applied to the list of videos that users can pick from.

  • Video Service: The preview station now contains an optional video player allowing to preview videos directly in the management system. This feature can be configured in the video service settings on the admin portal.

  • Hosting Service: Hosting Service now supports assigning custom DNS labels to services hosted by it that makes it possible to have more predictable URLs for the deployed services. You can find the new field in the details station of your customizable service. Please note that the custom DNS labels are globally unique, and therefore will be assigned on a first-used basis.

    Custom DNS Label
  • Portal Service: Added an option to replace the welcome message on the home screen as well as the logo on the top right of the management system shell with a custom component. To find out how, check out the documentation

Customizable Services

  • Media Service: We updated the piral package to version 1.5.2, which matches the version the Mosaic Portal is using. This update should not have any impact on the existing services, but it is recommended to update the piral package in your services to the latest version to avoid any potential issues. (#287 & #288)

  • Media Service: We added a new environment variable IS_LOCALIZATION_ENABLED to the media workflow package. This variable will affect whether the localization sub stations on the entity details will be shown or not. (#284)

  • Media Service: We removed the unnecessary permission check for the events the service receives as answer for the LocalizeEntity command which complicated the process when trying to setup the service from the scratch. (#277)

  • Media Service: Message handlers in the media service are using a database clients with the owner permissions to be able to change also those values that cannot be changed via the login database role. The field names in the handler suggested incorrectly, that the database login pool is used in message handler. We changed the argument names to "ownerClient" to avoid confusion. (#278)

R94 (April 10, 2024)

New in this release


With this release we’re launching our new Localization Service! 🎉

Localization Tile

This service enables you to manage the different localizations of the metadata of your entities and ultimately shipping them to your users. To learn more about the service check out its documentation here.

We integrated support for it into the Media and Catalog Service (more details below), but the service is not limited to these services. If you want to use it in your custom service, please check out the this article that explains how to extend your entities with localizations.

Localization Details


  • @axinom/mosaic-ui: Fixed an issue with the Dynamic Data List, where changes to the position of an item using the text input were not applied correctly.

  • @axinom/mosaic-ui: Explorers in selection mode now reset their selection when the filters are changed.

Managed Services

  • Hosting Service: When storage credentials are regenerated through the Admin Portal, the Hosting Service now emits an event ObjectStorageCredentialsRegenerated. Interested services can listen to this event and update any stored management tokens etc. using Hosting Service GraphQL API to keep the storage credentials up-to date.

  • Hosting Service: Now the services deployed via the Hosting Service will receive a performance boost during executing DB Queries that uses ILIKE statement (such as when using filter queries for text fields) since they are able to use existing GIN INDEXes for improving query performance when Row Level Security is enabled. This is achieved by automatically marking the pg_catalog.texticlike function as LEAKPROOF.

  • Hosting Service: The Mosaic Hosting Service no longer grants the policymaker role to RMQ Users it generates and instead will grant the management role. If you require specific policies to be configured for your RMQ vhosts, please get in touch with our support team, so we can help you out.

Customizable Services

  • Media & Catalog Service: We added localization support for all publishable entities (Movie, TV Show, Season, Episode, Collection, Movie Genre, TV Show Genre).

    We changed the Catalog Service by moving localizable properties into a separate related table, e.g. title, description, and synopsis are no longer part of the movie table, but are moved to movie_localizations related table. The GraphQL API remains unchanged, as dedicated views are implemented to expose localizable properties on the level of parent entity.

    Localization is an optional feature in the Media Service and can be enabled/disabled using the LOCALIZATION_IS_ENABLED environment variable. When disabled, entity definitions and changes from the Media Service will not be synced with the Localization Service, and only base values will be published instead of base values and localizations.

    In order for localizations to be enabled, the Localization Service must be enabled on the environment and the LOCALIZATION_IS_ENABLED environment variable needs to be set to true.

    After these changes are applied to an existing media-template repository and there is an intention to enable localizations, the following migration steps must be done:

    • The existing media-service service account must be adjusted to include "Source Entities: Edit!, "Entity Definitions: Edit", "Localized Entities: Edit", and "Localized Entities: Review" permissions of the Localization Service. For a local development, this can be done by running yarn setup` script to (re)create the service account.

    • Once the Localization Service is enabled in both Admin Portal and Media Service (via the LOCALIZATION_IS_ENABLED env var) and successfully launched, the previously existing entities can be migrated to become localizable using a dedicated migration script located at services\media\service\src\_manual-repair-scripts\register-localization-sources.ts

    The majority of the changes were added via PR #160. The support for ingesting localized values was added with PR #211

  • Media Service: We added a refetch configuration to the mutations on the detail stations to make sure the form data also updates correctly when the save is performed by an action that does not navigate the user away from the page. (#269)

  • Media Service: We adjusted the titles of some Explorer stations to be more consistent (#267)

  • Media, Catalog, Entitlement, Vod-to-Live Service: The services were updated to use the latest service-common library, specifically now we use the updated setupMonitoring method of this library that will ensure if there will be any errors of a single metric during its collection, the other successfully collected metrics will be available in the registry. Instead an error log will be generated to be investigated separately. (#263)

R93 (March 25, 2024)

New in this release


With this release we’re introducing a new pattern on how the media, catalog and entitlement service handle messages. The services are now using a Transactional Inbox/Outbox pattern. The classical way of processing messages is in general still supported, but we encourage the use of the new pattern to get a more reliable and consistent message processing. We have a more detailed explanation of the pattern in the Messaging documentation, but here are the sections that describe the general idea:

Transactional Outbox
In Mosaic, the transactional outbox pattern is utilized for reliable message sending from one service to itself or other external systems. When a service needs to publish an event or command, it first writes the message details to its outbox table within the same database transaction as the business logic. This ensures the message’s atomicity and durability together with the associated business data. The message publisher of that service polls then this outbox table and sends the messages via the actual RabbitMQ messaging broker.

Transactional Inbox
On the receiving end, services in Mosaic employ the transactional inbox pattern to process incoming messages reliably and efficiently. Messages are retrieved from the RabbitMQ queue and stored exactly once in the inbox database table. The associated business logic is then executed within the same database transaction that marks the inbox message as processed. This guarantees that the message is processed exactly once, even in the event of failures or system restarts.

The very changes to the three services on the media template can be seen on PR #219.


  • @axinom/mosaic-ui: The UI library will now be smarter about the <style/> elements it injects into the DOM. A UI library instance will only add the styles if they were not already added by another instance. Different versions of the library will still define styles that differ individually. This change makes the DOM more lightweiht and improves the developer experience when trying to tweak styles on the fly using the browser’s developer tools.

  • @axinom/mosaic-portal: When pressing the save button in the management system, the application will not create another entry in the browser history. This will make it easier to navigate back to the previous page after saving a form.

  • @axinom/mosaic-service-common: The service-common library now includes an express handler to add the Axinom Mosaic favicon.ico to express applications. This can be done via app.use(mosaicFavicon);

  • @axinom/mosaic-service-common: The assertError helper function is deprecated in favor of a new ensureError helper function.

    Before After
    import { assertError} from '@axinom/mosaic-service-common';
    try {
       // code that has a potential to throw errors
    } catch(error) {
       // your error handling
    import { ensureError } from '@axinom/mosaic-service-common';
    try {
       // code that has a potential to throw errors
    } catch(e) {
       const error = ensureError(error);
       // your error handling

    The main reason for this change is, that the code in the 'Before' example would throw from within the catch block, in case the caught error was not an instance of an Error class. And this is likely not the behavior the developer intended. With ensureError, if something that is not an instance of an Error is thrown - it is wrapped into the new MosaicError object and returned instead. The developer can then decide to handle the error or throw it further.

Managed Services

  • Video Service: The Video Service message handlers for bulk archiving and bulk unarchiving videos send out an ArchiveVideosFailedEvent and UnarchiveVideosFailedEvent message in case the (un)archiving fails. The import custom videos message handler will now send an ImportCustomVideoFinishedEvent message when the import is successfully done and an ImportCustomVideoFailedEvent in case the import fails.

  • Image Service: When the ArchiveImagesCommand or the UnarchiveImagesCommand Image Service fails to handle the archive/unarchive message they send out the corresponding ArchiveImagesFailedEvent and UnarchiveImagesFailedEvent messages.

Customizable Services

  • Entitlement Service: Maxmind has introduced a daily download limit for their GEO IP databases. If your entitlement service is deployed in a scalable way or deployed/restarted often that limit can be exceeded. To avoid this limit Maxmind suggests downloading their database with your license key to some shared repository or setting up a proxy cache from where your services download the database.

    You can set the URL of such a proxy in the environment variable GEOLITE2_DOWNLOAD_URL for your Entitlement Service. #261

  • Entitlement Service: We bumped the geoip-country package version to fixed a bug that caused entitlement-service to crash shortly after start-up. This was caused due to a change in the MaxMind API and the library which accesses the API to fetch the geoip-country list not being updated to handle the changed API. #256

R92 (March 13, 2024)

New in this release


  • This release implements a few improvements around the way how data is saved in the management system workflows. You can find a more detailed description of concept for saving in the Saving article.

  • The management system browser tab title now dynamically adapts to the page that is currently open. This makes it easier to distinguish between different tabs when you have multiple tabs open in the same browser window.
    Out of the box it will use the title that is being set on the PageHeader component of the station. Stations can also set a custom page title by using the setTitle method on the PiralAPI object. To make it not conflict with a potential PageHeader, the automatic setting of the page title by the PageHeader can be disabled by setting setTabTitle to false.
    To enable that feature for your custom workflows you need to update the UI library to the latest version.

  • We improved the user experience when configuring profiles on video and image service that are using storages coming from the hosting service. If you have hosting service storages already enabled, you can directly pick the container from the containers available on your storage. If you have not enabled the hosting service storages yet, the UI will guide you through the process of enabling them. To find out more, check out the hosting service documentation.


  • @axinom/mosaic-ui: The FormStation components will now add an asterisk to the page title, if the form has unsaved changes, making it easier to understand whether a from is dirty or not. This will also be reflected in the browser tab title.

  • @axinom/mosaic-ui: Added a toast notification when a form was saved successfully. This will help users to better understand when a saving operation was happening, e.g. when navigating away from a dirty form.

  • @axinom/mosaic-ui: Added a new FormGrid component. This can be used to replicate the styles applied to the children of the FormStation.

  • @axinom/mosaic-graphql-common: We’ve added a new Express middleware forwardToGraphiQl, which will redirect browsers requesting the / as well as /graphql route of a service to the /graphiql endpoint. This will make it easier to access the GraphiQL interface of a service. We added this middleware to all our managed services as well as the services in the media template (see #250).

Managed Services

  • Management System Service: We tweaked the look and feel of the save indicator to make it more clear what the state of the from and saving process is.

  • Management System Service: We changed the favicon of the Management system to the Mosaic logo.

  • Image Service: Previously, if you would request an image of a specific width and height from the /transform` API, and these values exceeded the size of an original image the returned image would have been up-scaled. This is no longer happening. If at least one of the requested dimensions is greater than the same dimension of the original image, the returned image will be transformed to match the aspect ratio of the requested dimensions, but will not exceed the original image. If upscaling was previously expected to happen by the image service, it should not be handled by other means. E.g. browsers built-in upscaling mechanisms.

  • Image Service: Adding the image transformation base url to the image details station making it easier obtainable for users of the management system.

  • Image Service: If an image with a name that is longer then 100 characters is uploaded or imported using the EnsureImageExits message, the image service will now truncate the image title to 100 characters instead of failing the import.

  • Image Service: Fixed an issue with the preview of the image transformation in the focal point stations for images that have the default focal point set.

  • Hosting Service: The Mosaic Hosting Service now grants the policymaker role to all RMQ Users it generates. This shall offer greater control over defining message policies such as setting Message TTL, Max length, etc. via the RMQ Management Portal for the user.

Customizable Services

  • Media Template: We discovered that some services are missing their required deps in the package.json. Since we are in a monorepo, these deps were supplied by other services, and therefore everything appears to work well. But when we try to build a service in isolation, the missing deps would produce build errors. We added the missing dependencies to all services in PR #246.

R91 (February 28, 2024)

New in this release


We’ve now introduced a strongly typed eventKey property in GraphQL Subscriptions that generates payloads for event changes in our Managed Services. If you happen to consume such subscriptions in your custom services, you may now use the eventKey field over the event field to have better type safety and to avoid any potential issues in the future.

▶ Details

An example difference in payload formats before and after:

Old New
type VideoSubscriptionPayload {
  id: UUID!
  video: Video
  event: String
type VideoSubscriptionPayload {
  id: UUID!
  video: Video
  event: String @deprecated(reason: "Use 'eventKey' instead.")
  eventKey: VideoSubscriptionEventKey

enum VideoSubscriptionEventKey {


  • @axinom/mosaic-id-guard: When a custom-service is configured to use a specific tenant/environment but receives a JWT that was issued to a different tenant/environment, the displayed error message will contain better instructions to troubleshoot the issue.

  • @axinom/mosaic-ui: Live suggestion styles are adjusted to have better padding.

  • @axinom/mosaic-ui: Added new icon for In Progress.

Managed Services

  • Identity Service: A bug was fixed when the UserRoleAssignmentChanged event was fired for a User Role that was removed from a User, the correct User Role information was not included in the event payload. Now the payload includes the correct User Role name and ID.

  • Hosting Service: A bug was fixed when a Custom Service was redeployed with a changed DNS label (via the DNS-port-mappings in the deployment-manifest YAML), the new label was not pointing to the service port.

  • Video Service: The Cue Points station was updated by removing the "Row Number" column from the Cue Points to avoid any confusion regarding the ordering. The Cue Points are always ordered by the Timestamp.

Customizable Services

  • Media Messages: The media-messages library was updated and the corresponding services (Media, Catalog & Entitlement) were aligned to now use the updated GraphQL Subscription payload format where the eventKey strongly typed property is favoured over the now deprecated event property. See more details in this PR (#235).

  • Media Service: Improved the look & feel of the workflows which contained the "Archive" & "Delete" actions to be more consistent with the remaining actions by removing the icon and only having the label.

R90 (February 12, 2024)

Breaking Changes


The format of GraphQL errors returned by Mosaic services has changed to conform with GraphQL standards. Deprecated properties are timestamp, code, and details. For backward compatibility, the old properties are still returned, but they will be removed in the future. For more details, see the Planned Deprecations page.

▶ Details

How to access these properties with new format:

Deprecated New







Old New
  "errors": [
      "message": "Access Token is not provided",
      "path": [
      "timestamp": "2023-08-23T04:38:06.435Z",
      "code": "ACCESS_TOKEN_REQUIRED",
      "details": {
        "someDetailsProperty": "property value"
  "data": null
  "errors": [
      "message": "Access Token is not provided",
      "path": [
      "extensions": {
        "someDetailsProperty": "property value",
		    "timestamp": "2023-08-23T04:38:06.435Z",
        "exception": {
		      "code": "ACCESS_TOKEN_REQUIRED"
  "data": null

Removed APIs

  • With this release we removed backwards compatibility on our Video Service for the deprecated APIs that still used the Encoding Service name.

  • We also dropped support for the following properties on Video service: drmKeyIds, qualityLevels, durationInSeconds on Videos. bandwidthInBps and initialFile on VideoStreams.

  • We removed the NodeId based fields from the graphql schemas of all managed services.

Please refer to the Planned Deprecations page for more information.

New in this release


  • @axinom/mosaic-cli: A new CLI command mosaic service sync-permissions is introduced, which can be used to synchronize permissions with ID Service for a given Mosaic Service by giving a permissions.json file. More info can be found in the Documentation of the CLI package.

  • @axinom/mosaic-id-guard: Now the AxGuard plugin generates a permission-definition.json file that serializes the permission-definition of the service. This can be helpful when you need to perform out-of-band permission synchronization to the Mosaic ID Service before the service is started.

    See this PR (#223) & Library Documentation for the change required on the custom-service. The generated file can be used by the new mosaic service sync-permissions command of the Mosaic CLI (see above) to seed the permissions into the ID service.

  • @axinom/mosaic-portal: Changed the link to the /about page on the side panel footer to now show the portal version anymore to avoid confusions. The footer still links to the /about page. The full list of versions of all components running on the management system can be found there.

  • @axinom/mosaic-ui: Changed the ImageLoader component, to not do requests to ./undefined if the imgSrc is not defined.

  • @axinom/mosaic-service-common: Removed deprecated error handling classes in favour of MosaicError.

Managed Services

  • Identity Service: Now when a customizable-service synchronizes the permissions to the Identity Service, the system-defined Administrator role of the corresponding environment will be immediately updated with the changed permissions. Previously this happened only when a Management Super Admin would sign-in to the management system. This new change will keep the Administrator role up to date in a more timely manner.

  • Hosting Service: The Pilet Artifacts Explorer now shows most recently updated pilets first.

  • Image Service: New property image_type added to the Image Upload Webhook request payload.

  • Channel Service: Fixed an issue where the publish validations for channels and playlists would include the publish hash even if there were errors. The publish hash is now correctly null when any validation reported an error.

  • Monetization Grants Service: Fixed an issue where the publish validations for claim sets would include the publish hash even if there were errors. The publish hash is now correctly null when any validation reported an error.

  • Subscription Monetization Service: Fixed an issue where the publish validations for subscription plans would include the publish hash even if there were errors. The publish hash is now correctly null when any validation reported an error.

Customizable Services

  • Media, Catalog and Entitlement Service: Added pg lock timeout config on Postgres PoolConfig level. This setting helps to resolve deadlock situations when two competing transactions wait for each other to release their locks. This can happen when a client runs multiple mutations within a single GraphQL request or with other database related work. (#207)


We’re now publishing the TypeDocs for our libraries at This will allow you to see the TypeScript type definitions of our libraries in a more user-friendly way.

R85 (December 6, 2023)


Messages that are sent and received in Mosaic-based solutions contain now the additional aggregate_id and aggregate_type fields. Those fields are used to describe on the message level what entity is associated with that message. The aggregate ID field contains the unique identifier (e.g. database ID) of the entity and the aggregate type field contains the name of the entity (suggested to use kebab-case). For bulk operations, the aggregate_id field contains the value MULTIPLE_IDS, and if there is no unique identifier (yet) the value UNDEFINED_ID is used.

DEPRECATION NOTE: Messages that you send to the Managed Services must include an aggregate_id and the aggregate_type in addition to e.g. the message_type. If you update the @axinom/mosaic-message-bus library, the aggregate types are already defined in the MultiTenantMessagingSettings objects. Backward compatibility is available but please check the Planned Deprecations page when the deprecation date is reached.


Please upgrade the @axinom/mosaic-messages in your projects to the latest version as it includes the new aggregate type and the action (event or command) settings. Those are required to send commands and help when receiving events.


The @axinom/mosaic-cli library was adjusted to create the messaging settings with the additional aggregate type. The async-api specification files need to be adjusted to include a tag in the form aggregate-type:<your-type> for all messages like this:

      - name: aggregate-type:environment

Mosaic Identity Service

Three messaging events in the ID Service were renamed to be in line with the naming convention of managed services. The event UserDeleted was renamed to UserDeleteFinished, UserRoleDeleted was renamed to UserRoleDeleteFinished, and the ServiceAccountDeleted was renamed to ServiceAccountDeleteFinished. In addition, the three events UserDeleteFailed, UserRoleDeleteFailed, and ServiceAccountDeleteFailed were introduced for cases where the delete operation failed.

DEPRECATION NOTE: please upgrade to the latest version of the @axinom/mosaic-messages library and adjust your code to listen to those messages. After you switch to the new messages it is recommended that you delete any RMQ Queues created under the older event names via the RMQ Management UI for good housekeeping.

Mosaic Frontend Samples

The Frontend Samples now support importing & exporting your profiles (in JSON format). This will enable better shareability of profiles between your team members.

Mosaic Media Template

The MessagingSettings were regenerated based on the latest @axinom/mosaic-message-bus update. The messaging broker publication code was adjusted to include the aggregate ID and aggregate type.

There is now a new filter on the ingest details station that allows you to filter the list by status (e.g. Success or In Progress), in case there are multiple statuses present:

R85 ingest filter

R83 (November 2, 2023)

Managed Services

  • AxAuth Service: A new field Enforce Strict Password Policy is added to the End-User Store Details station in the Admin Portal. This setting will be enabled by default for all End-User stores. You may change it as necessary. Details of the applied policy can be found in the station details. When enabled, the password policy will be enforced for the following scenarios.

    • End-user sign-up is initiated by providing a password.

    • End-user sign-up is completed by providing a password.

    • End-user password is reset.

  • We added a way to copy the current user token from the /About page. This makes obtaining the token for e.g. performing manual request through graphiql more accessible.


  • List and DynamicDataList columns now have the option to not specify a propertyName. If a column does not specify a propertyName it must specify a render value. This renderer can then use the full data object, passed as second argument, to render the column content. This makes it easier to have completely calculated columns that will not display the data of a single property. These 'unbound' columns will not be sortable.

R82 (October 19, 2023)

Managed Services

  • Video Service: Reworked the video detail stations to show more detailed information about the different streams of a video.

Customizable Services

  • Media Service: Fixed an issue where the deployment manifest of the Media Service didn’t declare the CUE_POINT_TYPES_DECLARE permission on the video service. (#159)

  • Media Service: Fixed an issue with the alignment of the statistics on the Genres details stations (#162)


  • Added the unpublish-pilet command to the Mosaic-CLI. This will allow you to delete a pilet that is no longer required to be published in the Micro-Frontend Pilet Feed. Note that the service account used to perform the operation must have the Pilets: Delete permission.


  • A new method setupServiceHealthEndpoint is introduced to the @axinom/mosaic-service-common library. It exposes a /health route on the service API URL, that can be used to check for a HTTP 200 OK response to determine if a service is available for use. Optionally, the response body may also contain an arbitrary JSON document specified by the service that describes the health of individual components of the service. See this PR for more details on its usage.

  • A new method isServiceAvailable is introduced to the @axinom/mosaic-service-common library. This method will query the route configured via the setupServiceHealthEndpoint method to check if the target service is available for use. If the response contains a HTTP 200 response code, it will return true, else will return false. The method will retry the availability check for a default 15 attempts with an exponential back-off strategy before returning false. See this PR for more details on its usage.

R81 (October 9, 2023)


  • We’re going to remove support for fields using NodeId from the GraphQL APIs of all managed services in the future. If you’re using such fields, please refer to Planned Deprecations for more information and let us know if you have any questions or concerns.

Managed Services

  • Encoding Service got renamed to Video Service, to making it more clear, that the service can now also manage videos that were not encoded by the Axinom Encoding Service (more details on this here).

    The change is done in a backward compatible way, so the service currently still supports permissions or messages that are using the old name. However we plan to remove the support of the old name in the future. To find out more details about the deprecation please have a look at our Planned Deprecations page.

  • Image Service: Added a 'Image Upload' webhook. This webhook is called when an image is uploaded. The webhook can be used to validate the image and reject it if it does not meet the requirements.

  • AxAuth: Fixed a bug in the AxAuth Service that requested Management System users to Sign In more frequently than they needed to. The fix is now applied to the refresh cookie issuing logic, and the Sign In session will be valid until the refresh cookie actually expires.

  • Video Service: Existing cue points can now be edited directly inside the list on the cue point management station.

Customizable Services

  • The Mosaic Encoding Service was renamed to Mosaic Video Service. This means you should upgrade the mosaic libraries to the latest version which provides you with all the adjustments. The adjustment also affected the RabbitMQ queues that were used for video encodings. Those obsolete queues need to be removed now. Please stop your Media Service instance, deploy the latest version, run yarn migrate:rmq-video, and then start the Media Service normally.

  • Media Service: Added a link that allows navigating to the detail pages of an entity to all selection explorers (See #125)

  • Media Service: Fixed an issue when reordering genres and items inside collections (#142 and #143)

  • Media Service: Changed the transaction isolation level used for publishing ot RepeatableRead to avoid deadlocks when publishing multiple entities at the same time. (#132)

  • Media Service: Removed the externalTypes module in favour of the new @axinom/mosaic-managed-workflow-integration package. (#124)


  • Introducing the @axinom/mosaic-managed-workflow-integration library. This library contains type definitions of things shared by managed workflows, making it easier to integrate and maintain the shared elements in your custom code. More details can be found in the @axinom/mosaic-managed-workflow-integration documentation


  • Added column resizing to the DynamicDataList component.

  • Extended the DynamicDataList component to support inline editing. To enable this behavior, set the allowEditing property to true. By default, the List will use the dataEntryRenderer for the editing experience of a cell. To control the editing experience for a column more granular, developers can use the new, optional dataEditRender property on the column definition.

  • Fixed an issue where the positionPropertyName property on the DynamicDataList component was not used in some cases.

  • Fixed an issue where content of List components could get hidden when resizing columns.


  • Added a new method checkSigningKeyExists to the @axinom/mosaic-id-guard library. This will be helpful in situations you need to check if a given JWT signature can be verified by the RSA keys currently in use for the Mosaic Environment that issued the JWT.


  • We’ve improved the performance of initializing DB transactions when using the transactionWithContext method of the @axinom/mosaic-db-common library. For an average pgSettings object with 3 properties (i.e. role, username, permissions). The time taken earlier would’ve been ~150ms and now it’s down to ~50ms.

    To receive this performance boost, you simply need to update @axinom/mosaic-db-common to version 0.26.0 or later.

R79 (September 12, 2023)

Managed Services

  • Hosting Service: We now support hosting of customized Mosaic services via the Hosting Service. You can read more about it here.

    To get started quickly, we’ve provided instructions on how-to deploy the customized Mosaic Media Template through the Hosting Service. You can follow the steps here.

  • Video Service: We updated the Video Processing Profile to include more processing options such as Video Format, Optimize For: Speed/Quality, Normalize Audio, etc. You can read more on the configuration options here.


  • An additional property customIcon is now added to the Button and CompositeButton components for custom icon support.

  • The styles for the BooleanViewField component has been updated to be more consistent with the other form fields.

  • Integrated react-beautiful-dnd to handle reordering of the DynamicDataList.


  • A new library @axinom/mosaic-graphql-common is introduced. This library contains all common utility functions related to GraphQL and Postgraphile plugins. These functions and plugins were previously inside @axinom/mosaic-service-common.

    • Classes and methods:

      • PostgraphileOptionsBuilder

      • enhanceGraphqlErrors (previously graphqlErrorsHandler in @axinom/mosaic-service-common)

      • getWebsocketFromRequest

    • Postgraphile Plugins:

      • AddErrorCodesEnumPluginFactory

      • AnnotateTypesWithPermissionsPlugin

      • DeprecateStrayNodeIdFieldsPlugin

      • GenericBulkPluginFactory

      • GraphiqlManagementModePluginHook

      • OmitFromQueryRootPlugin

      • OperationsEnumGeneratorPluginFactory

      • SubscriptionsPluginFactory

      • ValidationDirectivesPlugin

    Refer this PR for more details on the actual changes.


  • Deprecated app.registerRouteResolver in favor of app.setRouteResolver for enhanced TypeScript type safety. This change formalizes the contract between workflow registration and resolver consumption by merging the custom resolver registration type RegistrationFunction with @axinom/mosaic-portal

  • Updated app.resolveRoute to require merging @axinom/mosaic-portal type declarations with the custom ResolverFunction for each route resolver. These shared types can now be utilized with the setRouteResolver method, ensuring consistent type safety across the workflows.

R77 (August 11, 2023)

Managed Services

  • Image Service: Focal points on Image Service workflows now allow more precision.

  • Channel Service: Items within a program on the channel service can now be re-ordered using drag & drop.

  • Channel Service: It is now possible to add multiple items to a program on the channel service at once.

Customizable Services

  • Entitlement service: Support for channels is now added to the entitlement service.

Admin Portal

  • The "saving indicator" feature is also added to the admin portal.


  • We’ve added column resizing to all Lists, including Explorer components. To resize, simply drag the column separator. Double click it, to return everything to their default width.
    This feature is enabled for all Lists, after updating to this version of the UI-library. Developers can disable that behavior per-column by setting disableResizing to true on the column definition. Resizing support for DynamicDataList components will be added in future updates.

    R77 column resizing in effect
  • For CustomFilter, a new prop called selectedValueRenderer was added which can be used to override the default rendered value.

  • Fixed an issue with the FileUploadControl that prevented the upload when the same file was selected again on the same component instance.

  • The onChange event was removed from Form Fields components which are not managed by Formik directly.

  • Fixed an issue with some home tiles not rendering correctly. *- SelectionExplorer components will now render an inline menu with a link to the details of the item, if a generateItemLink property is provided.

Mosaic Frontend Samples

  • Added channel support to relevant FE sample scenarios.

  • The Mosaic Frontend Samples now includes a utility script that allows you to start a localhost proxy for routing the traffic to the hosted Mosaic User Service. This will allow you to run the Mosaic Frontend Samples (or a similar custom frontend application) on your localhost, and connect it successfully with the hosted Mosaic User Service and get the full Authentication functionality working without any issues for setting cookies in different domains top-level domains. See the PR for more details.

R75 (July 24, 2023)

Management System

  • Introducing Indicators:
    Enabling developers to add custom indicators to the Management System, to give users information independent of the stations they are currently on.

    R74 indicators

    We also added a well-known "saving indicator" to the Management System. This will be used by FormStation components to indicate when the form is having unsaved changes or it is currently saving.
    You can find more information about the new feature in the @axinom/mosaic-portal documentation.

  • Reduced size of the tiles on the landing page.

Admin Portal

  • New color scheme for the Admin Portal. Making it easier distinguishable from the Management System:

R74 admin portal

Managed Services

  • AxAuth: Fixed a bug that throws a webhook invocation error sometimes during End-User sign-up and password reset.

Customizable Services

  • Vod-to-Live service: Added a this service as experimental implementation for a Vod-to-Live service using Unified Virtual Channels to the media template. This service demonstrates how the output of the Channel Service can be used to create a 24/7 linear channel from a playlist of VOD entities.
    Check out it’s README for more details on this service, or the VOD-to-Live Service documentation for more details about the concept.

This service is experimental and has to be built and started manually. It will not get started automatically with the dev:services scripts on the root package.json.
  • Media Service: Improved TV Show, Seasons, Episode workflows:

    • Added parent entity information in the info panels for the Season and Episode details stations, allowing to navigate to the parent entity directly from the info panel.

    • Added parent entity columns and filters for the Season and Episode explorer stations.

      Check out this PR for more details.

  • Media Service: Added video cue point support to Media and Catalog services. See this PR for more information.

  • Entitlement Service: Added support for entitlement requests for channels. See this PR as well as this PR for more details.


  • Introducing errorMappers: Error mappers are functions that can be used to transform an error before it is shown to the user. Out of the box the ApolloErrorMapper is enabled, which makes network errors returned from ApolloClient more user-friendly. Workflows can use the setErrorMappers method to change the mappers that should be used in a particular workflow.

  • Bulk operations on Explorer components are triggering a notification whenever they get started to give the user the feedback that the operation was successfully started. This may not be needed for all bulk operations, so we added a new, optional property showStartedNotification that can be set on the bulk action definition to allow to disable this behavior e.g. for non-asynchronous operations.

  • Section components inside the InfoPanel can now be collapsed by the user. Developers can make a Section render collapsed by default by setting the expandedByDefault property to false.

  • Adding a new Filter component: MultiOptionFilter, allowing users to select multiple options in one Filter: Storybook

  • FormStation now shows an error when a navigation attempt or an action execution got canceled because of an invalid form. This allows users to better understand why the intended action was not performed, especially in long forms where the inline validation messages may appear only off-screen.

  • deprecated Navigation option removed from PageHeaderActionType

  • deprecated enum ActionType removed from Actions component


R73 (June 15, 2023)


  • The ID Service now displays more details for the Identity Provider related error messages that may occur during user authentication. Displaying these hints will help administrators to troubleshoot scenarios such as expired IDP secrets or invalid IDP secrets.

  • The AxAuth Service will now display the "Email Verified" column in the Environment Administration portal. This should now make it more clear to the administrators what the current state of the user is. It will also be possible to manually trip the value of this field via the Admin Portal if needed.



  • With this release we applied the changes to the Navigation and Context that were introduced to the Detail pages and Inline Menus in R72 also to the PageHeaderActions.
    With these changes, page header actions can now be rendered as either an anchor tag or an element with a JavaScript click handler, depending on the properties specified.
    The corresponding changes on the media template were implemented in this PR.

  • This release also introduces support for anchor tag rendering in the following components: Button, TextButton, and CompositeButton.
    Key Changes:

    • The buttonContext property with the value ButtonContext.Navigation has been deprecated and is no longer used.

    • The default buttonContext has been changed from Navigation to Active. As a result, buttons of these components will now have a dark blue background color by default instead of light blue.

    • For buttons of the Navigation type in these components, use the path property instead of the onButtonClicked and onBlur action handlers, as well as the type property. This will render a link instead of a button.

    • Examples:

        /** to render a button element */
        <Button icon={IconName.X} type="button" onButtonClicked={()=>{}}/>
        /** to render an anchor element */
        <Button icon={IconName.X} path="/home" />
  • The List component now also accepts a function as value for the showActionButton, allowing to decide row-by-row whether or not to show render an action button.

R72 (June 6, 2023)


  • User Service now has a new Webhook that will be called when a new User is created. This will help you to track/maintain a list of users in an external system.
    You will see the new Webhook in the Environment Administration Portal when you visit the User Service configuration station.

  • Mosaic Frontend Samples received a new update, and this time we introduced scenarios targeting use-cases around the Personalization Service.
    You can find the the changes made via these PRs - #86, #88, #100.

  • We added actions to allow editors to directly launch the "New" workflow of the corresponding entity type from all Selection Explorers. This will allow editors to quickly trigger the create workflow without the need to manually navigate to the corresponding workflow first.
    The corresponding change the media template can be found in this PR.


* With this update, we made some changes to the interfaces and behavior for Navigation and Context type actions on Detail pages as well as Inline Menus:
Previously, the actionType property was used to determine the type of action. This property has been removed. The action will determine its type from the properties it gets.
If a path is provided, the action will be rendered as a Navigation type action. If onActionSelected is provided, the action will be rendered as a Context type action.
Navigation actions will now render as anchor tags and can not trigger any side effects beside navigation.+ Context actions will continue to render with a click handler that allows any code to be executed and also allow for confirmation options using confirmationMode and confirmationConfig. ** The color of the action will be dependent on the type of action, giving the editor a clearer understanding of what an action will do.

+ Please note that all actions will be displayed and behave as Context type actions if no changes are made. To migrate a Navigation type action, simply provide a path and remove the onActionSelected property. For a Context type action, you only need to remove the actionType property. Here is an example:


// Before migration
const action: ActionData[] = [
    label: 'Navigation Action',
    onActionSelected: () => history.push('/station-name')
    label: 'Context Action',
    onActionSelected: () => {}
    actionType: ActionType.Context

// After migration
const action: ActionData [] = [
    label: 'Navigation Action',
    path: 'station-name',
    label: 'Context Action',
    onActionSelected: () => {}

The corresponding changes on the media template were implemented in this PR. * Introduced a new component MaskedSingleLineText which can be used for use cases which require masking in the input field. An additional component MaskedSingleLineTextField is introduced to be used within Forms. To play around with the new component please visit the Mosaic Storybook.

  • The published version of the ui library now ships with source maps. This will allow you to debug your application more easily.

R71 (May 23, 2023)


  • With this release we upgraded the media-template to the latest LTS version of Node.js (version 18) and upgraded several other dependencies to newer versions, including the piral packages. (see this PR for more details)

  • We rolled back our usage of the importmaps feature, as we were experiencing some issues with the way it is handling peerDependencies. We will re-introduce it in the future when the issues are resolved. For now we recommend to not make use of this feature in your own Pilets.

Managed Services

  • deleted${EntityName}NodeId fields are deprecated from Delete${EntityName}Payload graphql schema types for most Managed Mosaic services. They were always returning null before and not used. These fields will be completely dropped in the future.

  • Video Service: Added a mute button for the video player on the cue point management station. Also improving the error messages in case the playback fails because of invalid DRM configurations.

  • Channel Service: Improved error messaging when adding invalid program entities to a playlist.


  • @axinom/mosaic-ui:

    • Added a new optional property horizontalColumnAlign?: 'left' | 'center' | 'right' to the Column definitions used in List and Explorer components now allows for defining varying alignment options for each column.

    • The result argument of createUpdateGQLFragmentGenerator does now also support querying of nested fields.

    • We upgraded our Storybook to the latest version of Storybook. The stories now include more control options, making stories even more interactive. They now also display the TypeScript type annotations of the component props giving more information about the components directly inside Storybook.

    • Better disabled styles and focus indicators for different form elements.

    • Fixed an issue where station message bodies were displayed below the station content.

  • @axinom/mosaic-portal:

    • Extended the PiletApi with a new method: getDataHelper. It helps to retrieve data from Portal data store set by other pilets/workflows using setData. Unlike the already existing getData, this method waits for the data to be set if not available immediately and then executes the callback passing in the data as argument. It’s a wrapper around the getData method that makes it easier to avoid race conditions when using setData and getData in different workflows.

  • @axinom/mosaic-e2e-page-model:

    • Selectors to support e2e tests for toast notifications added. Toast message selectors are available in page model under uiShell.notifications` property.

R69 (April 26, 2023)


  • With this release we upgraded Piral to version 0.15.8.

    This change is backward compatible for Pilets built with older versions of Piral.

    However with the upgrade we also started to make use of importmaps for our managed Pilets to allow for quicker loading times of the management systems. Because of this change, the managed pilets will make them stop working when using older versions of @axinom/mosaic-portal as emulator during development time.

    No worries, this is only affecting the development time. When the Pilet is published through the Micro Frontend Service it will always run using the latest version of mosaic-portal.

    To make the managed workflows working again on development time, please update the devDependencies for @axinom/mosaic-portal in your workflow(s) to the latest version.

    It is recommended to always update the version of @axinom/mosaic-portal frequently to minimize differences between development- and production-runtime.
    From now on, the @axinom/mosaic-portal will also warn you during development time if you’re using an old version of the emulator.
  • Added the helmet middleware to all services for increased security.

    We don’t expect any impact on applications caused by these changes. If you still encounter some issues, please let us know.

Managed Services

  • User Service: When you update to the latest version of @axinom/mosaic-user-auth library, it will be possible to receive more granular response codes than before during Sign In errors, so that your FE application can provide more meaningful error messages.

  • Video Service: Adding support for PerScene encoding mode, for smaller video output file sizes while maintaining quality.

  • Channel Service: Many fixes and smaller improvements on the channel management workflows.


  • @axinom/mosaic-ui:

    • Introducing a new filter type: FilterTypes.SearcheableOptions. This filter consist of a text input where a user can enter search values and a list of options that match the query.This can be used to make filters with many options (potentially asynchronously loaded) more user friendly.

    • Visual improvements for SelectionExplorer.

    • Some fixes for better support of Safari browsers.

R68 (April 10, 2023)

Introducing Channel Service

With this release we’re introducing the latest addition to our managed Service - the Channel Service.

This service is designed to give you the ability to create and manage your own channels and curate playlists for these channels. You can add your existing VOD entities from e.g. your media service to the playlists, optionally define ad breaks using the cue-points and publish them to allow them to be consumed by services that will power e.g. a Free ad-based streaming TV (FAST) experience for your end users.

R68 channel playlist

More information about the service can be found in the Channel Service documentation.

Managed Services

  • Added a toggle to the admin portal settings of the Video Service to enable or disable the Video Preview for Cue Points feature. This feature is enabled by default but it allows to opt-out from the feature in case video playback management system is not possible or intended in your use case.

  • Fixed a bug in Hosting Service where the RabbitMQ Connection details station in the Admin Portal would show incorrect hostname. The correct values are displayed now.

Media Template

  • Added a main video filter for Movie/Episode Explorers, allowing to filter out entities that do not have a main video assigned. (#54)

  • Added a DEMO_MODE to the Video Service, which allows to skip the webhook secret validation. This is useful for demo purposes and is not recommended for production use. (#50)

  • Improved the speed of the test:reset:dbs scripts (#48)


  • Added a CSS class with the environmentId prefixed with env- to the management portal body element, allowing environment-specific CSS rules. This is useful to make the portal look different for different environments, e.g. to make it more obvious that you are (not) in production.

  • Added a new extension to the Management Portal shell to allow the registration and usage of RouteResolvers. Workflows can register resolvers for specific routes that other workflows can then use to resolve the route. This is useful for workflows that need to navigate to a route that is not known to them, but is known to another workflow. This is for example used on the new Channel Service to create the links to the detail pages of the entities inside a playlist which are not known to the playlist workflow but are provided by the media workflows. The new methods allow to registerRouteResolver, getAllRouteResolvers or invoke a certain resolver by using resolveRoute.

  • Bulk actions triggered by an Explorer component will now trigger a toast notification when the action is started and another one in case that the backend returns an error. This will help the user to understand if the action was successful or not.

  • Fixed a bug in @axinom/lib-id-guard where the JWKS caches were not always used. This would result in making more calls than needed to fetch the public RSA keys when executing GQL requests.

Frontend Samples

  • We’ve added more scenarios for the Mosaic FE Samples application. These new scenarios will showcase how to use the Mosaic Billing Service with the Stripe payment connector.

    You can checkout the source over here or play around with the live demo over here.

Stripe Payment Connector

  • The payment connector service will no longer use ENV vars for supplying redirect URLs that are used during the payment flows, and instead will use those that are configured in your Billing Service admin area.

    You can see the change over here.

R67 (March 21, 2023)

Managed Services

  • We added a video player to the cue point management station of our Video Service, to allow editing cue points very conveniently by picking the timing directly from the video itself.

    R67 cuepoint video player

    This feature will work out of the box for non-DRM protected videos, which are stored on a publicly accessible storage.

    If your videos are DRM protected or the manifest is not accessible directly through the storage URL, you can use the Admin Portal to configure the “Manifest” and “Entitlement” Webhooks we introduced in R65.

    The Manifest webhook can be used to instruct the Management System the correct URL that should be used to playback the video.

    The Management System uses the Entitlement webhook whenever a DRM protected video should be played. The webhook should validate the request and return an entitlement token if the playback is permitted.

    The Entitlement Service on our Media Template is already implementing both webhooks, so you can take that implementation as inspiration - or even configure your version of the entitlement service as target for these Webhooks.

  • We added the option to change and delete existing webhook configurations on our Video Service.

  • Fixed a bug which allowed to create a New IDP Connection in User Service for AxAuth, when the AxAuth User Store did not have a valid OAuth Client. Now there will be an exception to stop this.

Media Template

  • The entitlement message included also empty DRM keyIds when some streams were not DRM protected (e.g. subtitle or closed-caption streams). Empty keyId values are now excluded.

Frontend Samples

  • We’ve added more scenarios for the Mosaic FE Samples application.

    These new scenarios will showcase how to use the Mosaic Billing Service for managing your End User subscriptions

    You can checkout the source over here.

R65 (March 08, 2023)


  • We added the capability to raise toast notifications to the @axinom/mosaic-portal. There are now three new methods to showNotification, updateNotification and dismissNotification which can be used to trigger toast notifications inside your workflows.

    We plan to add more usage of these (and other APIs) inside also the components coming from @axinom/mosaic-ui. So make sure you add a call to initializeUi, passing over the app object (like this), to allow the components to also leverage these features on the shell application to e.g. automatically raise toast notifications in relevant situations.

  • The RabbitMQ vhosts that are used by the customizable-services are now created with following limits. We don’t expect this to affect any of your currently running customized-services as the limits are fairly generous.

    Please contact Axinom Support if you have any special requirements in this regard.

    • max-connections = 10

    • max-queues = 150

  • Due to a change in how Postgraphile subscription lifecycle methods are executed, we’ve now updated all Postgraphile and related libraries to the latest minor version, and also released a new version of @axinom/mosaic-id-guard to handle the new approach of subscription authorization.

    The following combinations of libraries should play well together when it comes to authorizing GQL subscriptions:

    • graphile-build@4.12.2, graphile-build-pg@4.12.2, graphile-utils@4.12.2, postgraphile@4.12.4 + mosaic-id-guard@0.17.0

    • graphile-build@4.13.0, graphile-build-pg@4.13.0, graphile-utils@4.13.0, postgraphile@4.13.0 + mosaic-id-guard@0.18.0

    Action Points:

    • If you are on postgraphile@4.12.4 or below, and do not intend to upgrade it - no change is required, the existing mosaic-id-guard@0.17.0 or below would work fine with it.

    • If you are expecting to upgrade to postgraphile@4.13.0 or later, then the mosaic-id-guard library would need to be upgraded along with it to match as mentioned above.

      • You can find details about the needed change in this PR.

  • We improved the performance of row-level-security database permission checks.

    The corresponding changes on the media template were added in this PR. To manually upgrade an existing customized version based on the media template please upgrade the mosaic libraries to the latest version. Then call the util:define-func-migration scripts in all the projects to get the latest ax_define functions into the databases of each service. Then include a call to the define_authentication function into a new database migration for every protected table like: SELECT ax_define.define_authentication('<your view permissions>', '<your edit permissions>', '<table name>', 'app_public');

Managed Services

  • The Image and Video Service will now send an error message in case a image type or cue point type is already registered by another service. Services can now subscribe to the error message and handle it accordingly.

  • The Video Service now allows the configuration of two new webhooks. A Manifest webhook that should return a manifest URL to use for the video playback and an entitlement endpoint that grants an entitlement message to play back a DRM protected video. These are preparations for new features that will be released in the future, and will allow the management System to playback videos. The webhooks can be configured in the 'Video Service' settings inside the Admin Portal.

  • Fixed an issue in Video Service where the source video file extension was always set as .mp4 even for other source video file types.

  • We have improved the integration of AxAuth Service and User Service. This will now make it straightforward to pick the “User Store” you want to use from AxAuth Service when configuring the AxAuth IDP in the User Service.

    Please read more details about it here.

  • We have fixed a bug in the User Service which resulted in an exception during 'Sign In with Credentials' if the 'Allowed Proxy URLs' were not configured under User Service configuration.

  • The Billing Service exposes now the PayPal related (non-secret) settings as part fo the GraphQL API. Consuming applications can now use those values and don’t need to configure them in every application.

  • When a user subscribed to a subscription plan using the Billing Service he is redirected back from e.g. PayPal to the webpage from where he started the subscription workflow. The corresponding URLs are configured in the admin portal. When those URLs contained a GET parameter, the parameter was missing when redirecting the subscriber. This is now fixed to retain all GET parameters.

  • Fixed a bug on Hosting Service where in some intermittent situations, you receive an error 'Database already exists' when attempting to deploy a service that was previously deployed, and then undeployed.

  • We have added new scenarios to Mosaic Frontend Samples that demonstrates how to use the Image Service as well as how to subscribe to a subscription plan using the Billing & Monetization Services.


  • The PostgraphileOptionsBuilder from @axinom/mosaic-service-common got updated:

    • the constructor parameters were moved to a dedicated function setDefaultSettings

    • the setDevProperties was dropped and replaced with setConditionalProperties to be more flexible on when to use specific properties

    • the function addConditionalPlugins was added to enable fine granular decisions which plugins should be added e.g. in a development, testing, or production area and similar. The addDevPlugins function was removed.

  • Improved the validateWebhookRequest method to support both, the raw request body and an already parsed JSON object for the webhook validation.

R63 (February 09, 2023)

This is the 1st release we’re making for the year 2023, and we’re bringing some goodies your way to make up for the long wait!

  • Revamped navigation with the new Navigation Panel

    • We’ve introduced a new Navigation Panel into the Management System that will make it faster to find what you’re looking for in less steps.

    • You can read more details about the Navigation Panel over here.

  • Deploy Mosaic Media Template via the Hosting Service

    • We’ve extended the Hosting Service to be capable of provisioning necessary infrastructure and deploying customizable services from Mosaic Media Template to your environments.

    • You can read more details about deploying customizable services over here.

R60 (December 16, 2022)

  • With this release we remove the support for the deprecated messages mentioned in R55. If you didn’t update your solution yet, please find the instructions below.

  • The VideoStream data type on the Video Service was added to describe all the video, audio, subtitle, and closed caption streams within a video. These stream objects are providing detailed information about the different representations of the encoded video. Please note that these values may only get filled for newly encoded videos.

  • Introducing an improved breadcrumb in the management system as well as the admin portal, making better use of the available space and also visually more light-weight:

    R60 new breadcrumb
  • We reduced the bundle size of @axinom/mosaic-ui by ~35% which should result in better loading times of the management system. We will continue looking into improving loading times in future releases.

  • Various other improvements, fixes and preparations for future features.

  • Release 60 of Mosaic Media Template

R58 (November 28, 2022)

  • Various improvements, fixes and preparations for future features.

  • Release 58 of Mosaic Media Template.

R56 (October 25, 2022)

  • Introducing improved ways to handle errors in Mosaic services. More details can be found at Error Handling Development Guide (Basic).

  • Adding three new configuration options for Processing Profiles on Video Service.

    R56 new encoding processing settings

    More information about the features can be found on the information text on the station or in the Content Processing documentation.

  • The Mosaic Media Template is now available on Github

  • Various other improvements and fixes.

  • Release 56 of Mosaic Media Template.

R55 (October 12, 2022)

Action Required

With this release we aligned the names of event and command messages that are sent via the RabbitMQ message bus. We use now consistently a naming pattern of entity/task + actionable verb for commands and entity/task + past tense verb for events in all places.

Our services will be compatible with both, the old and the new event and command messages until November 14th 2022. After that date we’re planning to stop supporting messages using the old names. Please make sure to update your solution as described below until that date or let us know if this is not feasible for you.

To update your solution, please update the @axinom/mosaic-messages package to the latest version, then execute yarn and yarn build from the solution root. If this does result in some errors in your messaging implementation please adjust the following types:

Service Old Message Name New Message Name Old Settings Name New Settings Name

ID Service





Video Service





Video Service





Image Service





Image Service





Monetization Grants Service





Commands are accepted in a backward-compatible way and the queues to handle the commands are within our managed services. So no adjustment is required.

Events are also sent in a backward-compatible way. Some target queues were renamed to follow a consistent naming schema. Once you are done with your migration you can delete the following queues - they only exist if you subscribed to the corresponding events:

  • ID Service based event queues:

    • synchronize_permissions.finished

    • synchronize_permissions.failed

    • user.deleted

    • user_role.deleted

  • Video Service based event queues:

    • ensure_video_exists.start

    • archive_videos.start

    • ensure_video_exists.already_existed

    • ensure_video_exists.creation_started

    • ensure_video_exists.failed

    • archive_videos.finish

  • Image Service based event queues:

    • ensure_image_exists.start

    • image.archive

    • ensure_image_exists.already_existed

    • ensure_image_exists.image_created

    • ensure_image_exists.failed

    • images.archived

  • Monetization Grants Service based event queues:

    • synchronize_claim_definitions.start

    • synchronize_claim_definitions.finished

    • synchronize_claim_definitions.failed

R54 (September 22, 2022)

  • Mosaic Media Template R54 is published

  • The Video Service was upgraded to support Cue point management, including a first simple management workflow.

R53 (September 06, 2022)

  • Mosaic Media Template R53 is published

  • The Hosting Service receives the alpha version of service-deployment support for early adopters.

R52 (August 24, 2022)

  • Mosaic Media Template R52 is published

  • We have now published a new open-source repository that will give best practices for FE developers who plan on integrating with Mosaic Services. More details of the Mosaic Frontend Samples can be found here

R51 (August 11, 2022)

  • Mosaic Media Template R51 is published

  • The mosaic-ui library was updated to provide support for Explorer stations to use GraphQL Subscriptions for identifying dirty states. Now when you are viewing data on an Explorer station, and if some of that displayed data is mutated by another user, the Explorer station will show a notification to the user indicating the displayed data maybe stale and a refresh maybe required.

    • This logic is currently implemented on Image & Video explorers.

R50 (August 01, 2022)

  • Mosaic Media Template R50 is published

  • The Video Service now has the ability to configure content acquisition and publishing profiles with AWS S3 as well. Earlier it only supported Azure storage accounts.

  • Similar to above feature, the Image Service also now supports configuring acquisition profiles with AWS S3.

R48 (July 19, 2022)

  • Mosaic Media Template R48 is published

  • Improved loading times of the Management System by distributing the micro-frontend Pilets to be served via object-storages rather than by the service. This should significantly improve the waiting time of the CMS initial load.

R47 (June 20, 2022)

  • Mosaic Media Template R47 is published

  • Preliminary support to use the User Service on native devices (i.e. Android) was added. Current mosaic-user-auth was updated to work with React Native to offer this compatibility.

R46 (June 06, 2022)

  • Mosaic Media Template R46 is published

  • The Hosting Service is now promoted as a core-service. What this means is, it will always be enabled for every environment created via the Admin-Portal, and it cannot be disabled. This service will be also responsible for generating the Rabbit MQ Connections required for the customizable services, and the corresponding stations to configure them are moved under Hosting Service.

R45 (May 23, 2022)

  • Mosaic Media Template R45 is published

  • Several improvements and bug-fixes to the managed workflows were made.

    • User Role Permissions station now applies correct filters.

    • Video details station now has a re-encode action in the UI.

R44 (May 16, 2022)

  • Mosaic Media Template R44 is published

  • The Billing Service is now ready for Production usage. It supports the PayPal provider out-of-the-box, with both redirect & pop-up based flows.

  • An improvement was made for the Micro-FE Service to support publishing pilets with dynamic target URLs (build-once & deploy anywhere). This will significantly streamline build pipelines of the customized workflows, and now you do not need to rebuild the same workflow with different deployment target URLs.

R43 (April 26, 2022)

R42 (April 12, 2022)

R41 (March 29, 2022)

R40 (March 10, 2022)

  • Mosaic Media Template R40 is published

  • The Google Identity Provider used for the Management System now supports to be configured in one-click via the 'Use Built-In IDP' setting in the admin-portal.

  • The Management System received an update with new workflow stations to browse and manage End-Users created via the User Service.

R39 (February 24, 2022)

R38 (February 15, 2022)

R37 (December 17, 2021)

R33 (December 6, 2021)

R32 (November 30, 2021)

  • Mosaic Media Template R32 is published

  • User Service is available in the initial scope

  • GraphQL Subscriptions now support authentication & authorization. This support is added via the mosaic-id-guard library.