diff --git a/keyserver/src/responders/website-responders.js b/keyserver/src/responders/website-responders.js
--- a/keyserver/src/responders/website-responders.js
+++ b/keyserver/src/responders/website-responders.js
@@ -310,6 +310,7 @@
     navInfo: navInfoPromise,
     deviceID: null,
     currentUserInfo: ((currentUserInfoPromise: any): Promise<CurrentUserInfo>),
+    draftStore: { drafts: {} },
     sessionID: sessionIDPromise,
     entryStore: entryStorePromise,
     threadStore: threadStorePromise,
diff --git a/lib/types/redux-types.js b/lib/types/redux-types.js
--- a/lib/types/redux-types.js
+++ b/lib/types/redux-types.js
@@ -13,6 +13,7 @@
   QueueActivityUpdatesPayload,
   SetThreadUnreadStatusPayload,
 } from './activity-types';
+import type { DraftStore } from './draft-types';
 import type { EnabledApps, SupportedApps } from './enabled-apps';
 import type {
   RawEntryInfo,
@@ -80,6 +81,7 @@
 export type BaseAppState<NavInfo: BaseNavInfo> = {
   navInfo: NavInfo,
   currentUserInfo: ?CurrentUserInfo,
+  draftStore: DraftStore,
   entryStore: EntryStore,
   threadStore: ThreadStore,
   userStore: UserStore,
@@ -537,12 +539,23 @@
       +loadingInfo: LoadingInfo,
     }
   | {
-      +type: 'SAVE_DRAFT',
+      +type: 'UPDATE_DRAFT',
       +payload: {
         +key: string,
-        +draft: string,
+        +text: string,
       },
     }
+  | {
+      +type: 'MOVE_DRAFT',
+      +payload: {
+        +oldKey: string,
+        +newKey: string,
+      },
+    }
+  | {
+      +type: 'SET_DRAFT_STORE_DRAFTS',
+      +payload: $ReadOnlyArray<{ +key: string, +text: string }>,
+    }
   | {
       +type: 'UPDATE_ACTIVITY_STARTED',
       +payload?: void,
diff --git a/native/redux/redux-setup.js b/native/redux/redux-setup.js
--- a/native/redux/redux-setup.js
+++ b/native/redux/redux-setup.js
@@ -78,6 +78,7 @@
 const defaultState = ({
   navInfo: defaultNavInfo,
   currentUserInfo: null,
+  draftStore: { drafts: {} },
   entryStore: {
     entryInfos: {},
     daysToEntries: {},
diff --git a/native/redux/state-types.js b/native/redux/state-types.js
--- a/native/redux/state-types.js
+++ b/native/redux/state-types.js
@@ -3,6 +3,7 @@
 import type { Orientations } from 'react-native-orientation-locker';
 import type { PersistState } from 'redux-persist/src/types';
 
+import type { DraftStore } from 'lib/types/draft-types';
 import type { EnabledApps } from 'lib/types/enabled-apps';
 import type { EntryStore } from 'lib/types/entry-types';
 import type { CalendarFilter } from 'lib/types/filter-types';
@@ -24,6 +25,7 @@
 export type AppState = {
   navInfo: NavInfo,
   currentUserInfo: ?CurrentUserInfo,
+  draftStore: DraftStore,
   entryStore: EntryStore,
   threadStore: ThreadStore,
   userStore: UserStore,
diff --git a/web/redux/redux-setup.js b/web/redux/redux-setup.js
--- a/web/redux/redux-setup.js
+++ b/web/redux/redux-setup.js
@@ -12,6 +12,7 @@
 import { isLoggedIn } from 'lib/selectors/user-selectors';
 import { invalidSessionDowngrade } from 'lib/shared/account-utils';
 import type { Shape } from 'lib/types/core';
+import type { DraftStore } from 'lib/types/draft-types';
 import type { EnabledApps } from 'lib/types/enabled-apps';
 import type { EntryStore } from 'lib/types/entry-types';
 import type { CalendarFilter } from 'lib/types/filter-types';
@@ -42,6 +43,7 @@
   navInfo: NavInfo,
   deviceID: ?string,
   currentUserInfo: ?CurrentUserInfo,
+  draftStore: DraftStore,
   sessionID: ?string,
   entryStore: EntryStore,
   threadStore: ThreadStore,