Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ember 2020 Roadmap RFC #519

Merged
merged 8 commits into from
May 1, 2020
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions text/000-2018-2019-roadmap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
- Start Date: 2019-07-29
- Relevant Team(s): All teams
- RFC PR: (after opening the RFC PR, update this with a link to it and update the file name)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reminder to add the link here! 🙏

locks marked this conversation as resolved.
Show resolved Hide resolved
- Tracking:

# Ember 2019-2020 Roadmap

## Summary

This RFC sets the Ember 2019-2020 Roadmap. This year, our two priorities are:

- Further reducing the size and conceptual complexity of the framework.
- Accelerating ecosystem growth and improving ease of adoption.

## Motivation

This document is a distillation of multiple sources:

1. The 2019 Community Survey.
2. Community #EmberJS2019 blog posts, authored in response to our call for posts.
3. Discussion on https://discuss.emberjs.com, Discord, Twitter, and other public venues.
4. Deliberations among the Ember core teams.

The goal of the RFC is to align the Ember community around a set of shared, achievable goals that balance the needs of existing users with the need to grow and support new users.

## Detailed design

Now that all of Ember Octane’s features are code complete, it’s time to turn our attention to what we’ll focus on over the next year.

In this roadmap, our goal is to build on last year’s momentum and capitalize on the cutting-edge foundation we laid with Ember Octane.

- **Continue simplifying Ember.** With many new APIs introduced in Octane, our focus this year should be removing features that feel out of date. The overall API surface area of Ember will shrink substantially, making it smaller, faster, and more approachable to new learners.
- **Modernize our build system.** This year, we will put the finishing touches on Embroider and make it the default build pipeline for new applications, unlocking optimizations like tree-shaking and route-based code splitting.
- **Better a11y by default**. We will fix the router to work out-of-the-box with assistive technologies, and give developers more tools for understanding and improving the accessibility of their Ember applications.
- **Optimize for growth.** A feeling of momentum is critical for keeping the Ember community healthy. We will double down on evangelizing Ember Octane and making Ember approachable to a new generation of web developers.

### Continue simplifying Ember

Ember Octane put us on a strong footing, modernizing the most foundational APIs in Ember. We will build on that foundation to dramatically simplify the framework, **reducing the overall number of concepts** so that Ember is easier to learn, use, and debug.

We will **extract or deprecate functionality that is no longer widely needed**. With `get()` and `set()` mostly gone, so goes the need for many Ember-specific utility functions. Some utilities can be moved into optional packages for those who need them, while others may be better replaced by libraries like [Lodash](https://lodash.com/).

Candidates for deprecation or extraction include:

- **Object utilities** such as `isBlank`, `compare`, `trySet`, etc.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linking to @elwayman02's thoughts here: #516

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks! I intend to follow this up with an RFC once we've had a bit more discussion to make sure I'm not missing anything.

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Linking as well to @snewcomer's older, similar proposal: #334

- **String utilities** such as `camelize` and `dasherize`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

- **Computed property macros** such as `alias`, `mapBy`, `notEmpty`, etc.
- **Legacy object model features** such as observers, `setProperties`, `incrementProperty`, etc.

Perhaps the longest-awaited simplification is **eliminating controllers** from the Ember programming model, which we will do this year. This will require us to find a new home for query parameters.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wondering if dynamic query params is something that could be explored as part of these changes!

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Dynamic route segments also! e.g. handling both foo.com/posts/:seo/:id and foo.com/posts/:id with the same route handler.


Building on the simplicity of Glimmer components, we’ll also implement **template imports**, which make it explicit which helper or component is being invoked, and **named blocks**, which make it even easier to build ergonomic, reusable components.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where they exist, can we link to the RFCs for features like template imports throughout this document? I imagine that people will find it very useful to know what has already been planned, particularly if they are not already aware what these terms mean in a practical sense. That will help people reviewing the RFC better understand how the planned direction will manifest!


Lastly, we’ll **simplify and modernize Ember Data,** including:

- **Easier on-ramp for new users** by eliminating the need for adapters and serializers for simple use cases based on `fetch()`.
- **Increased velocity and stability** through improved, modularized internals.
- **More flexibility** when overriding built-in behavior, by exposing low-level primitives as public API.

### Modernize our build system

Last year, we started work on Embroider, an overhaul of the Ember CLI compilation pipeline. This year, **we will put the finishing touches on Embroider** and start migrating the Ember ecosystem to this modernized build.

By using standard JavaScript modules, Embroider integrates with popular packagers like [webpack](https://webpack.js.org/) and [r](https://rollupjs.org/guide/en/)[ollup](https://rollupjs.org/guide/en/), allowing us to **ship Ember itself as npm packages in the** `**@ember**` **namespace**.
locks marked this conversation as resolved.
Show resolved Hide resolved

These packagers also unlock build time optimizations like **tree-shaking,** and allow Embroider to produce smaller payloads with **route-based code-splitting.** Most importantly, they break down any remaining barriers between Ember and the rest of the JavaScript ecosystem.

### Better a11y by default

Ember applications should be accessible to everyone. Unfortunately, even seemingly small mistakes can make your app difficult or impossible to use with assistive technology like screen readers. We will do more to **improve the out-of-the-box accessibility of Ember applications**, and provide tools for helping applications stay accessible as they grow.

- **Fix router accessibility** so that page navigations are correctly announced by screen readers, without needing a third-party addon.
- Include **more a11y lint rules** to catch common accessibility mistakes.
- **Document accessibility best practices** and treat accessibility as a first-class concern, as we do with automated testing.
- Incorporate **accessibility checks** into the built-in test helpers.
- **Engage with standards bodies** to help fill the gaps in existing web accessibility APIs.

### Optimize for growth

There are more people building web applications than ever, and Ember must adapt to their changing needs and expectations in order to stay relevant.

This year, **we’ll share with the world how Ember Octane is modern, productive, and _fun_.** Through blog posts, videos, social media, meetups, and conferences, we will share our knowledge and experiences with the wider JavaScript community and encourage them to give Octane a try.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This, to me, is one of the most important pieces of this roadmap, and I hope people do not gloss over it. I can't remember the last time I attended a conference/meetup that was not specifically focused on Ember and saw someone giving a talk about Ember. We need to make a concerted effort at outreach, and I hope that someone will be writing a follow-up RFC detailing exactly how we will accomplish this rather than simply jumping straight from this roadmap into "executing" at this broad-stroke level.


It’s critical that, when they do, Ember Octane offers a polished experience. We’ll continue improving guides and API documentation based on community feedback. As a community, we need to prioritize bugs that seem small but that make a bad first impression for people trying Ember for the first time.

Lastly, people often tell us that adopting Ember feels like an all-or-nothing decision. We need a way to give developers a preview of Ember’s productivity, even if they’re not ready to jump in feet first.

This year, **we will bring Glimmer.js components to everyone**, giving the wider JavaScript community a taste of the fun of Ember Octane (even if it happens to be in a React app using webpack!).