diff --git a/hangups/__main__.py b/hangups/__main__.py
index <HASH>..<HASH> 100644
--- a/hangups/__main__.py
+++ b/hangups/__main__.py
@@ -270,6 +270,9 @@ class ConversationWidget(urwid.WidgetWrap):
 
     def _on_return(self, text):
         """Called when the user presses return on the send message widget."""
+        # Ignore if the user hasn't typed a message.
+        if len(text) == 0:
+            return
         # XXX: Exception handling here is still a bit broken. Uncaught
         # exceptions in _on_message_sent will only be logged.
         self._conversation.send_message(text).add_done_callback(
diff --git a/hangups/client.py b/hangups/client.py
index <HASH>..<HASH> 100644
--- a/hangups/client.py
+++ b/hangups/client.py
@@ -189,6 +189,8 @@ class Conversation(object):
     def send_message(self, text):
         """Send a message to this conversation.
 
+        text may not be empty.
+
         Raises hangups.NetworkError if the message can not be sent.
         """
         yield self._client.sendchatmessage(self._id, text)
@@ -763,6 +765,8 @@ class Client(object):
                         is_underlined=False):
         """Send a chat message to a conversation.
 
+        message may not be empty.
+
         Raises hangups.NetworkError if the message can not be sent.
         """
         client_generated_id = random.randint(0, 2**32)
Don't try to send empty chat messages