{"id":217,"date":"2026-01-30T09:55:36","date_gmt":"2026-01-30T09:55:36","guid":{"rendered":"https:\/\/productive.io\/engineering\/blog\/"},"modified":"2026-01-30T09:55:36","modified_gmt":"2026-01-30T09:55:36","slug":"learning-ember-easier-way","status":"publish","type":"post","link":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/","title":{"rendered":"Learning Ember: The Easier Way"},"content":{"rendered":"<p   > <a href='https:\/\/productive.io\/engineering\/category\/engineering\/'>Engineering<\/a><\/p> &#8211; <p   > {{minutes}} min read<\/p> <h1   > Learning Ember: The Easier Way<\/h1> <a href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/2024\/02\/T01H5BT2MCY-U03J5GHETPD-abb218b55272-512.png\"  alt=\"\" loading=lazy \/> <\/a> <a href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"> <p   > Davor Tvori\u0107<\/p><\/a> Frontend Engineer at Productive. Excited about anything related to computer science. I spend most of my personal time reading and playing video games.<p   > January 30, 2026<\/p> <a aria-hidden=\"false\"   href=https:\/\/www.facebook.com\/sharer.php?u=https:\/\/productive.io\/engineering\/learning-ember-easier-way target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/twitter.com\/intent\/tweet?text=Learning%20Ember%3A%20The%20Easier%20Way&amp;url=https:\/\/productive.io\/engineering\/learning-ember-easier-way target=_blank rel=\"noopener noreferrer\" > <\/a><a aria-hidden=\"false\"   href=https:\/\/www.linkedin.com\/shareArticle?mini=true&amp;url=https:\/\/productive.io\/engineering\/learning-ember-easier-way target=_blank rel=\"noopener noreferrer\" > <\/a> <img  src=\"https:\/\/productive.io\/engineering\/wp-content\/uploads\/sites\/2\/2022\/11\/BP_ember.png\"  alt=\"\" loading=lazy \/> <p   > A couple of months ago, there was a huge shift in my work-life. <strong>Or so I thought.<\/strong><\/p> <p   > Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive. I was sure I would have needed quite some time to get used to it. Up until a few months back, I didn\u2019t know what was going on in the Ember ecosystem. Although this didn\u2019t scare me, I felt like it would be a hefty challenge because I wasn\u2019t sure what I was getting myself into.<br><br>Turns out, it\u2019s really not that different from the frameworks I already know. All of the usual things you\u2019d expect are there. Things like store management, component slots, dependency injection and much more. And they were a bit easier to use since it all came out of the box!\u00a0<br><br>You don\u2019t have to spend a lot of time deciding between libraries, patterns or technologies because a number of them are already there when you just install Ember. It does have some nuances, pitfalls and you still have to choose between <em>some <\/em>libraries (UI libraries, I\u2019m looking at you), but I haven\u2019t worked with a framework where you didn\u2019t have to worry about anything. After I took all this in, the hefty challenge didn\u2019t seem so bad anymore. Now, this was just a matter of getting used to the framework.<br><br>As I\u2019ve started to learn about Ember on a deeper level, a lot of the concepts were familiar to me. Some were described exactly as you\u2019d expected them, some were named differently and some used a different terminology. <br><br>But since Ember has such a long history (for a Javascript framework, at least), there are some terms I wasn\u2019t aware of. That\u2019s why I started to write down anything that I wanted to learn more about. This included libraries, phrases, patterns and technologies. I was sure this would help me in the long run, so I\u2019m sharing it with anyone who\u2019s just starting out with Ember. <br><br>This is especially helpful if the codebase you\u2019re working on has a couple of years under its belt. It pays off knowing how and why things were done so you don\u2019t accidentally break a functionality when refactoring.<br><br>I\u2019ve talked long enough, so here\u2019s the list!<\/p> <h2   > <strong><strong><strong><strong><strong><strong><strong><strong>Embroider<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong>A modern, full-featured build system<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Some build features it is supposed to provide:<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Reduced build and reload times<\/p> <p   > Tree shaking for Ember related modules, components, etc.<\/p> <p   > Support for arbitrary code splitting<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>You can opt-in to use it, but will be used in the future<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">SPEC<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">The Ember Times answer<\/a><\/p> <h2   > <strong><strong>Glimmer<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>DOM rendering engine<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong>Architected like a virtual machine (uses <\/strong><a href=\"https:\/\/github.com\/glimmerjs\/glimmer-vm\">Glimmer VM<\/a><strong>)<\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Can coexist with classic components<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Builds a \u201clive\u201d DOM from Handlebars templates and cheaply updates after data changes<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/github.com\/glimmerjs\/glimmer.js\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/p> <h2   > <strong><strong>Classic Components<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Older-style components that do not use native classes<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Glimmer components are preferred nowadays<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/ember-learn.github.io\/ember-octane-vs-classic-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/ember-learn.github.io\/ember-octane-vs-classic-cheat-sheet\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">A comparison between classic and Glimmer components<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Glimmer components<\/a><\/p> <h2   > <strong><strong>Handlebars<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>A templating language not specific to Ember<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Used in Ember to define component templates<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>A superset of Mustache templates<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Adds some functionalities to make writing templates easier<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/handlebarsjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/p> <h2   > <strong><strong>Mustache<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Can be used to template anything, not just HTML<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Called logic-less because it has no if statements, else clauses or for loops<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"http:\/\/mustache.github.io\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/p> <h2   > <strong><strong>Broccoli<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>An asset pipeline<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Used for converting ES6 to ES5, SCSS to CSS, etc.<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Supports constant-time rebuilds<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Came as a replacement for<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong> <a href=\"https:\/\/gruntjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Grunt<\/a><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/github.com\/broccolijs\/broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Intro to Broccoli.js<\/a><\/p> <h2   > <strong><strong>\u201cData down, actions up\u201d<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Represents a unidirectional flow of data<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Passing data to a child component or subroute<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>The child component receives the actions that modify the given data<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Helps with the separation of concerns<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Avoids complex data loops<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Not specifically related to Ember, but mentioned in the docs a lot<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-meant-by-the-term-data-down-actions-up\/15311\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-meant-by-the-term-data-down-actions-up\/15311\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">The Ember Times answer<\/a><\/p> <h2   > <strong><strong>Ember Helpers<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Javascript functions that can be called from the template<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>Ember offers some helpers out of the box, like:<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a>Let<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong>Get<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong>Concat<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember guide &#8211; Helper functions<\/a><\/p> <h2   > <strong><strong>Ember Engines<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong>A specific type of Ember addon<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Allows multiple logical applications to be composed into a single application from the user\u2019s perspective<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Requires a host application since they don\u2019t boot themselves<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Helpful when trying to separate the different areas of a single application<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Can be used in the host repository or in a entirely different repository<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/medium.com\/front-end-weekly\/pros-cons-of-ember-engines-e5c61fd2c9a8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Pros &amp; Cons of Ember Engines<\/a><\/p> <h2   > <strong><strong>Ember Test Helpers<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>DOM and other testing helpers that are not automatically included when Ember is installed<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/medium.com\/front-end-weekly\/pros-cons-of-ember-engines-e5c61fd2c9a8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/github.com\/emberjs\/ember-test-helpers\/blob\/master\/API.md\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <h2   > <strong><strong>Ember Fastboot<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Ember SSR<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Does not require codebase changes for it to work<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/medium.com\/front-end-weekly\/pros-cons-of-ember-engines-e5c61fd2c9a8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/ember-fastboot.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/medium.com\/front-end-weekly\/pros-cons-of-ember-engines-e5c61fd2c9a8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/github.com\/ember-fastboot\/ember-cli-fastboot\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <h2   > <strong><strong>Ember Modifiers<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>A way to interact with the DOM in Ember (instead of manual interaction)<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Some modifiers come out of the box, but you can also write custom ones<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><a href=\"https:\/\/github.com\/embroider-build\/embroider\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/embroider-build\/embroider\/blob\/main\/SPEC.md\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/readers-questions-what-is-embroider\/16722\"><\/a><a href=\"https:\/\/glimmerjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/glimmer-components\/\"><\/a><a href=\"https:\/\/handlebarsjs.com\/\"><\/a><a href=\"http:\/\/mustache.github.io\/\"><\/a><a href=\"https:\/\/github.com\/broccolijs\/broccoli\"><\/a><a href=\"https:\/\/embermap.com\/topics\/intro-to-broccoli\/why-ember-uses-broccoli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/ember-engines.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/helper-functions\/\"><\/a><a href=\"https:\/\/medium.com\/front-end-weekly\/pros-cons-of-ember-engines-e5c61fd2c9a8\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><a href=\"https:\/\/guides.emberjs.com\/release\/components\/template-lifecycle-dom-and-modifiers\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember guides &#8211; Template Lifecycle, DOM and modifiers<\/a><\/p> <p   > <a href=\"https:\/\/github.com\/ember-modifier\/ember-modifier\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Github<\/a><\/p> <h2   > <strong><strong>Autotracking<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Ember\u2019s reactivity model<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Decides what to render and when<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <b><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember guides &#8211; Autotracking In-Depth<\/a><\/b><\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/blog\/how-autotracking-works\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">How Autotracking Works<\/a><\/b><\/p> <h2   > <strong><strong>Qunit<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>A testing framework<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>It was used in jQuery, but was extracted as a separate project<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Not specific to Ember, but is used in Ember by default<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/qunitjs.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Web page<\/a><\/b><\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/github.com\/simplabs\/qunit-dom\/blob\/master\/API.md\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">DOM assertions<\/a><\/b><\/p> <h2   > <strong><strong>Ember CLI<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>The official way to create, build, test and serve Ember projects<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Other frameworks have their own versions, as well<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/cli.emberjs.com\/release\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/cli.emberjs.com\/release\/\">The Ember CLI<\/a><\/b><\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/github.com\/ember-cli\/ember-cli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/ember-cli\/ember-cli\">Github<\/a><\/b><\/p> <h2   > <strong><strong>Octane<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>The current edition of Ember released in December 2019<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Introduced a lot of new concepts and newer ways of developing<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Glimmer components<\/p> <p   > Modifiers<\/p> <p   > &#8230;<\/p> <p   > Learn more about it:<\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/ember-cli\/ember-cli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/blog.emberjs.com\/octane-is-here\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Octane introduction post<\/a><\/b><\/p> <p   > <b><strong><a href=\"https:\/\/guides.emberjs.com\/release\/in-depth-topics\/autotracking-in-depth\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/github.com\/ember-cli\/ember-cli\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><\/strong><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/upgrading\/current-edition\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember guides &#8211; Introduction<\/a><\/b><\/p> <h2   > <strong><strong>Polaris<\/strong><\/strong><\/h2> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Ember\u2019s next edition<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Will introduce more new concepts and functionalities<\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/strong><\/p> <p   > Learn more about it:<\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">The road to Ember 4.0<\/a><\/b><\/p> <p   > I\u2019m sure some things might be missing, but this is what was the most puzzling to me. Hopefully, you\u2019ll find some use of all these terms!<br><br>Also, I feel like it would be kind of rude not to mention the resources I used while learning Ember: (yay, more lists)!<\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember guides<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Rock and Roll with Ember.js<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember map<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember Discord server<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><strong>Ember Learn page<\/strong><\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\">Ember conf<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">pzuraq<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\"><\/a><strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/\"><\/a><strong><a href=\"http:\/\/emberconf.com\/\"><\/a><\/strong><a href=\"https:\/\/nullvoxpopuli.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">nullvoxpopuli<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\"><\/a><strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/\"><\/a><strong><a href=\"http:\/\/emberconf.com\/\"><\/a><\/strong><a href=\"https:\/\/blog.emberjs.com\/tag\/newsletter\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">The Ember Times<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\"><\/a><strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/\"><\/a><strong><a href=\"http:\/\/emberconf.com\/\"><\/a><\/strong><a href=\"https:\/\/nullvoxpopuli.com\/\"><\/a><a href=\"https:\/\/blog.emberjs.com\/tag\/newsletter\" target=\"_blank\" rel=\"noreferrer noopener nofollow\"><\/a><strong><strong><a href=\"https:\/\/nullvoxpopuli.com\/\"><\/a><\/strong><\/strong><a href=\"https:\/\/emberobserver.com\/\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Ember Observer<\/a><\/b><\/p> <p   > <b><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><strong><a href=\"https:\/\/blog.emberjs.com\/the-road-to-ember-4-0\"><\/a><\/strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><strong><a href=\"https:\/\/guides.emberjs.com\/release\/\"><\/a><\/strong><a href=\"https:\/\/embermap.com\/\"><\/a><strong><a href=\"https:\/\/balinterdi.com\/rock-and-roll-with-emberjs\/\"><\/a><\/strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><strong><a href=\"https:\/\/embermap.com\/\"><\/a><\/strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><strong><a href=\"https:\/\/discord.com\/invite\/emberjs\"><\/a><\/strong><a href=\"http:\/\/emberconf.com\/\"><\/a><strong><a href=\"https:\/\/emberjs.com\/learn\/\"><\/a><\/strong><a href=\"https:\/\/www.pzuraq.com\/\"><\/a><strong><a href=\"http:\/\/emberconf.com\/\"><\/a><\/strong><a href=\"https:\/\/nullvoxpopuli.com\/\"><\/a><a href=\"https:\/\/blog.emberjs.com\/tag\/newsletter\"><\/a><a href=\"https:\/\/nullvoxpopuli.com\/\"><\/a><a href=\"https:\/\/emberobserver.com\/\"><\/a><a href=\"https:\/\/blog.emberjs.com\/tag\/newsletter\"><\/a><a href=\"https:\/\/discuss.emberjs.com\/t\/is-ember-js-good-framework-for-beginner\/19578\/2\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">Even more resources<\/a><\/b><\/p> <img  src=\"https:\/\/website-assets.productive.io\/uploads\/2024\/02\/T01H5BT2MCY-U03J5GHETPD-abb218b55272-512.png\"  alt=\"\" loading=lazy \/> <p   > Davor Tvori\u0107<\/p> Frontend Engineer at Productive. Excited about anything related to computer science. I spend most of my personal time reading and playing video games.<a   href=\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\" > More From This Author <\/a> <h2   > Related articles<\/h2> <a href=\"https:\/\/productive.io\/engineering\/how-react-ruined-web-development\/\"   > <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_react-1-768x322.png\"  alt=\"\" loading=lazy \/> <p   > Engineering \u2022 Frontend<\/p> <h2   > How React Ruined Web Development<\/h2> <\/a><a href=\"https:\/\/productive.io\/engineering\/pull-requests-the-good-the-bad-and-really-not-that-ugly\/\"   > <img  src=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_pull_requests-768x322.png\"  alt=\"\" loading=lazy \/> <p   > Engineering \u2022 Workflow<\/p> <h2   > Pull Requests\u2014The Good, the Bad and Really, Not That Ugly<\/h2> <\/a> <h2   > Related jobs<\/h2> <a href=\"https:\/\/productive.io\/careers\/open-job-application\/\"  > <p  > Open Job Application<\/p><p  > <\/p> <\/a>","protected":false},"excerpt":{"rendered":"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.","protected":false},"author":36,"featured_media":115,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"es_utils_meta_schema":"","footnotes":""},"categories":[7,12],"tags":[],"class_list":["post-217","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-engineering","category-frontend"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Learning Ember: The Easier Way - Building Productive<\/title>\n<meta name=\"description\" content=\"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Learning Ember: The Easier Way\" \/>\n<meta property=\"og:description\" content=\"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\" \/>\n<meta property=\"og:site_name\" content=\"Building Productive\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-30T09:55:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1900\" \/>\n\t<meta property=\"og:image:height\" content=\"796\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Davor Tvori\u0107\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Davor Tvori\u0107\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\"},\"author\":{\"name\":\"Davor Tvori\u0107\",\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\"},\"headline\":\"Learning Ember: The Easier Way\",\"datePublished\":\"2026-01-30T09:55:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\"},\"wordCount\":5,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png\",\"articleSection\":[\"Engineering\",\"Frontend\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\",\"url\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\",\"name\":\"Learning Ember: The Easier Way - Building Productive\",\"isPartOf\":{\"@id\":\"https:\/\/productive.io\/engineering\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png\",\"datePublished\":\"2026-01-30T09:55:36+00:00\",\"author\":{\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\"},\"description\":\"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.\",\"breadcrumb\":{\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage\",\"url\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png\",\"contentUrl\":\"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png\",\"width\":1900,\"height\":796},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/productive.io\/engineering\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Learning Ember: The Easier Way\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/productive.io\/engineering\/#website\",\"url\":\"https:\/\/productive.io\/engineering\/\",\"name\":\"Building Productive\",\"description\":\"Just another Productive Sites site\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/productive.io\/engineering\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7\",\"name\":\"Davor Tvori\u0107\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g\",\"caption\":\"Davor Tvori\u0107\"},\"url\":\"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Learning Ember: The Easier Way - Building Productive","description":"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/","og_locale":"en_US","og_type":"article","og_title":"Learning Ember: The Easier Way","og_description":"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.","og_url":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/","og_site_name":"Building Productive","article_published_time":"2026-01-30T09:55:36+00:00","og_image":[{"width":1900,"height":796,"url":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","type":"image\/png"}],"author":"Davor Tvori\u0107","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Davor Tvori\u0107"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#article","isPartOf":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/"},"author":{"name":"Davor Tvori\u0107","@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7"},"headline":"Learning Ember: The Easier Way","datePublished":"2026-01-30T09:55:36+00:00","mainEntityOfPage":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/"},"wordCount":5,"commentCount":0,"image":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage"},"thumbnailUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","articleSection":["Engineering","Frontend"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/","url":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/","name":"Learning Ember: The Easier Way - Building Productive","isPartOf":{"@id":"https:\/\/productive.io\/engineering\/#website"},"primaryImageOfPage":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage"},"image":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage"},"thumbnailUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","datePublished":"2026-01-30T09:55:36+00:00","author":{"@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7"},"description":"Instead of working in Vue or React, I had to learn Ember for my new frontend position at Productive.","breadcrumb":{"@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/productive.io\/engineering\/learning-ember-easier-way\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#primaryimage","url":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","contentUrl":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","width":1900,"height":796},{"@type":"BreadcrumbList","@id":"https:\/\/productive.io\/engineering\/learning-ember-easier-way\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/productive.io\/engineering\/"},{"@type":"ListItem","position":2,"name":"Learning Ember: The Easier Way"}]},{"@type":"WebSite","@id":"https:\/\/productive.io\/engineering\/#website","url":"https:\/\/productive.io\/engineering\/","name":"Building Productive","description":"Just another Productive Sites site","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/productive.io\/engineering\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/productive.io\/engineering\/#\/schema\/person\/22695e91a067ef9af20e9add38713fe7","name":"Davor Tvori\u0107","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f7512ce4cf3abb022d54c7c693b492a2bb88c67aca49cbb2e1fddbb86df0dc5e?s=96&d=mm&r=g","caption":"Davor Tvori\u0107"},"url":"https:\/\/productive.io\/engineering\/author\/davor-tvoric\/"}]}},"featured_image":"https:\/\/website-assets.productive.io\/uploads\/sites\/2\/2022\/11\/BP_ember.png","category":"Engineering","_links":{"self":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/comments?post=217"}],"version-history":[{"count":10,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/217\/revisions"}],"predecessor-version":[{"id":991,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/posts\/217\/revisions\/991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/media\/115"}],"wp:attachment":[{"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/media?parent=217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/categories?post=217"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/productive.io\/engineering\/wp-json\/wp\/v2\/tags?post=217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}