diff --git a/lib/shared/reaction-utils.js b/lib/shared/reaction-utils.js
new file mode 100644
--- /dev/null
+++ b/lib/shared/reaction-utils.js
@@ -0,0 +1,25 @@
+// @flow
+
+import invariant from 'invariant';
+
+import type { MessageReactionInfo } from '../selectors/chat-selectors';
+
+function stringForReactionList(
+  reactions: $ReadOnlyMap<string, MessageReactionInfo>,
+): string {
+  const reactionText = [];
+
+  for (const reaction of reactions.keys()) {
+    const reactionInfo = reactions.get(reaction);
+    invariant(reactionInfo, 'reactionInfo should be set');
+
+    reactionText.push(reaction);
+    if (reactionInfo.users.size > 1) {
+      reactionText.push(reactionInfo.users.size);
+    }
+  }
+
+  return reactionText.join(' ');
+}
+
+export { stringForReactionList };