Glint Is Now Enabled by Default in Ember

– By Peter Wagenet

Starting with this release of the Ember CLI app and addon blueprints, Glint is enabled by default. This implements RFC #976: Enable Glint by Default. New apps and addons get template type-checking and editor tooling out of the box — no extra opt-in required.

Glint is the static template type-checker for Ember. With Glint, your .gts and .gjs templates are type-checked at the same time as your TypeScript code: invocations of unknown components, missing arguments, mistyped block parameters, and unresolved helper imports become build-time errors instead of runtime surprises. The Glint TypeScript Server plugin also surfaces those diagnostics inline in any tsserver-aware editor.

What changed

When you generate a new TypeScript app:

ember new my-app --typescript

…the blueprint now installs the Glint v2 stack by default:

  • @glint/ember-tsc — the ember-tsc CLI used by the new lint:types script (ember-tsc --noEmit), plus a standalone language server.
  • @glint/tsserver-plugin — a TypeScript Server plugin (Volar-based) that augments the TS language service with template-aware diagnostics. This is the editor integration path; install the Glint VS Code extension (or ember.nvim for Neovim) to enable it.
  • @glint/template — type definitions for Glimmer templates.

JavaScript apps generated by @embroider/app-blueprint also install the Glint stack so you can take advantage of editor tooling, even without authoring TypeScript. The JS blueprint emits a jsconfig.json (rather than tsconfig.json) to signal that no CLI type-check is wired up by default — Glint just powers your editor.

What's gone

Glint v2 supports template-tag (.gts / .gjs) authoring exclusively, so the v1 environment-and-registry pattern for .hbs templates has been retired:

  • @glint/environment-ember-loose and @glint/environment-ember-template-imports are no longer installed.
  • The glint.environment key is no longer emitted in tsconfig.json.
  • The addon blueprint no longer scaffolds a template-registry.ts or its public entrypoint in the rollup config.

Apps that still author components, helpers, or modifiers in .hbs will not get template type-checking until those files are converted to template-tag (codemods are available). Route templates remain authorable as either .hbs or .gts (via ember-route-template).

Adding Glint to an existing app

If you have an existing TypeScript app that hasn't enabled Glint yet, the migration is small:

  1. Remove the v1 packages if you have them (@glint/core, @glint/environment-ember-loose, @glint/environment-ember-template-imports).
  2. Install the v2 stack:
   npm install --save-dev @glint/ember-tsc @glint/template @glint/tsserver-plugin typescript@~5.7
  1. In tsconfig.json, drop any glint key and add @glint/ember-tsc/types to compilerOptions.types.
  2. Replace the lint:types script: tsc --noEmitember-tsc --noEmit.
  3. Install the Glint editor extension for your editor of choice.

For JavaScript apps that want editor tooling, install the same packages (and @ember/app-tsconfig) and add a minimal jsconfig.json extending @ember/app-tsconfig.

Opting out

If you don't want Glint in a freshly-generated app, you can remove @glint/* from devDependencies and delete the lint:types script (or replace it with tsc --noEmit) — nothing else in the blueprint depends on Glint.

Thanks

Thanks to the Glint maintainers and contributors who have been steadily building toward v2, and to everyone who used the v1 preview and reported back. Glint by default has been a long time coming; we're glad to see it land.