diff --git a/src/library/Yi/UI/Vty.hs b/src/library/Yi/UI/Vty.hs
--- a/src/library/Yi/UI/Vty.hs
+++ b/src/library/Yi/UI/Vty.hs
@@ -20,10 +20,9 @@
                                                  reverse)
 
 import           Control.Applicative            (Applicative ((<*>)), (<$>))
-import           Control.Concurrent             (MVar, forkIO, isEmptyChan,
-                                                 myThreadId, newEmptyMVar,
-                                                 readChan, takeMVar, tryPutMVar,
-                                                 tryTakeMVar)
+import           Control.Concurrent             (MVar, forkIO, myThreadId, newEmptyMVar,
+                                                 takeMVar, tryPutMVar, tryTakeMVar)
+import           Control.Concurrent.STM         (atomically, isEmptyTChan, readTChan)
 import           Control.Exception              (IOException, handle)
 import           Control.Lens                   (use)
 import           Control.Monad                  (void, when)
@@ -98,7 +97,7 @@
                     maybe (do
                             let go evs = do
                                 e <- getEvent
-                                done <- isEmptyChan inputChan
+                                done <- atomically (isEmptyTChan inputChan)
                                 if done
                                 then submitEvents (D.toList (evs `D.snoc` e))
                                 else go (evs `D.snoc` e)
@@ -109,7 +108,7 @@
         -- | Read a key. UIs need to define a method for getting events.
         getEvent :: IO Yi.Event.Event
         getEvent = do
-          event <- readChan inputChan
+          event <- atomically (readTChan inputChan)
           case event of
             (Vty.EvResize _ _) -> do
                 submitActions []
diff --git a/yi.cabal b/yi.cabal
--- a/yi.cabal
+++ b/yi.cabal
@@ -1,5 +1,5 @@
 name:           yi
-version:        0.12.1
+version:        0.12.2
 category:       Development, Editor
 synopsis:       The Haskell-Scriptable Editor
 description:
@@ -321,7 +321,7 @@
   if flag(testing)
     cpp-options: -DTESTING
     build-depends:
-      QuickCheck >= 2.7 && < 2.8,
+      QuickCheck >= 2.7 && < 2.9,
       random
 
   -- Frontends
@@ -343,8 +343,8 @@
       Yi.UI.Vty
       Yi.UI.Vty.Conversions
     build-depends:
-      unix-compat >=0.1 && <0.5,
-      vty >= 5.2.4 && < 5.4
+      vty >= 5.4,
+      stm >= 2.2
     cpp-options: -DFRONTEND_VTY
 
   other-modules:
