Skip to content

chore: support Ember 7.4 (upgrade ember-cli-htmlbars & addon deps) - #215

Open
dmcnamara-eng wants to merge 1 commit into
GavinJoyce:masterfrom
phorest:chore/ember-7-compat
Open

dmcnamara-eng wants to merge 1 commit into
GavinJoyce:masterfrom
phorest:chore/ember-7-compat

Conversation

@dmcnamara-eng

Copy link
Copy Markdown
Collaborator

Summary

ember-headlessui can't be used in an app on Ember 7.4. ember-source@7 no longer ships dist/ember-template-compiler.js, so every v1 addon in our tree that uses ember-cli-htmlbars ≤ 6 crashes the build:

TypeError: Cannot read properties of undefined (reading 'templateCompiler')
    at Class.templateCompilerPath (ember-cli-htmlbars@6.3.0/lib/ember-addon-main.js:271:32)
Dependency Before After Why
ember-cli-htmlbars ^6.0.1 ^7.0.1 v7 resolves the Ember 7 template compiler
ember-element-helper ^0.6.0 ^0.8.8 0.6 depends on ember-cli-htmlbars@6
ember-concurrency ^2.1.2 ^5.3.0 2.x depends on ember-cli-htmlbars@5; 4.x imports 'ember', which Ember 7 removed
tracked-maps-and-sets ^3.0.1 removed → tracked-built-ins ^4.1.2 its polyfill depends on ember-cli-htmlbars@5
ember-cli-babel ^7.26.3 ^8.3.2 (+ @babel/core) raise the floor
ember-truth-helpers ^3.0.0 ^5.0.0 raise the floor (v2 addon, needs Ember ≥ 4.8)
ember-set-helper ^2.0.1 ^3.1.0 raise the floor (v2 addon)
ember-modifier ^4.0.0-beta.1 ^4.3.0 move off the beta
ember-auto-import ^2.2.0 ^2.10.0 raise the floor
@embroider/macros – ^1.19.0 tracked-built-ins@4 uses appEmberSatisfies (added in 1.19)

Other changes:

  • ember-concurrency 5 has no decorators. The 5 @dropTask/@restartableTask generator methods in menu.js, transition/applied-class-names.js and transition/transition-visibility.js are rewritten as task({ drop|restartable: true }, async () => {}). index.js registers ember-concurrency/async-arrow-task-transform.
  • Dev tooling: TypeScript 4.7 → 5.9 and added @types/ember__owner, because ember ts:precompile (prepack) can't read the .ts-extension declarations in ember-modifier ≥ 4.2. test-app also gets ember-auto-import ^2.10 and ember-source ~4.8.
  • README: new Compatibility table.

⚠️ Breaking

  • ember-source ≥ 4.8 (was ≥ 4.4). This comes from ember-truth-helpers@5. The ember-lts-4.4 ember-try scenario and CI job are removed.
  • Node ≥ 20, required by ember-cli-htmlbars@7. Volta is now pinned to Node 22.22.2 in the root, addon and test-app.
  • Suggest releasing this as 0.18.0, which is what the README table assumes.

Note on CI coverage

The ember-release/ember-beta/ember-canary jobs aren't testing those versions. On the latest master run, the ember-release job's dependency table shows ember-source 4.4.5, because ember-try doesn't actually swap ember-source inside the pnpm workspace. So CI has never covered Ember 5+. Fixing that is out of scope here, which is why Ember 7.4 was verified by hand (below).

Test plan

  • pnpm install from a clean node_modules, then pnpm lint: 0 errors (6 pre-existing no-down-event-binding warnings).
  • pnpm test (test-app on Ember 4.8.6): 407 tests, 354 pass, 0 fail, 18 skip, 35 todo. The pass/fail counts match master's CI.
  • pnpm pack (runs ts:precompile) succeeds.
  • Ember 7.4.0 smoke test. Fresh ember-cli@7.3.0 Vite/Embroider app with ember-source@7.4.0:
    • published ember-headlessui@0.17.3: build fails with the templateCompiler error above.
    • this branch (pnpm pack tarball): builds. A rendering test passes 6/6:
      • Menu open, plus typeahead via searchTask
      • Transition hide via unmountAfterTransitionTask/transitionToHide
      • Listbox open
      • Combobox, Switch, Transition and Dialog render
  • Not verified: a classic (non-Embroider) ember-cli build on Ember 7.4.

🤖 Generated with Claude Code

ember-source 7 no longer ships dist/ember-template-compiler.js, so every
v1 addon in our dependency tree that relies on ember-cli-htmlbars <= 6
fails to build.

- ember-cli-htmlbars ^6 -> ^7.0.1
- ember-cli-babel ^7 -> ^8.3.2 (+ @babel/core)
- ember-element-helper ^0.6 -> ^0.8.8 (v2)
- ember-truth-helpers ^3 -> ^5.0.0 (v2)
- ember-set-helper ^2 -> ^3.1.0 (v2)
- ember-concurrency ^2 -> ^5.3.0 (v2); decorator tasks rewritten to
  task({ ... }, async () => {}) with the async-arrow transform registered
  in index.js
- tracked-maps-and-sets -> tracked-built-ins ^4.1.2
- ember-modifier ^4.3.0, ember-auto-import ^2.10.0,
  @embroider/macros ^1.19.0 (needed by tracked-built-ins 4)
- TypeScript 5 + @types/ember__owner so ts:precompile can read
  ember-modifier 4.2+ declarations

BREAKING: requires ember-source >= 4.8 and Node >= 20. Drops the
ember-lts-4.4 scenario; test-app now runs on Ember 4.8.

Adds an Ember/Node compatibility table to the README.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@dmcnamara-eng dmcnamara-eng self-assigned this Nov 9, 2026
@dmcnamara-eng
dmcnamara-eng marked this pull request as ready for review November 10, 2026 09:32

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant