diff --git a/text/0000-contextFor.md b/text/0000-contextFor.md
new file mode 100644
index 00000000..323358b4
--- /dev/null
+++ b/text/0000-contextFor.md
@@ -0,0 +1,104 @@
+- Start Date: 2020-11-22
+- RFC PR: (leave this empty)
+- React Issue: (leave this empty)
+
+# Summary
+
+Introduce an alternative to `createContext` that accepts an explicit unique
+identifier instead of allocating an object with a new identity. This would
+enable explicit sharing of context across module loading boundaries, for
+example when doing server-side rendering (SSR) with code splitting and multiple
+entrypoints.
+
+By analogy, a `contextFor(uniqueKey, defaultValue)` function would behave like
+[Symbol.for][1] in that subsequent calls with the same argument return the same
+result. Unlike JavaScript symbols, however, this result should be useful for
+distributed execution environments. In particular, a provider and consumer from
+independent compilation units should be compatible if they were constructed
+with the same unique identity.
+
+
+# Basic example
+
+```javascript
+// The first argument can be any string we can arrange to be unique across
+// packages. For example, here we choose a URL from a domain we control.
+const MyContext = React.contextFor('example.com/my-context', defaultValue);
+```
+
+
+# Motivation
+
+Currently, `React.createContext` allocates a new object and uses the identity
+of that object to uniquely identify context providers from the point of context
+consumption. This works great within a single execution environment, such as
+that of a web browser. However, when server-side rendering (SSR) is involved,
+things can get much more complex. For example, Next.js does some truly hacky
+manipulation of the Webpack module instantiation configuration to address these
+kind of "singleton" usages of static state. here are some associated issues:
+
+- https://github.com/vercel/next.js/issues/18917
+- https://github.com/vercel/next.js/blob/f637c8a2ccdb9a3ac695a0c303bd34f14655633d/packages/next/build/webpack/plugins/nextjs-ssr-module-cache.ts
+
+This is a well known issue with static state and distributed execution
+environments. As is the fix with any implicit identity in a distributed
+environment, introducing an explicit identifier can untangle the problem.
+
+# Detailed design
+
+```javascript
+const myContextKey = 'example.com/my-context';
+
+// Besides the explicit context key, this behaves like `createContext`.
+const MyContext = React.contextFor(myContextKey, defaultValue);
+
+// Calling `contextFor` again returns an object that is `contextEqual`.
+const MyContext2 = React.contextFor(myContextKey, defaultValue);
+assert(React.contextEqual(MyContext, MyContext2));
+
+// These two `Context` instances are not `===` but are compatible:
+const Outer = ({ children }) => (
+