github vendurehq/vendure v3.5.6

6 hours ago

Highlights

This is the final release of the v3.5.x line, before the imminent release of Vendure v3.6!

This release includes a whole host of improvements to the core and dashboard packages.

Note: this is also the final release for the following packages before they are moved to their new homes:

  • @vendure/elasticsearch-plugin
  • @vendure/payments-plugin
  • @vendure/sentry-plugin
  • @vendure/stellate-plugin
  • @vendure/job-queue-plugin/package/pub-sub

Instructions on updating these packages will be included with the v3.6 release notes & migration guide.

Core fixes

  • Atomic order mergingOrderService.mergeOrders is now concurrency-safe, preventing race conditions when multiple requests hit simultaneously
  • Stale shipping lines cleaned up — orders no longer carry phantom shipping lines from deleted shipping methods
  • Schema-qualified EXISTS subqueries — fixes correctness issues in multi-schema PostgreSQL setups
  • Channel cache invalidation — channel token is now set before query invalidation, fixing stale data issues after channel updates
  • Wider TranslationInput typelanguageCode now accepts string literal unions, improving TypeScript ergonomics for custom language handling

Dashboard improvements

  • Product options on variant detail — product options are now visible directly on the variant detail page
  • Collection tree state persisted in URL — expanded/collapsed state survives navigation and page refreshes
  • Custom fields hideable from UI — new dashboard option lets you hide custom fields from the Dashboard without removing them from the API
  • Nested address custom fields — custom fields on customer addresses now render correctly in the customer detail view
  • Breadcrumbs update reactively — breadcrumbs now reflect entity name changes after a save without requiring a page reload
  • Sidebar hover cards for collapsed nav — navigation sections now show a hover card when the sidebar is collapsed
  • Faceted filter wrapping — filters no longer overflow horizontally on narrow screens
  • ConfigurableOperationInput validation fix — args with a defaultValue are now treated as valid even when empty
  • MoneyInput focus & onChange handling — fixes edge cases in the money input component
  • Currency display in order table — correct currency now passed to the Money component in order line items
  • OOM fix in plugin compilation — replaces ts.createProgram() with per-file ts.transpileModule() in the config loader, eliminating heap exhaustion when vendure-config.ts imports plugins with heavy transitive dependencies (e.g. openai, ai, @ai-sdk/*). Compile time drops by up to 98% and memory use by up to 78%.
  • PathAdapter gets new sourceRoot option ⚠️ BREAKING CHANGE IN EDGE CASES — where monorepos using a custom pathAdapter.getCompiledConfigPath cannot build the dashboard because the output directory structure is flattened: If you use a custom pathAdapter, set sourceRoot to your workspace root to restore correct nesting:
  vendureDashboardPlugin({
      pathAdapter: {
          sourceRoot: path.resolve(__dirname, '../..'), // workspace root
          getCompiledConfigPath: ({ outputPath, configFileName }) => {
              return join(outputPath, 'apps', 'vendure-server', 'src', configFileName);
          },
      },
  })

Non-monorepo setups are unaffected — the default behaviour is unchanged.

New translations

What's Changed

  • Feat(dashboard) : nl translations by @LazyClicks in #4188
  • fix(dashboard): Treat args with defaultValue as valid in ConfigurableOperationInput by @michaelbromley in #4462
  • fix(dashboard): Display variant creation errors and list query errors by @grolmus in #4460
  • fix(dashboard): Fix validation & UX issues in product variant option groups by @biggamesmallworld in #4458
  • fix(ci): Pin third-party GitHub Actions to full commit SHAs by @michaelbromley in #4475
  • chore(repo): Address SonarQube low-hanging fruit issues by @michaelbromley in #4477
  • fix(core): Remove stale shipping lines when shipping method no longer exists by @colinpieper in #4487
  • feat(dashboard): Add Hungarian translations by @atistrcsn in #4423
  • fix(testing): Prevent e2e port collisions across packages by @michaelbromley in #4484
  • fix(core): Make OrderService.mergeOrders atomic and concurrency-safe by @michaelbromley in #4488
  • fix(dashboard): Use null instead of undefined when clearing relation custom fields by @grolmus in #4495
  • fix(core): use schema-qualified table paths in EXISTS subqueries by @yasserlens in #4501
  • fix: set channel token before query invalidation by @Ryrahul in #4472
  • fix(dashboard): Show hover card for collapsed sidebar nav sections by @oliverstreissi in #4440
  • fix: Channel cache invalidation after update by @Ryrahul in #4461
  • fix(dashboard): Wrap faceted filters to prevent horizontal overflow by @grolmus in #4467
  • fix(dashboard): Detect plugins compiled with tslib importHelpers by @michaelbromley in #4518
  • fix(dashboard): Forward all ControllerProps in FormFieldWrapper by @gabriellbui in #4513
  • fix(dashboard): Update breadcrumb reactively after entity mutation by @HouseinIsProgramming in #4512
  • chore: Trim CLAUDE.md to implicit knowledge only by @BibiSebi in #4522
  • fix(core): Widen TranslationInput languageCode to accept string literal unions by @HouseinIsProgramming in #4534
  • fix(dashboard): Pass correct currency prop to Money component in order table by @isxwor in #4541
  • feat(core): Add dashboard option to hide custom fields from Dashboard UI by @HouseinIsProgramming in #4544
  • fix(docs): Correct typo in EventBus JSDoc by @latifniz in #4533
  • fix(docs): Correct typo in ProductEvent JSDoc by @latifniz in #4539
  • fix: Add nested address custom field in customer detail by @Ryrahul in #4546
  • fix(ci): Update deploy dashboard workflow to match minor branch by @michaelbromley in #4556
  • fix(dashboard): Replace ts.createProgram with per-file transpilation to prevent OOM by @michaelbromley in #4561
  • fix(dashboard): Use tsconfig baseUrl as source root for monorepo pathAdapters by @michaelbromley in #4570
  • docs: Add manifest.json and compile script by @dlhck in #4572
  • feat(dashboard): Display product options on variant detail page by @grolmus in #4187
  • fix(dashboard): Add missing i18n translations and CI sync check by @michaelbromley in #4578
  • fix(dashboard): Persist collection tree expanded state in URL search params by @biggamesmallworld in #4509
  • fix(dashboard): MoneyInput component to handle focus state and onChange by @harshit078 in #4586

New Contributors

Full Changelog: v3.5.5...v3.5.6

Don't miss a new vendure release

NewReleases is sending notifications on new releases.