diff --git a/text/0754-default-managers.md b/text/0754-default-managers.md
new file mode 100644
index 0000000000..6a807cb4f0
--- /dev/null
+++ b/text/0754-default-managers.md
@@ -0,0 +1,455 @@
+---
+Stage: Accepted
+Start Date: 2021-05-17
+Release Date: Unreleased
+Release Versions:
+ ember-source: vX.Y.Z
+ ember-data: vX.Y.Z
+Relevant Team(s): Ember.js, Learning
+RFC PR: https://github.com/emberjs/rfcs/pull/754
+---
+
+# Default Managers
+
+## Summary
+
+Anything that can be in a template has its lifecycle managed by the manager pattern.
+Today, we have known managers for `@glimmer/component`, `@ember/helper`, etc.
+But what happens when the VM encounters an object for which there is no manager?,
+such as a plain function? This RFC explores and proposes a default behavior for
+those unknown scenarios.
+
+## Motivation
+
+The addon, [ember-could-get-used-to-this](https://github.com/pzuraq/ember-could-get-used-to-this)
+demonstrated that it's possible to use plain functions for helpers and modifiers.
+And since Ember 3.25, helpers can be invoked directly from value references, this opened
+a whole new world of ergonomics improvements where a dev could define a function in a
+component class and use that function **as** a helper, thanks to
+ember-could-get-used-to-this implementing a Helper Manager that _knew what to do with plain functions.
+
+This has the impact of greatly reducing helper burden for apps and addon devs, in that,
+folks no longer need to jump over to the app/addon helpers directory to create a helper
+"just to do this one simple thing". It's all now `{{this.myHelper}}` or `{{this.myModifier}}`.
+
+This has the added benefit of, with template strict mode, using plain functions in module-scope
+for helpers and modifiers.
+
+For Example:
+
+
+
+```jsx
+const double = num => num * 2;
+const resizable = element => { /* ... */ };
+
+
+ {{double 2}}
+
+
+```
+_Note: `` is experimental syntax, and should not be be the focus of this example_
+
+Another aspect of which is exciting is that it becomes easier, in tests to grab
+the output of yielding components:
+
+```jsx
+test('...', async function (assert) {
+ let output = [];
+ const capture = (...args) => output = args;
+
+ await render(hbs`
+
+ {{capture yielded info and things}}
+
+ `);
+
+ assert.equal(output[0], /* value of yielded */ );
+ assert.equal(output[1], /* value of info */ );
+ // ...
+})
+```
+
+## Detailed design
+
+Each implemented meta-manager needs a default manager specified. The logic for choosing when to use
+a default manager is, at a high-level:
+
+```
+if (noExistingManagerFor(X)) {
+ return defaultManager;
+}
+```
+Where X is one of a Helper, Modifier, or Component
+
+_A Default Manager is not something that can be chosen by the user, but is baked in to the framework
+as a default so that a user doesn't have to build something to use a non-framework-specific variant
+of the three constructs: Helpers, Modifiers, and Components._
+
+### Helpers
+
+Borrowing most of the implementation from ember-could-get-used-to-this with one change: the signature
+of the function may receive an options-like object as the last parameter if named arguments are specified.
+This aligns with the _syntax_ of helper invocation where named arguments may not appear before the last
+positional argument.
+
+#### Example with mixed params
+
+```hbs
+{{this.calculate 1 2 op="add"}}
+```
+would be an example invocation of a function with the following signature
+expressed as TypeScript for clarity:
+```ts
+type Options = { op: 'add' | 'subtract' }
+class A {
+ calculate(first: number, second: number, options: Options) {
+ // ...
+ }
+}
+```
+for unknown amounts of parameters, the [typescript can be awkward](https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgMJwDYIK4bpAeQAcxgB7EAZ2QG8AoZR5MogLmQHI4ATbj5AD6dK2AEYcA3HQC+dMAE8iKdFlz4IAQSgBzagF5kAbQB0pkNgC2o6IYC6AGjSYceQiXJVbUujGwgEpBTICM5qkAAUpsZwOpTsKi7qWroAlLQMyBgQYMzuFPrIMbrGRCzhaXDUCWEQxIFUUoxZOeYWBUXUlcit1lB23owI+WRZxhhk2uE0ufWUjq3U0ilSsj5+AR7Boa4QAEyRph3x20mxafRN2UYss45RUBAAbtCUENy2yAYdxg-PUK-lRqZK4LT7IX4vN4-J6QwF0DJDKgjCBjCZTGYeObdSyLZYyeHwoA),
+
+but there is a [TC39 proposal: proposal-deiter](https://github.com/tc39/proposal-deiter) that could make
+destructuring simpler and inlined to
+```ts
+ calculate(...numbers: number[], options: Options) {
+```
+
+#### Example with only positional parameters
+
+```hbs
+{{this.add 1 2 3 4}}
+```
+Because there are no named arguments passed in, the method signature can be simple:
+```js
+class A {
+ add(...numbers: number[]) {
+ // ...
+ }
+}
+```
+
+The implementation for the this function-handling helper-manager could look like this:
+```ts
+import {
+ setHelperManager,
+ capabilities as helperCapabilities,
+} from '@ember/helper';
+import { assert } from '@ember/debug';
+
+class FunctionHelperManager {
+ capabilities = helperCapabilities('3.23', {
+ hasValue: true,
+ });
+
+ createHelper(fn, args) {
+ return { fn, args };
+ }
+
+ getValue({ fn, args }) {
+ let argsForFn = args.positional;
+
+ if (Object.keys(args.named).length > 0) {
+ argsForFn.push(args.named);
+ }
+
+ return fn(...argsForFn);
+ }
+
+ getDebugName(fn) {
+ return fn.name || '(anonymous function)';
+ }
+}
+
+const DEFAULT_HELPER_MANAGER = new FunctionHelperManager();
+
+// side-effect -- this file needs to be imported for the helper manager to be installed
+setHelperManager(() => DEFAULT_HELPER_MANAGER, Function.prototype);
+```
+
+### Modifiers
+
+Modifiers' default should be similar to the Helpers' default, in that they would be function-based.
+The primary difference is that the first argument to a function-modifier is the attached `Element`,
+and the function-modifier _may_ return a destruction function.
+
+Example:
+```js
+class MyComponent {
+ wiggle(element, first, second, options) {
+ const doAnimation = { /* ... */ }
+
+ element.addEventListener('touchstart', doAnimation);
+
+ return () => element.removeEventListener('touchstart', doAnimation);
+ }
+}
+```
+```hbs
+