Differences between Ember app, addon and child engine

We can have different types of Ember projects

  1. App (or host app)
  2. Addon
  3. Engine (or child engine)

I wanted to understand the differences between each of them in terms of;

  1. Criteria to decide which one to use (or simply the use cases for each of them)
  2. What is the difference in terms of their output (i.e. How the dist looks for each of them, vendor.js V/S engine.js, etc)

Any other significant difference which you would want to highlight would be really helpful.

Make an Ember app when you want to put an application on the web.

Make an addon when you want a library that is easy to use within multiple Ember apps.

Make an engine when you have multiple teams in a large organization all trying to work on a single Ember app, and you need added isolation between them to keep them out of each other’s way. An engine is a special kind of addon.

There’s a fourth thing you could add to this list, which is “dummy app” (an unfortunate name, it would be better called something like “test-harness-app”). When you’re developing an addon, you need some Ember app to test it within, and that is what the addon’s dummy app is for. Some addons also use the dummy app to hold documentation or demos.

Moving on to dist output: only apps really have any. It’s always an app that gets built and deployed. It’s true that if you add an engine to an app, it can add some extra files to dist, because engines can be lazily loaded.

Thanks a lot. You have provided a very nice explanation for the use cases where app/addon/engines should be used…

Only thing is I’ll wait for someone to provide me more details on the dist output differences in each case, as I think there are quite some differences specifically between an engine and a non-engine kind of app…