{"id":47490,"library":"ember-classic-decorator","title":"ember-classic-decorator","description":"A dev-time only decorator to aid migrating from Ember's classic class system to native classes in Ember Octane. The @classic decorator flags classes that still rely on classic APIs (reopen, reopenClass) and prevents timing bugs with init/constructor. Version 4.0.0 is the latest stable, requires ember-source >= 4.0.0. It is no longer needed and can be safely removed; it must be removed before switching to Vite. Ships TypeScript types. Low maintenance, intended for transitional use.","status":"maintenance","version":"4.0.0","language":"javascript","source_language":"en","source_url":"https://github.com/emberjs/ember-classic-decorator","tags":["javascript","ember-addon","typescript"],"install":[{"cmd":"npm install ember-classic-decorator","lang":"bash","label":"npm"},{"cmd":"yarn add ember-classic-decorator","lang":"bash","label":"yarn"},{"cmd":"pnpm add ember-classic-decorator","lang":"bash","label":"pnpm"}],"dependencies":[{"reason":"Peer dependency; library decorates Ember classes and must match Ember version.","package":"ember-source","optional":false}],"imports":[{"note":"Default export; named import does not work.","wrong":"import { classic } from 'ember-classic-decorator';","symbol":"classic","correct":"import classic from 'ember-classic-decorator';"},{"note":"Decorate classic classes to avoid assertion errors.","wrong":"class MyComponent extends Component {} // missing decorator","symbol":"@classic","correct":"@classic class MyComponent extends Component {}"},{"note":"CommonJS usage is possible but discouraged; prefer ESM import.","wrong":"const { classic } = require('ember-classic-decorator');","symbol":"require('ember-classic-decorator')","correct":"const classic = require('ember-classic-decorator');"}],"quickstart":{"code":"// Install the addon\n// ember install ember-classic-decorator\n\n// Add eslint rules to .eslintrc.js\n// 'ember/classic-decorator-hooks': 'error',\n// 'ember/classic-decorator-no-classic-methods': 'error'\n\n// Use @classic decorator on classes still using classic APIs\nimport classic from 'ember-classic-decorator';\nimport Component from '@ember/component';\n\n@classic\nexport default class MyComponent extends Component {\n  init() {\n    super.init(...arguments);\n    // classic setup\n  }\n\n  // Using reopen in a @classic decorated class is allowed\n  // Without @classic, it would throw an error\n  static reopen() { /* ... */ }\n}\n\n// To remove @classic, convert to Glimmer component and remove decorator.\n// Note: @classic is not needed and can be safely removed from all classes.","lang":"typescript","description":"Install the addon, configure ESLint, and use @classic decorator on classic-style Ember classes to suppress assertions and aid migration."},"warnings":[{"fix":"Remove ember-classic-decorator from package.json and delete any @classic decorators.","message":"This library is no longer needed; it can be safely removed from projects without runtime or buildtime changes.","severity":"deprecated","affected_versions":">=4.0.0"},{"fix":"Remove the addon before migrating to Vite.","message":"Must be removed before switching to Vite; otherwise Vite builds may fail or have unexpected behavior.","severity":"breaking","affected_versions":">=4.0.0"},{"fix":"Use eslint rules to catch classic APIs rather than depending on runtime assertions.","message":"The @classic decorator only affects dev-time assertions; it is removed from production builds. Do not rely on it for runtime behavior.","severity":"gotcha","affected_versions":">=1.0.0"},{"fix":"Migrate all classes to native syntax and remove @classic decorator.","message":"Ember classic classes are deprecated in favor of native classes and Glimmer components.","severity":"deprecated","affected_versions":">=3.15"},{"fix":"Avoid constructor in subclasses that override init; use init instead.","message":"Using constructor in a subclass when the parent has init causes timing bugs; @classic prevents this but only in dev.","severity":"gotcha","affected_versions":">=1.0.0"}],"env_vars":null,"search_vec":"'4.0.0':46,55 'addon':86 'aid':12 'api':36 'bug':42 'class':18,22,30 'classic':3,17,27,35 'decor':4,10,28 'dev':7 'dev-tim':6 'ember':2,15,24,53,85 'ember-addon':84 'ember-classic-decor':1 'ember-sourc':52 'flag':29 'init/constructor':44 'intend':79 'javascript':83 'latest':49 'longer':59 'low':77 'mainten':78 'migrat':13 'must':67 'nativ':21 'need':60 'octan':25 'prevent':40 'reli':33 'remov':65,69 'reopen':37 'reopenclass':38 'requir':51 'safe':64 'ship':74 'sourc':54 'stabl':50 'still':32 'switch':71 'system':19 'time':8,41 'transit':81 'type':76 'typescript':75,87 'use':82 'version':45 'vite':73","created_at":"2026-06-07T16:51:46.987734+00:00","updated_at":"2026-06-07T16:51:46.987734+00:00","problems":[{"fix":"Add @classic decorator to the class definition, or remove the reopen call.","cause":"Using reopen on a native class without @classic decorator.","error":"Assertion Failed: You attempted to use `reopen` on a class that is not marked as @classic."},{"fix":"Add @classic decorator or refactor away from reopenClass.","cause":"Using reopenClass on a native class without @classic decorator.","error":"Assertion Failed: You attempted to use `reopenClass` on a class that is not marked as @classic."},{"fix":"Add @classic decorator or convert usage to modern alternatives.","cause":"Using get/set/addObserver/etc. on a class that is not marked @classic.","error":"Lint error: 'ember/classic-decorator-no-classic-methods' - Do not use classic methods on non-classic classes."},{"fix":"Add @classic decorator and ensure eslint rules are active to catch these errors.","cause":"Missing @classic decorator but class extends EmberObject and uses reopen.","error":"TypeError: Cannot read properties of undefined (reading 'reopen')"}],"ecosystem":"npm","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":null,"cli_name":null,"cli_version":null,"type":"library","homepage":"https://github.com/emberjs/ember-classic-decorator#readme","github":"https://github.com/emberjs/ember-classic-decorator","docs":null,"changelog":null,"pypi":null,"npm":"ember-classic-decorator","openapi_spec":null,"status_page":null,"smithery":null,"categories":["testing"],"base_url":null,"auth_type":null,"provenance":{"verified_status":null,"verified_at":null,"last_verified":"2026-06-07","next_check":"2026-09-05","install_tag":null}}