­čÜĘ Announcing Vendure v2 Beta

ÔćÉ Back to the blog

Announcing Vendure v1.9

Author avatar
December 1, 2022
Michael Bromley

Version 1.9 of the open-source headless commerce framework Vendure is available now. This release includes features that unlock a whole new range of use-cases, workflows, payment methods and more!

v1.9.0 Changelog

Codename: Kitzb├╝hel

This release is named after one of the most famous ski resorts in the world - Kitzb├╝hel. This medieval town is located in the heart of the Alps in Tyrol, Austria, and is not only the home of the world-famous Hahnenkamm ski race, but also home to Alpin11, Vendure’s partner and shareholder.

Photo by Patrick Schneider on Unsplash

Photo by Patrick Schneider on Unsplash

Upgrading from v1.x.x

This minor release contains no breaking schema or GraphQL API changes, so updating should be a matter of changing all @vendure/... dependencies in your package.json file to 1.9.0.

  "dependencies": {
-    "@vendure/admin-ui-plugin": "1.8.5",
-    "@vendure/asset-server-plugin": "1.8.5",
-    "@vendure/core": "1.8.5",
-    ... etc
+    "@vendure/admin-ui-plugin": "1.9.0",
+    "@vendure/asset-server-plugin": "1.9.0",
+    "@vendure/core": "1.9.0",
+    ... etc
  "devDependencies": {
-    "@vendure/testing": "1.8.5", 
+    "@vendure/testing": "1.9.0",

Also see the Updating Vendure guide for more information.

Custom history entries

In Vendure, Orders and Customers have a history timeline that shows important changes and events relating to that Order or Customer. From v1.9, it is now possible to define your own custom history entries for both Orders and Customers. Not only that, you can also provide custom UI components to control how these entries get displayed in the Admin UI’s timeline!

A custom history component

A custom history component


The Shop API operations like activeOrder and addItemToOrder all work with an implicit “active” Order entity. This order gets automatically created and associated with the current session.

This behaviour, while convenient for most use-cases, makes it very difficult to support alternate workflows common in B2B and other scenarios where, for example, an Order might need to be created by one person, and then modified by another, and then purchased by a third.

This kind of advanced order workflow can now be supported using the new ActiveOrderStrategy!

With a custom ActiveOrderStrategy, you can now support things like:

  • A unique active order for each channel
  • Multiple active orders referenced by a token or ID
  • Restricting access to an active order to employees of a single company

Login screen refresh

As the first part of a general UI refresh that will be released with v2.0, we’ve upgraded the login screen!

The new login screen

The new login screen

The images come from an Unsplash collection we curate ourselves, but you can also specify your own image:

  route: 'admin',
  port: 5001,
  adminUiConfig: {
    loginImageUrl: 'https://domain.com/my-custom-splash-screen.jpg',

Mollie integration upgrade

Our Mollie payments integration was previously built on Mollie’s Payments API, but now in v1.9 - and thanks to our Silver Partners at Pinelab - is now built on the more powerful Orders API.

Using the Orders API is the preferred approach when integrating the Mollie API into e-commerce applications such as webshops.

Mollie docs: Why use orders?

The primary benefit of this change is that it unlocks a host of new payment options, including “pay after delivery” payment methods such as Klarna Pay later, Klarna Slice it or in3, Klarna Pay now, as well as eco vouchers, gift vouchers, and meal vouchers.

See the new Mollie pay later methods guide in our docs.

Other notable changes

  • A new facetValues query has been added to the Admin API. This is now used by the built-in facet-value-form-input control to greatly improve performance when working with a large number of Facets and FacetValues.
  • All list queries that return the PaginatedList type can now be filtered with a new isNull filter.
  • The EmailPlugin now supports a new SES transport so you can send your emails using Amazon’s Simple Email Service.
  • We updated our Vendure Demo to showcase each of the starter storefronts we’re maintaining. The Angular storefront now has a new home at angular-storefront.vendure.io and has been converted to use Tailwind to match the look and feel of the Remix & Qwik starters.


I’d like to thank the wonderful Vendure community who contribute their ideas, bug reports, and code to the project daily. This release includes code contributions by:

  • Ariel Barabas:
    • fix(core): Importing custom boolean field works as intended (#1908)
  • Artem Danilov:
    • feat(elasticsearch-plugin): Independently access customMappings (#1909)
  • Christian Stocker:
    • fix(core): AuthGuard correctly handles subscriptions
    • feat(email-plugin): Add support for AWS SES transport (#1877)
  • David H├Âck:
    • feat(admin-ui): Login UI refresh (#1862)
    • fix(admin-ui): Add links according to Unsplash guidelines (#1911)
  • Martijn van de Brug:
    • feat(payments-plugin): Use Mollie’s Order API (#1884)
  • Matt Gillespie:
    • fix(ui-devkit): Update scaffolding to use correct eslib (#1886)
  • Saugat Dhimal:
    • docs: Fix typo in authentication.md (#1861)
  • Sebastian Geschke:
    • fix(core): Fix injectable hooks on TaxLineCalculationStrategy (#1882)
  • Thierry Tournie:
    • perf(core): Use TypeORM relation query builder when filtering collection
    • refactor(core): Remove unused code in applyCollectionFiltersInternal
  • Vinicius Rosa:
    • fix(payments-plugin): Return 200 on Stripe payment failed event (#1878)
  • Teresa Wienk Borgert:
    • feat(admin): Sort orders on customer details page (#1860)
    • fix(core): Make order of OrderLine from OrderService.findOne deterministic (#1904)
Author avatar
Written by
Michael Bromley
Michael is the creator of Vendure. He lives in Vienna, Austria.
Twitter logo GitHub logo