Open Development

Changelog

Follow every release of the Unchained Engine. All development happens in the open under the EUPL license.

v5.0

Breaking Changes
  • REMOVED: All legacy adapter exports from plugin files. Use new *Plugin exports instead:
  • REMOVED: Director.registerAdapter() method from all 14 Directors. Use preset registration functions (registerBasePlugins(), registerAllPlugins()) or pluginRegistry.register() instead.
  • REMOVED: Default exports from @unchainedshop/plugins/presets/base.js and all.js. Import named registration functions instead.
  • REMOVED: PluginRegistry.registerAdapters() method (was deprecated and non-functional).
  • REMOVED: Deprecated mutations (replaced by cart-based mutations in v4):
Full changelog on GitHub →

v4.6

  • Added OCSF-compliant audit trail system in @unchainedshop/events for security monitoring and compliance (SOC 2, GDPR, HIPAA). Enable with UNCHAINED_AUDIT_ENABLED=true.
  • Added new demo data CLI tool (tools/demo-data-cli) for seeding development environments with realistic e-commerce data.
  • Typo fix: FULLFILLED → FULFILLED in OrderStatus and QuotationStatus enums. Update any code referencing these status values.
  • Typo fix: services.quotations.fullfillQuotation → services.quotations.fulfillQuotation. Update any code calling this service.
  • Removed Mutation.setBaseAssortment and Assortment.isBase field. Base assortment concept has been removed from the API.
Full changelog on GitHub →

v4.5

  • MongoDB peer dependency now requires version 7.x. Update mongodb to >= 7 < 8, mongodb-memory-server to >= 11 < 12, and @mongodb-js/zstd to >= 7 < 8.
  • WebAuthn implementation migrated from optional peer dependency fido2-lib to @passwordless-id/webauthn built-in. Custom WebAuthn integrations should be reviewed and tested.
Full changelog on GitHub →

v4.4

  • Improve performance of facet filtering by 2x
  • Upgrade to Zod 4
  • Improve Admin UI for ticketing and add a new "Messages" tab to the Work Queue so it's easier to track messaging based work items
  • Support for MongoDB Node.js driver 7.0
  • Inline connect-mongo including copyright due to untrusted downstream dependencies
Full changelog on GitHub →

v4.3

  • Delivery Providers now expose the pick-up locations too #656
  • Permissions have been updated with a new enrollUser permission
  • Admin UI: Now shows menu items and actions dynamically according to permissions of a user
  • Admin UI: Improved retry option
  • Node.js 25 by default in Dockerfiles
Full changelog on GitHub →

v4.2

  • Removed obsolete PickMUp delivery provider because it's not compatible anymore with the API of Migros
  • Stores Plugin now allows to set the stores without JSON.stringifying the value
  • Added various factory methods to simplify plugin development
  • Added two new actions viewWorkQueue and viewWork do better control custom ACL cases
  • Started to harmonize actions with admin ui permission checker
Full changelog on GitHub →

v4.1

  • Add warehousing provider loader and slightly improve performance when warehousing is involved (for ex. delivery estimations on many products)
  • Fix a case where the expiry of the enrollment was calculated wrongly
  • Fix catalog price calculation bug with leveled prices #670
  • Fix unchained supporting ai@5.0.80+ (breaking change with experimental feature)
Full changelog on GitHub →

v4.0

"Tell"
  • Only users with admin role can access the MCP server.
  • We will bring more tools to the table with upcoming minor releases, currently only basic product management is enabled
  • Bulk Import: BulkImportOperation type moved from @unchainedshop/platform to @unchainedshop/core and now requires a generic type parameter.
  • Removed CARD type for payments. We never used it and it doesn't make sense to provide card data in plaintext. Removing Mutation.updateOrderPaymentCard.
  • Query.eventsCount and Query.events now accept a DateFilterInput (start/end range) for the created date.
Full changelog on GitHub →

v3.1

  • Platform: Add OIDC Connect Support to Admin UI with singleSignOnURL configurability
  • Platform: Improve Typing for Boot Code
  • API: Expose externalLinks and singleSignOnURL in ShopInfo
  • Logger: Reducing Logging to show important events only
  • Plugins: Update Stripe
Full changelog on GitHub →

v3.0

"Odi"
  • ...is 100% ESM and self-hosted
  • ...loves WebCrypto, Fetch API, WebPush, URL, WebAuthn, oAuth
  • ...runs on Bun, Node.js and Serverless frameworks.
  • ...doesn't use ORM systems; can leverage the db driver to it's fullest potential 😉
  • ...hates federated graphs; is fast 😉
Full changelog on GitHub →

v2.14

  • API: Extend Mutation.confirmOrder and Mutation.rejectOrder with a comment field. Allows to provide arbitrary data like a rejection reason that you can use in messaging.
  • API: Change argument format of Query.workStatistics, Query.eventStatistics & Query.orderStatistics from from/to to dateRange of type DateFilterInput
  • API: Product.simulatedPrice now accepts an optional configuration so you can also provide arbitrary configs to simulate prices
  • API: New Queries have been added to gather basic statistical data: Query.eventStatistics, Query.orderStatistics, Query.workStatistics.
  • API: Add Mutation.invalidateToken to manually mark a token as invalidated
Full changelog on GitHub →

v2.13

  • Add Query.validateVerifyEmailToken that can be used to verify if a token is valid for use when verifying email
  • Add Query.validateResetPasswordToken that can be used to verify if a token is valid for use on password reset request
  • Add Query.validateVerifyEmailToken that can be used to verify if a token is valid for use when verifying email
  • Add Query.validateResetPasswordToken that can be used to verify if a token is valid for use on password reset request
  • Added Payrexx plugin
Full changelog on GitHub →

v2.7

  • Improve discount types
  • Extend the functionality of the default product-discount plugin so it's universally usable for different kind of product discounts
  • Fix a case with order-discount and order-items-discount plugins not appropriately applying a rate to payment and delivery fees
Full changelog on GitHub →

v2.6

  • Add shop.unchained.pricing.order-round order price rounding plugin
  • Remove obsolete internal addRoles from users
  • Utility functions have been moved generateDbFilterById, buildSortOptions and generateDbObjectId from @unchainedshop/utils to @unchainedshop/mongodb;
  • Remove events PRODUCT_UPDATE_VARIATION_TEXTS, PRODUCT_UPDATE_TEXTS, FILTER_UPDATE_TEXTS, ASSORTMENT_UPDATE_TEXTS (triggered for every product when text changes)
  • Add new events PRODUCT_UPDATE_VARIATION_TEXT, PRODUCT_UPDATE_TEXT, FILTER_UPDATE_TEXT, ASSORTMENT_UPDATE_TEXT (triggered for every locale & product when text changes).
Full changelog on GitHub →

v2.5

  • Allow to configure an "environment" for stripe which allows to drop events coming to the the engine that are intended to land on another engine not causing false negatives in webhooks.
  • Add Error Report job that sends failed work items to an E-Mail Address of choice defined by EMAIL_ERROR_REPORT_RECIPIENT
  • Add support for net and gross calculation on order items and order totals: Added useNetPrice parameter to OrderItem.total, OrderItem.unitPrice, Order.total
  • Add granular permissions and default allow rules for all mutations even the anonymous ones
  • Add Mutation.stopImpersonation that will end an impersonated user account session and return back to the initial impersonator account.
Full changelog on GitHub →

v2.3

  • Remove renderMjmlToHtml convenience method and pre-defined html templates because mjml is too heavy weight as a dependency and html e-mails cause more issues than they solve.
  • Support MINIO_UPLOAD_PREFIX to specifiy subdirectory in bucket in front of all uploads
  • Remove various dependencies from core packages.
  • Make updating of token ownerships more performant
  • Improve pricing types
Full changelog on GitHub →

v2.2

  • Extended the input fn option of auto-scheduling input to expect a promise and also take the pre-calculated workData as input extending the possibilities to alter auto-scheduling behavior. #588
  • Remove autoSchedulingInput because there is no obvious way this is helpful and it has never been used in known projects
  • Move some platform types to platform package
  • The platform option workQueueOptions has been extended to take a retryInput. The retryInput fn can be used to alter input into work when the work is beeing retried. This allows stopping retries. #588
  • Fix timeout field in worker's and types
Full changelog on GitHub →

v2.1

  • Add Mutation.processNextWork to help trigger work from outside and removed Mutation.doWork (was not functional)
  • Customize the Cookie Path with UNCHAINED_COOKIE_PATH
  • Better Order Numbers with Hashid's that don't contain competitive 1,l,0 (O was already removed before)
  • Improved logging for the work the queue
  • Re-introducded corsOrigins adjustable through connectPlatformToExpress4
Full changelog on GitHub →

v2.0

"Federer"
  • Tags are now always LowerCase and use an own scalar
  • Order.documents has been removed because it was not used since 3 years
  • New built-in support for two standard W3C API's: Web Authentication API, Push API
  • New Web3 Experimantal Features: NFT/Token Minting Plugins, Web3 Login through Metamask
  • Unchained now uses Apollo Server 4.
Full changelog on GitHub →

v1.2

  • To upgrade from meteor to NPM with your existing meteor app you will have to:
  • disableEmailInterception is not available as option anymore, but you can still disable interception
  • All atmosphere packages have been transformed to npm packages, all plugins are now in a separate
  • The payment webhook endpoints changed from
  • Boilerplate has been removed because it was very outdated. A new create-unchained-app version which
Full changelog on GitHub →

v1.1

  • [core] Instead of updateDelivery and updatePayment we now have updateContext methods on
  • [core] Pricing Plugins now receive the ongoing director calculation as a sheet in the parameters
  • [core] Discount actions in adapter and director now return a Promise to extend the possibility for
  • [api] customFields has been removed from the input field UserProfileInput and custom data has been
  • [api] query.events is now extended with additional filter parameters created get events created
Full changelog on GitHub →

v1.0

"Maiglöggli"
  • Unchained 1.x (LTS, released until end of autumn, supported until end of 2023): Small continous
  • Unchained 2.0 (End of 2022): Complete Meteor-free and pure ESM-only version of Unchained Engine that
  • [core] We have removed the Matomo tracker because it was not a plugin but rather an example of an event
  • [platform, api, core] Refactor Unchained Engine's core with the goal to add typescript support, get rid
  • [core] UNCHAINED_INVALIDATE_PROVIDERS has been removed in order for an inverted
Full changelog on GitHub →

Want to Shape the Future?

Unchained is open source. Contribute features, report issues, or join the discussion.

EUPL LicensedOpen SourceCommunity Driven