diff --git a/keyserver/.flowconfig b/keyserver/.flowconfig
--- a/keyserver/.flowconfig
+++ b/keyserver/.flowconfig
@@ -31,7 +31,6 @@
 deprecated-type=warn
 unsafe-getters-setters=warn
 unnecessary-invariant=warn
-signature-verification-failure=warn
 
 [strict]
 deprecated-type
diff --git a/keyserver/package.json b/keyserver/package.json
--- a/keyserver/package.json
+++ b/keyserver/package.json
@@ -33,7 +33,7 @@
     "babel-jest": "^26.6.3",
     "chokidar-cli": "^2.1.0",
     "concurrently": "^5.3.0",
-    "flow-bin": "^0.158.0",
+    "flow-bin": "^0.182.0",
     "flow-typed": "^3.2.1",
     "jest": "^26.6.3",
     "nodemon": "^2.0.4"
diff --git a/keyserver/src/database/database.js b/keyserver/src/database/database.js
--- a/keyserver/src/database/database.js
+++ b/keyserver/src/database/database.js
@@ -99,11 +99,11 @@
 }
 
 // We use this fake result for dry runs
-function FakeSQLResult() {
-  this.insertId = -1;
-}
-FakeSQLResult.prototype = Array.prototype;
-const fakeResult: QueryResults = (new FakeSQLResult(): any);
+const fakeResult: QueryResults = (() => {
+  const result: any = [];
+  result.insertId = -1;
+  return result;
+})();
 
 const MYSQL_DEADLOCK_ERROR_CODE = 1213;
 
diff --git a/keyserver/src/updaters/thread-permission-updaters.js b/keyserver/src/updaters/thread-permission-updaters.js
--- a/keyserver/src/updaters/thread-permission-updaters.js
+++ b/keyserver/src/updaters/thread-permission-updaters.js
@@ -977,6 +977,8 @@
   }
 }
 
+const emptyCommitMembershipChangesetConfig = Object.freeze({});
+
 // Specify non-empty changedThreadIDs to force updates to be generated for those
 // threads, presumably for reasons not covered in the changeset. calendarQuery
 // only needs to be specified if a JOIN_THREAD update will be generated for the
@@ -996,7 +998,7 @@
     +changedThreadIDs?: Set<string>,
     +calendarQuery?: ?CalendarQuery,
     +updatesForCurrentSession?: UpdatesForCurrentSession,
-  } = {},
+  } = emptyCommitMembershipChangesetConfig,
 ): Promise<ChangesetCommitResult> {
   if (!viewer.loggedIn) {
     throw new ServerError('not_logged_in');
@@ -1130,6 +1132,8 @@
   };
 }
 
+const emptyGetChangesetCommitResultConfig = Object.freeze({});
+
 // When the user tries to create a new thread, it's possible for the client to
 // fail the creation even if a row gets added to the threads table. This may
 // occur due to a timeout (on either the client or server side), or due to some
@@ -1147,7 +1151,7 @@
   }: {
     +calendarQuery?: ?CalendarQuery,
     +updatesForCurrentSession?: UpdatesForCurrentSession,
-  } = {},
+  } = emptyGetChangesetCommitResultConfig,
 ): Promise<CreateUpdatesResult> {
   for (const update of otherUpdates) {
     if (
diff --git a/landing/.flowconfig b/landing/.flowconfig
--- a/landing/.flowconfig
+++ b/landing/.flowconfig
@@ -20,7 +20,6 @@
 deprecated-type=warn
 unsafe-getters-setters=warn
 unnecessary-invariant=warn
-signature-verification-failure=warn
 
 [strict]
 deprecated-type
diff --git a/landing/package.json b/landing/package.json
--- a/landing/package.json
+++ b/landing/package.json
@@ -27,7 +27,7 @@
     "clean-webpack-plugin": "^3.0.0",
     "concurrently": "^5.3.0",
     "css-loader": "^4.3.0",
-    "flow-bin": "^0.158.0",
+    "flow-bin": "^0.182.0",
     "flow-typed": "^3.2.1",
     "mini-css-extract-plugin": "^0.11.2",
     "optimize-css-assets-webpack-plugin": "^5.0.3",
diff --git a/lib/.flowconfig b/lib/.flowconfig
--- a/lib/.flowconfig
+++ b/lib/.flowconfig
@@ -18,7 +18,6 @@
 deprecated-type=warn
 unsafe-getters-setters=warn
 unnecessary-invariant=warn
-signature-verification-failure=warn
 
 [strict]
 deprecated-type
diff --git a/lib/package.json b/lib/package.json
--- a/lib/package.json
+++ b/lib/package.json
@@ -19,7 +19,7 @@
     "@babel/preset-flow": "^7.13.13",
     "@babel/preset-react": "^7.13.13",
     "babel-jest": "^26.6.3",
-    "flow-bin": "^0.158.0",
+    "flow-bin": "^0.182.0",
     "flow-typed": "^3.2.1"
   },
   "dependencies": {
diff --git a/lib/shared/notif-utils.js b/lib/shared/notif-utils.js
--- a/lib/shared/notif-utils.js
+++ b/lib/shared/notif-utils.js
@@ -22,14 +22,14 @@
   threadInfo: ThreadInfo,
 ): NotifTexts {
   const fullNotifTexts = fullNotifTextsForMessageInfo(messageInfos, threadInfo);
-  return {
-    merged: trimText(fullNotifTexts.merged, 300),
-    body: trimText(fullNotifTexts.body, 300),
-    title: trimText(fullNotifTexts.title, 100),
-    ...(fullNotifTexts.prefix && {
-      prefix: trimText(fullNotifTexts.prefix, 50),
-    }),
-  };
+  const merged = trimText(fullNotifTexts.merged, 300);
+  const body = trimText(fullNotifTexts.body, 300);
+  const title = trimText(fullNotifTexts.title, 100);
+  if (!fullNotifTexts.prefix) {
+    return { merged, body, title };
+  }
+  const prefix = trimText(fullNotifTexts.prefix, 50);
+  return { merged, body, title, prefix };
 }
 
 const notifTextForSubthreadCreation = (
diff --git a/native/.flowconfig b/native/.flowconfig
--- a/native/.flowconfig
+++ b/native/.flowconfig
@@ -5,10 +5,13 @@
 .*/node_modules/react-native-fast-image/src/index.js.flow
 .*/node_modules/react-native-fs/FS.common.js
 .*/node_modules/react-native-gesture-handler/Swipeable.js
+.*/fbjs/lib/keyMirrorRecursive.js.flow
 
 ; Flow doesn't support platforms
 .*/Libraries/Utilities/LoadingView.js
 
+.*/node_modules/resolve/test/resolver/malformed_package_json/package\.json$
+
 .*/comm/web/.*
 .*/comm/keyserver/.*
 
@@ -60,7 +63,6 @@
 deprecated-type=warn
 unsafe-getters-setters=warn
 unnecessary-invariant=warn
-signature-verification-failure=warn
 
 [strict]
 deprecated-type
@@ -72,4 +74,4 @@
 untyped-type-import
 
 [version]
-^0.158.0
+^0.182.0
diff --git a/native/calendar/calendar.react.js b/native/calendar/calendar.react.js
--- a/native/calendar/calendar.react.js
+++ b/native/calendar/calendar.react.js
@@ -157,6 +157,7 @@
 class Calendar extends React.PureComponent<Props, State> {
   flatList: ?FlatList<CalendarItemWithHeight> = null;
   currentState: ?string = NativeAppState.currentState;
+  appStateListener: ?EventSubscription;
   lastForegrounded = 0;
   lastCalendarReset = 0;
   currentScrollPosition: ?number = null;
@@ -196,7 +197,10 @@
   }
 
   componentDidMount() {
-    NativeAppState.addEventListener('change', this.handleAppStateChange);
+    this.appStateListener = NativeAppState.addEventListener(
+      'change',
+      this.handleAppStateChange,
+    );
     this.keyboardShowListener = addKeyboardShowListener(this.keyboardShow);
     this.keyboardDismissListener = addKeyboardDismissListener(
       this.keyboardDismiss,
@@ -205,7 +209,10 @@
   }
 
   componentWillUnmount() {
-    NativeAppState.removeEventListener('change', this.handleAppStateChange);
+    if (this.appStateListener) {
+      this.appStateListener.remove();
+      this.appStateListener = null;
+    }
     if (this.keyboardShowListener) {
       removeKeyboardListener(this.keyboardShowListener);
       this.keyboardShowListener = null;
diff --git a/native/calendar/entry.react.js b/native/calendar/entry.react.js
--- a/native/calendar/entry.react.js
+++ b/native/calendar/entry.react.js
@@ -612,7 +612,7 @@
       }
       this.currentlySaving = null;
       if (e instanceof ServerError && e.message === 'concurrent_modification') {
-        const revertedText = e.payload.db;
+        const revertedText = e.payload?.db;
         const onRefresh = () => {
           this.guardedSetState({
             loadingStatus: 'inactive',
diff --git a/native/flow-typed/npm/@react-navigation/native_v6.x.x.js b/native/flow-typed/npm/@react-navigation/native_v6.x.x.js
--- a/native/flow-typed/npm/@react-navigation/native_v6.x.x.js
+++ b/native/flow-typed/npm/@react-navigation/native_v6.x.x.js
@@ -2323,8 +2323,8 @@
    * Themes
    */
 
-  declare export var DefaultTheme: Theme & { +dark: false, ... };
-  declare export var DarkTheme: Theme & { +dark: true, ... };
+  declare export var DefaultTheme: {| ...Theme, +dark: false |};
+  declare export var DarkTheme: {| ...Theme, +dark: true |};
   declare export function useTheme(): Theme;
   declare export var ThemeProvider: React$ComponentType<{|
     +value: Theme,
diff --git a/native/flow-typed/npm/react-native-reanimated_v2.x.x.js b/native/flow-typed/npm/react-native-reanimated_v2.x.x.js
--- a/native/flow-typed/npm/react-native-reanimated_v2.x.x.js
+++ b/native/flow-typed/npm/react-native-reanimated_v2.x.x.js
@@ -35,71 +35,71 @@
     +[key: string]: any,
   |};
   
-  declare class Node { }
+  declare class NodeImpl { }
   
-  declare class Value extends Node {
+  declare class ValueImpl extends NodeImpl {
     constructor(val: number): this;
     setValue(num: number): void;
   }
 
-  declare class Clock extends Node { }
+  declare class ClockImpl extends NodeImpl { }
 
-  declare class View extends React$Component<{ ... }> { }
-  declare class Text extends React$Component<{ ... }> { }
-  declare class Image extends React$Component<{ ... }> { }
-  declare class Code extends React$Component<{
-    +exec: Node,
+  declare class ViewImpl extends React$Component<{ ... }> { }
+  declare class TextImpl extends React$Component<{ ... }> { }
+  declare class ImageImpl extends React$Component<{ ... }> { }
+  declare class CodeImpl extends React$Component<{
+    +exec: NodeImpl,
     ...
   }> { }
 
-  declare type NodeOrNum = Node | number;
+  declare type NodeOrNum = NodeImpl | number;
   declare export type NodeParam = NodeOrNum | $ReadOnlyArray<?NodeParam>;
 
-  declare type NodeOrArrayOfNodes = Node | $ReadOnlyArray<?NodeOrArrayOfNodes>;
+  declare type NodeOrArrayOfNodes = NodeImpl | $ReadOnlyArray<?NodeOrArrayOfNodes>;
   declare export type Block = (
     nodes: $ReadOnlyArray<?NodeOrArrayOfNodes>,
-  ) => Node;
+  ) => NodeImpl;
 
-  declare export type Set = (node: Value, val: NodeParam) => Node;
+  declare export type Set = (node: ValueImpl, val: NodeParam) => NodeImpl;
 
   declare type ToNumber = (val: mixed) => number;
-  declare export type Call = <N: $ReadOnlyArray<Node>>(
+  declare export type Call = <N: $ReadOnlyArray<NodeImpl>>(
     nodes: N,
     callback: (vals: $TupleMap<N, ToNumber>) => mixed,
-  ) => Node;
+  ) => NodeImpl;
 
   declare export type Cond = (
     cond: NodeParam,
     branch1: ?NodeParam,
     branch2?: ?NodeParam,
-  ) => Node;
-
-  declare export type Not = Node => Node;
-  declare export type And = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Or = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Eq = (NodeParam, NodeParam) => Node;
-  declare export type Neq = (NodeParam, NodeParam) => Node;
-  declare export type LessThan = (NodeParam, NodeParam) => Node;
-  declare export type GreaterThan = (NodeParam, NodeParam) => Node;
-  declare export type LessOrEq = (NodeParam, NodeParam) => Node;
-  declare export type GreaterOrEq = (NodeParam, NodeParam) => Node;
-  declare export type Add = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Sub = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Multiply = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Divide = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Pow = (...$ReadOnlyArray<NodeParam>) => Node;
-  declare export type Max = (NodeParam, NodeParam) => Node;
-  declare export type Min = (NodeParam, NodeParam) => Node;
-  declare export type Abs = (NodeParam) => Node;
-  declare export type Ceil = (NodeParam) => Node;
-  declare export type Floor = (NodeParam) => Node;
-  declare export type Round = (NodeParam) => Node;
-
-  declare export type StartClock = Clock => Node;
-  declare export type StopClock = Clock => Node;
-  declare export type ClockRunning = Clock => Node;
-
-  declare export type Debug = (string, NodeParam) => Node;
+  ) => NodeImpl;
+
+  declare export type Not = NodeImpl => NodeImpl;
+  declare export type And = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Or = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Eq = (NodeParam, NodeParam) => NodeImpl;
+  declare export type Neq = (NodeParam, NodeParam) => NodeImpl;
+  declare export type LessThan = (NodeParam, NodeParam) => NodeImpl;
+  declare export type GreaterThan = (NodeParam, NodeParam) => NodeImpl;
+  declare export type LessOrEq = (NodeParam, NodeParam) => NodeImpl;
+  declare export type GreaterOrEq = (NodeParam, NodeParam) => NodeImpl;
+  declare export type Add = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Sub = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Multiply = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Divide = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Pow = (...$ReadOnlyArray<NodeParam>) => NodeImpl;
+  declare export type Max = (NodeParam, NodeParam) => NodeImpl;
+  declare export type Min = (NodeParam, NodeParam) => NodeImpl;
+  declare export type Abs = (NodeParam) => NodeImpl;
+  declare export type Ceil = (NodeParam) => NodeImpl;
+  declare export type Floor = (NodeParam) => NodeImpl;
+  declare export type Round = (NodeParam) => NodeImpl;
+
+  declare export type StartClock = ClockImpl => NodeImpl;
+  declare export type StopClock = ClockImpl => NodeImpl;
+  declare export type ClockRunning = ClockImpl => NodeImpl;
+
+  declare export type Debug = (string, NodeParam) => NodeImpl;
 
   declare type ExtrapolateType = { ... };
   declare type ExtrapolateModule = {
@@ -115,7 +115,7 @@
   declare export type InterpolateNode = (
     node: NodeParam,
     interpolationConfig: InterpolationConfig,
-  ) => Node;
+  ) => NodeImpl;
 
   declare export type InterpolateColorsConfig = {
     +inputRange: $ReadOnlyArray<number>,
@@ -124,7 +124,7 @@
   declare export type InterpolateColors = (
     animationValue: NodeParam,
     interpolationConfig: InterpolateColorsConfig
-  ) => Node;
+  ) => NodeImpl;
 
   declare export type Interpolate = (
     input: number,
@@ -146,10 +146,10 @@
   declare type EasingFn = (t: number) => number;
 
   declare export type TimingState = {
-    +finished: Value,
-    +position: Value,
-    +frameTime: Value,
-    +time: Value,
+    +finished: ValueImpl,
+    +position: ValueImpl,
+    +frameTime: ValueImpl,
+    +time: ValueImpl,
     ...
   };
   declare export type TimingConfig = {
@@ -164,14 +164,14 @@
   };
   declare type Timing = {|
     (
-      value: Value,
+      value: ValueImpl,
       config: TimingConfig,
     ): Animator,
     (
-      clock: Clock,
+      clock: ClockImpl,
       state: TimingState,
       config: TimingConfig,
-    ): Node,
+    ): NodeImpl,
   |};
 
   declare export type SpringConfig = {
@@ -193,22 +193,22 @@
   };
 
   declare export type SpringState = {
-    +finished: Value,
-    +position: Value,
-    +velocity: Value,
-    +time: Value,
+    +finished: ValueImpl,
+    +position: ValueImpl,
+    +velocity: ValueImpl,
+    +time: ValueImpl,
     ...
   };
   declare type Spring = {|
     (
-      value: Value,
+      value: ValueImpl,
       config: SpringConfig,
     ): Animator,
     (
-      clock: Clock,
+      clock: ClockImpl,
       state: SpringState,
       config: SpringConfig,
-    ): Node,
+    ): NodeImpl,
   |};
 
   declare export type DecayConfig = {
@@ -216,22 +216,22 @@
     ...
   };
   declare export type DecayState = {
-    +finished: Value,
-    +position: Value,
-    +velocity: Value,
-    +time: Value,
+    +finished: ValueImpl,
+    +position: ValueImpl,
+    +velocity: ValueImpl,
+    +time: ValueImpl,
     ...
   };
   declare type Decay = {|
     (
-      value: Value,
+      value: ValueImpl,
       config: DecayConfig,
     ): Animator,
     (
-      clock: Clock,
+      clock: ClockImpl,
       state: DecayState,
       config: DecayConfig,
-    ): Node,
+    ): NodeImpl,
   |};
 
   declare type LayoutAnimation = {|
@@ -412,22 +412,22 @@
     | GestureStateActive
     | GestureStateEnd;
 
-  declare type $Event<T: { ... }> = $SyntheticEvent<{
+  declare type $Event<T: { ... }> = {
     handlerTag: number,
     numberOfPointers: number,
     state: GestureState,
     oldState: GestureState,
     ...$Exact<T>,
     ...
-  }>;
+  };
 
-  declare type ToValue = (val: mixed) => Value;
+  declare type ToValue = (val: mixed) => ValueImpl;
   declare type Event = <T, E: $Event<T>>(defs: $ReadOnlyArray<{
     +nativeEvent: $Shape<$ObjMap<E, ToValue>>,
     ...
-  }>) => E;
+  }>) => $SyntheticEvent<E> => void;
 
-  declare type UseValue = (initialVal: number) => Value;
+  declare type UseValue = (initialVal: number) => ValueImpl;
 
   declare type AnimatedGestureHandlerEventCallback<T, E: $Event<T>> = (
     event: $Shape<E>,
@@ -484,13 +484,13 @@
 
   declare type CancelAnimation = (animation: number) => void;
 
-  declare export var Node: typeof Node;
-  declare export var Value: typeof Value;
-  declare export var Clock: typeof Clock;
-  declare export var View: typeof View;
-  declare export var Text: typeof Text;
-  declare export var Image: typeof Image;
-  declare export var Code: typeof Code;
+  declare export var Node: typeof NodeImpl;
+  declare export var Value: typeof ValueImpl;
+  declare export var Clock: typeof ClockImpl;
+  declare export var View: typeof ViewImpl;
+  declare export var Text: typeof TextImpl;
+  declare export var Image: typeof ImageImpl;
+  declare export var Code: typeof CodeImpl;
   declare export var block: Block;
   declare export var set: Set;
   declare export var call: Call;
@@ -538,13 +538,13 @@
   declare export var cancelAnimation: CancelAnimation;
 
   declare export default {
-    +Node: typeof Node,
-    +Value: typeof Value,
-    +Clock: typeof Clock,
-    +View: typeof View,
-    +Text: typeof Text,
-    +Image: typeof Image,
-    +Code: typeof Code,
+    +Node: typeof NodeImpl,
+    +Value: typeof ValueImpl,
+    +Clock: typeof ClockImpl,
+    +View: typeof ViewImpl,
+    +Text: typeof TextImpl,
+    +Image: typeof ImageImpl,
+    +Code: typeof CodeImpl,
     +block: Block,
     +set: Set,
     +call: Call,
diff --git a/native/media/file-utils.js b/native/media/file-utils.js
--- a/native/media/file-utils.js
+++ b/native/media/file-utils.js
@@ -155,11 +155,11 @@
 
   let finalURI = uri;
   if (newLocalURI && newLocalURI !== uri) {
+    finalURI = newLocalURI;
     console.log(
       'fetchAssetInfo returned localURI ' +
         `${newLocalURI} when we already had ${uri}`,
     );
-    finalURI = newLocalURI;
   }
 
   return {
diff --git a/native/navigation/disconnected-bar.react.js b/native/navigation/disconnected-bar.react.js
--- a/native/navigation/disconnected-bar.react.js
+++ b/native/navigation/disconnected-bar.react.js
@@ -26,7 +26,7 @@
 };
 function DisconnectedBar(props: Props): React.Node {
   const { shouldShowDisconnectedBar } = useShouldShowDisconnectedBar();
-  const showingRef = new React.useRef();
+  const showingRef = React.useRef();
   if (!showingRef.current) {
     showingRef.current = new Animated.Value(shouldShowDisconnectedBar ? 1 : 0);
   }
diff --git a/native/navigation/tab-bar.react.js b/native/navigation/tab-bar.react.js
--- a/native/navigation/tab-bar.react.js
+++ b/native/navigation/tab-bar.react.js
@@ -20,7 +20,7 @@
 
 type Props = React.ElementConfig<typeof BottomTabBar>;
 function TabBar(props: Props) {
-  const tabBarVisibleRef = new React.useRef();
+  const tabBarVisibleRef = React.useRef();
   if (!tabBarVisibleRef.current) {
     tabBarVisibleRef.current = new Value(1);
   }
diff --git a/native/package.json b/native/package.json
--- a/native/package.json
+++ b/native/package.json
@@ -31,7 +31,7 @@
     "babel-plugin-transform-remove-console": "^6.9.4",
     "babel-plugin-transform-remove-strict-mode": "0.0.2",
     "comm-react-native-codegen": "npm:react-native-codegen@0.0.7",
-    "flow-bin": "^0.158.0",
+    "flow-bin": "^0.182.0",
     "flow-mono-cli": "^1.5.0",
     "flow-typed": "^3.2.1",
     "fs-extra": "^8.1.0",
diff --git a/patches/react-native-firebase+5.6.0.patch b/patches/react-native-firebase+5.6.0.patch
--- a/patches/react-native-firebase+5.6.0.patch
+++ b/patches/react-native-firebase+5.6.0.patch
@@ -246,7 +246,7 @@
  export default class User {
    _auth: Auth;
 diff --git a/node_modules/react-native-firebase/dist/modules/core/app.js.flow b/node_modules/react-native-firebase/dist/modules/core/app.js.flow
-index 6e27c61..27d226d 100644
+index 6e27c61..0b0b492 100644
 --- a/node_modules/react-native-firebase/dist/modules/core/app.js.flow
 +++ b/node_modules/react-native-firebase/dist/modules/core/app.js.flow
 @@ -21,7 +21,9 @@ import Links, { NAMESPACE as LinksNamespace } from '../links';
@@ -259,23 +259,21 @@
  import Performance, { NAMESPACE as PerfNamespace } from '../perf';
  import Storage, { NAMESPACE as StorageNamespace } from '../storage';
  import Utils, { NAMESPACE as UtilsNamespace } from '../utils';
-@@ -63,7 +65,14 @@ export default class App {
+@@ -63,7 +65,12 @@ export default class App {
  
    messaging: () => Messaging;
  
 -  notifications: () => Notifications;
-+  notifications: {
-+    (): Notifications,
-+    +Android: NotificationsStatics.Android,
-+    +Notification: (
-+      nativeNotification?: NativeNotification,
-+      notifications?: Notifications,
-+    ) => NotificationsStatics.Notification,
-+  };
++  notifications:
++    & ((): Notifications)
++    & {
++        +Android: NotificationsStatics.Android,
++        +Notification: NotificationsStatics.Notification,
++      };
  
    perf: () => Performance;
  
-@@ -77,7 +86,7 @@ export default class App {
+@@ -77,7 +84,7 @@ export default class App {
      fromNative: boolean = false
    ) {
      this._name = name;
@@ -284,7 +282,7 @@
  
      if (fromNative) {
        this._initialized = true;
-@@ -129,7 +138,7 @@ export default class App {
+@@ -129,7 +136,7 @@ export default class App {
     * @return {*}
     */
    get options(): FirebaseOptions {
diff --git a/web/.flowconfig b/web/.flowconfig
--- a/web/.flowconfig
+++ b/web/.flowconfig
@@ -20,7 +20,6 @@
 deprecated-type=warn
 unsafe-getters-setters=warn
 unnecessary-invariant=warn
-signature-verification-failure=warn
 
 [strict]
 deprecated-type
diff --git a/web/calendar/entry.react.js b/web/calendar/entry.react.js
--- a/web/calendar/entry.react.js
+++ b/web/calendar/entry.react.js
@@ -384,7 +384,7 @@
           this.setState({ loadingStatus: 'inactive' }, this.updateHeight);
           this.props.dispatch({
             type: concurrentModificationResetActionType,
-            payload: { id: entryID, dbText: e.payload.db },
+            payload: { id: entryID, dbText: e.payload?.db },
           });
           this.props.popModal();
         };
diff --git a/web/electron.js b/web/electron.js
--- a/web/electron.js
+++ b/web/electron.js
@@ -1,18 +1,21 @@
 // @flow
 
-declare var electronContextBridge;
+type ElectronContextBridge = {
+  // Returns a callback that you can call to remove the listener
+  +onNavigate: OnNavigateListener => () => void,
+  +clearHistory: () => void,
+  +doubleClickTopBar: () => void,
+  +setBadge: (value: string | number | null) => void,
+};
 
 type OnNavigateListener = ({
   +canGoBack: boolean,
   +canGoForward: boolean,
 }) => void;
 
-const electron: null | {
-  // Returns a callback that you can call to remove the listener
-  +onNavigate: OnNavigateListener => () => void,
-  +clearHistory: () => void,
-  +doubleClickTopBar: () => void,
-  +setBadge: (value: string | number | null) => void,
-} = typeof electronContextBridge === 'undefined' ? null : electronContextBridge;
+declare var electronContextBridge: ?ElectronContextBridge;
+
+const electron: null | ElectronContextBridge =
+  typeof electronContextBridge === 'undefined' ? null : electronContextBridge;
 
 export default electron;
diff --git a/web/package.json b/web/package.json
--- a/web/package.json
+++ b/web/package.json
@@ -29,7 +29,7 @@
     "clean-webpack-plugin": "^3.0.0",
     "concurrently": "^5.3.0",
     "css-loader": "^4.3.0",
-    "flow-bin": "^0.158.0",
+    "flow-bin": "^0.182.0",
     "flow-typed": "^3.2.1",
     "jest": "^26.6.3",
     "mini-css-extract-plugin": "^0.11.2",
diff --git a/web/vector-utils.js b/web/vector-utils.js
--- a/web/vector-utils.js
+++ b/web/vector-utils.js
@@ -2,9 +2,7 @@
 
 import invariant from 'invariant';
 
-declare class SVGElement {
-  parentNode: Element;
-}
+declare class SVGElement extends Element {}
 
 function htmlTargetFromEvent(event: SyntheticEvent<*>): HTMLElement {
   let target = event.target;
diff --git a/yarn.lock b/yarn.lock
--- a/yarn.lock
+++ b/yarn.lock
@@ -10292,10 +10292,10 @@
     debug "^4.1.1"
     fs-extra "^7.0.0"
 
-flow-bin@^0.158.0:
-  version "0.158.0"
-  resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.158.0.tgz#0a09763d41eb8ec7135ced6a3b9f8fa370a393d8"
-  integrity sha512-Gk5md8XTwk/M+J5M+rFyS1LJfFen6ldY60jM9+meWixlKf4b0vwdoUO8R7oo471pze+GY+blrnskUeqLDxFJfg==
+flow-bin@^0.182.0:
+  version "0.182.0"
+  resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.182.0.tgz#1dacbd72465743670412ada015d3182deda6f966"
+  integrity sha512-Ux90c2sMfoV/VVjOEFT2OHFJFnyfoIbTK/5AKAMnU4Skfru1G+FyS5YLu3XxQl0R6mpA9+rrFlPfYZq/5B+J3w==
 
 flow-mono-cli@^1.5.0:
   version "1.5.3"