{"id":12724,"library":"ember-source","title":"Ember.js Framework Core","description":"Ember.js is a productive, battle-tested JavaScript framework for building ambitious web applications. The `ember-source` package provides the core runtime and build-time components of the Ember framework, including the Glimmer rendering engine and the Ember object model. As of its current stable version 6.12.0, Ember continues to offer a 'convention over configuration' approach, emphasizing stability and developer ergonomics through a structured ecosystem. Releases typically follow a six-week cycle for minor versions, with LTS (Long Term Support) releases provided periodically. Key differentiators include its comprehensive toolchain (Ember CLI), a robust data layer (Ember Data), and a strong commitment to backward compatibility and upgrades via 'editions' and 'octane' paradigms. The framework is designed for applications with long lifecycles, offering features like a strong routing solution, reactive programming primitives, and an opinionated component model.","status":"active","version":"6.12.0","language":"javascript","source_language":"en","source_url":"https://github.com/emberjs/ember.js","tags":["javascript","ember-addon"],"install":[{"cmd":"npm install ember-source","lang":"bash","label":"npm"},{"cmd":"yarn add ember-source","lang":"bash","label":"yarn"},{"cmd":"pnpm add ember-source","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency for component definition, though as of v6.12.0, Glimmer VM and related packages are merged into the ember.js monorepo.","package":"@glimmer/component","optional":false}],"imports":[{"note":"While older Ember versions might have used `@ember/component`, the modern way for Glimmer components is via `@glimmer/component`. Note: in v6.11.0, the default export `GlimmerComponent` was renamed to `Component` for better DX.","wrong":"import { Component } from '@ember/component';","symbol":"Component","correct":"import Component from '@glimmer/component';"},{"note":"Properties that trigger re-renders in Glimmer components are marked with `tracked`. This is a core reactive primitive.","wrong":"import { tracked } from '@ember/object';","symbol":"tracked","correct":"import { tracked } from '@glimmer/tracking';"},{"note":"The `@action` decorator is used to bind methods to the component instance and ensure they are properly handled by Ember's event system.","wrong":"import { action } from '@ember/component';","symbol":"action","correct":"import { action } from '@ember/object';"}],"quickstart":{"code":"import Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { action } from '@ember/object';\n\ninterface Args {\n  message: string;\n}\n\nexport default class GreetingComponent extends Component<Args> {\n  @tracked count = 0;\n\n  get greeting() {\n    return `${this.args.message} World! You clicked ${this.count} times.`;\n  }\n\n  @action\n  increment() {\n    this.count++;\n  }\n\n  // Example of a lifecycle hook\n  constructor(owner: unknown, args: Args) {\n    super(owner, args);\n    console.log('GreetingComponent initialized with message:', this.args.message);\n  }\n}\n","lang":"typescript","description":"This quickstart demonstrates a basic Glimmer component with `tracked` properties and an `@action` decorator."},"warnings":[{"fix":"For most applications, no direct change is required. Ensure your Ember CLI and related tooling are up-to-date to correctly handle the new monorepo structure. If you had explicit `@glimmer/*` dependencies, they might no longer be needed or should be removed.","message":"As of v6.12.0, the Glimmer VM and all `@glimmer/*` packages are merged directly into the `emberjs/ember.js` monorepo. This primarily affects core contributors and integrators, simplifying internal iteration, but might subtly change dependency resolution or tree-shaking behavior in specific edge cases for advanced build setups.","severity":"breaking","affected_versions":">=6.12.0"},{"fix":"Update your imports from `import GlimmerComponent from '@glimmer/component';` to `import Component from '@glimmer/component';`.","message":"The default export `GlimmerComponent` from `@glimmer/component` was renamed to `Component` to improve developer experience and autocomplete. Code directly importing `GlimmerComponent` will break.","severity":"breaking","affected_versions":">=6.11.0"},{"fix":"Always use ES module `import` syntax (`import { Thing } from 'module';`) in your Ember application and addon code. Ember CLI will transpile this correctly for your target environments.","message":"Ember's module resolution typically requires using `import` statements at the top level, even though `ember-source` itself ships CommonJS bundles for Node.js environments (like FastBoot). Direct `require()` calls for framework internals are generally discouraged in application code.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Update Ember to at least v6.11.1 or v6.8.4 (for older stable lines) which includes a bugfix to use `followRedirects()` internally. When using `visit()` directly, be prepared to catch and handle `TransitionAborted` errors gracefully.","message":"Using `ApplicationInstance#visit` might throw a `TransitionAborted` error if not handled correctly, especially in FastBoot or during rapid navigation/redirects.","severity":"gotcha","affected_versions":">=6.8.4, >=6.11.1"},{"fix":"Ensure your `ember-source` version is at least v6.11.1 or v6.8.4 to benefit from bug fixes addressing crashes during destroy in FastBoot.","message":"FastBoot environments experienced crashes during component/application destruction, particularly with complex component hierarchies.","severity":"gotcha","affected_versions":">=6.8.4, >=6.11.1"}],"env_vars":null,"last_verified":"2026-04-19T00:00:00.000Z","next_check":"2026-07-18T00:00:00.000Z","problems":[{"fix":"Ensure `@glimmer/component` is listed in your `package.json` peerDependencies (for addons) or dependencies (for apps) and that `ember-source` is at a compatible version. If on v6.12.0+, verify your Ember CLI version is recent enough to handle the internal Glimmer VM changes.","cause":"Ember applications or addons using Glimmer components might miss the `@glimmer/component` dependency, or the build system isn't correctly configured to resolve it after the monorepo merge.","error":"Cannot find module '@glimmer/component' or its corresponding type declarations."},{"fix":"Change your import statement from `import GlimmerComponent from '@glimmer/component';` to `import Component from '@glimmer/component';`.","cause":"This error likely occurs after upgrading to Ember v6.11.0 or later, where the default export `GlimmerComponent` from `@glimmer/component` was renamed.","error":"TypeError: GlimmerComponent is not a constructor"},{"fix":"Add the `@tracked` decorator from `@glimmer/tracking` to any component property whose changes should trigger a re-render or be reactive.","cause":"A property used in a template or relied upon for reactivity was modified, but not decorated with `@tracked`.","error":"Error: Assertion Failed: You must use 'tracked' to mark properties that you intend to use in a template or update reactively."}],"ecosystem":"npm"}