diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for glirc2
 
+## 2.20.2.1
+
+* Support `vty-5.15`
+
 ## 2.20.2
 
 * Remove `memory` dependency
diff --git a/exec/Main.hs b/exec/Main.hs
--- a/exec/Main.hs
+++ b/exec/Main.hs
@@ -14,7 +14,6 @@
 import Control.Exception
 import Control.Lens
 import Control.Monad
-import Data.Default.Class (def)
 import Data.List (nub)
 import Data.Text (Text)
 import System.Exit
@@ -79,4 +78,4 @@
 -- | Initialize a 'Vty' value and run a continuation. Shutdown the 'Vty'
 -- once the continuation finishes.
 withVty :: (Vty -> IO a) -> IO a
-withVty = bracket (mkVty def{bracketedPasteMode = Just True}) shutdown
+withVty = bracket (mkVty mempty{bracketedPasteMode = Just True}) shutdown
diff --git a/glirc.cabal b/glirc.cabal
--- a/glirc.cabal
+++ b/glirc.cabal
@@ -1,5 +1,5 @@
 name:                glirc
-version:             2.20.2
+version:             2.20.2.1
 synopsis:            Console IRC client
 description:         Console IRC client
                      .
@@ -51,7 +51,7 @@
       ld-options: -Wl,-exported_symbols_list,exec/macos_exported_symbols.txt
 
   -- Constraints can be found on the library itself
-  build-depends:       base, glirc, data-default-class, lens, text, vty
+  build-depends:       base, glirc, lens, text, vty
 
 library
   hs-source-dirs:      src
@@ -126,8 +126,7 @@
                        base64-bytestring    >=1.0.0.1 && <1.1,
                        config-value         >=0.5    && <0.6,
                        containers           >=0.5.7  && <0.6,
-                       data-default-class   >=0.1.2  && <0.2,
-                       directory            >=1.2.6  && <1.3,
+                       directory            >=1.2.6  && <1.4,
                        filepath             >=1.4.1  && <1.5,
                        gitrev               >=1.2    && <1.3,
                        hashable             >=1.2.4  && <1.3,
@@ -146,8 +145,8 @@
                        transformers         >=0.5.2  && <0.6,
                        unix                 >=2.7    && <2.8,
                        unordered-containers >=0.2.7  && <0.3,
-                       vector               >=0.11   && <0.12,
-                       vty                  >=5.11.1 && <5.15,
+                       vector               >=0.11   && <0.13,
+                       vty                  >=5.11.1 && <5.16,
                        hookup               >=0.1    && <0.2
 
   if flag(ExportCApi)
diff --git a/src/Client/EventLoop.hs b/src/Client/EventLoop.hs
--- a/src/Client/EventLoop.hs
+++ b/src/Client/EventLoop.hs
@@ -367,7 +367,8 @@
 
 -- | Parses the time format used by ZNC for buffer playback
 parseZncTime :: String -> Maybe UTCTime
-parseZncTime = parseTimeM True defaultTimeLocale "%Y-%m-%dT%H:%M:%S%Q%Z"
+parseZncTime = parseTimeM True defaultTimeLocale
+             $ iso8601DateFormat (Just "%T%Q%Z")
 
 
 -- | Returns the list of values that were stored at the given indexes, if
diff --git a/src/Client/Image/Arguments.hs b/src/Client/Image/Arguments.hs
--- a/src/Client/Image/Arguments.hs
+++ b/src/Client/Image/Arguments.hs
@@ -21,6 +21,7 @@
 import           Client.Image.Palette
 import           Control.Lens
 import qualified Data.Text as Text
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 
 -- | Parse command arguments against a given 'ArgumentSpec'.
diff --git a/src/Client/Image/Message.hs b/src/Client/Image/Message.hs
--- a/src/Client/Image/Message.hs
+++ b/src/Client/Image/Message.hs
@@ -38,6 +38,7 @@
 import qualified Data.Text as Text
 import           Data.Time
 import qualified Data.Vector as Vector
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Codes
 import           Irc.Identifier
diff --git a/src/Client/Image/MircFormatting.hs b/src/Client/Image/MircFormatting.hs
--- a/src/Client/Image/MircFormatting.hs
+++ b/src/Client/Image/MircFormatting.hs
@@ -24,6 +24,7 @@
 import           Data.Char
 import           Data.Maybe
 import           Data.Text (Text)
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image hiding ((<|>))
 import qualified Graphics.Vty as Vty
 
diff --git a/src/Client/Image/PackedImage.hs b/src/Client/Image/PackedImage.hs
--- a/src/Client/Image/PackedImage.hs
+++ b/src/Client/Image/PackedImage.hs
@@ -20,6 +20,7 @@
 import qualified Data.Text.Lazy as L
 import           Data.List
 import           GHC.Generics
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Graphics.Vty.Image.Internal
 
diff --git a/src/Client/Image/StatusLine.hs b/src/Client/Image/StatusLine.hs
--- a/src/Client/Image/StatusLine.hs
+++ b/src/Client/Image/StatusLine.hs
@@ -28,6 +28,7 @@
 import           Data.Maybe
 import           Data.Text (Text)
 import qualified Data.Text as Text
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier (Identifier, idText)
 import           Numeric
diff --git a/src/Client/Image/Textbox.hs b/src/Client/Image/Textbox.hs
--- a/src/Client/Image/Textbox.hs
+++ b/src/Client/Image/Textbox.hs
@@ -30,6 +30,7 @@
 import           Data.List
 import           Data.Monoid
 import qualified Data.Text as Text
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 
 -- | Compute the UI image for the text input box. This computes
diff --git a/src/Client/Image/Utils.hs b/src/Client/Image/Utils.hs
--- a/src/Client/Image/Utils.hs
+++ b/src/Client/Image/Utils.hs
@@ -11,6 +11,7 @@
 module Client.Image.Utils (lineWrap) where
 
 import           Graphics.Vty.Image
+import           Graphics.Vty.Attributes
 
 -- | Given an image, break the image up into chunks of at most the
 -- given width and stack the resulting chunks vertically top-to-bottom.
diff --git a/src/Client/Network/Connect.hs b/src/Client/Network/Connect.hs
--- a/src/Client/Network/Connect.hs
+++ b/src/Client/Network/Connect.hs
@@ -24,7 +24,6 @@
 import           Control.Exception  (bracket)
 import           Control.Lens
 import           Control.Monad
-import           Data.Default.Class (def)
 import           Data.Monoid        ((<>))
 import           Network.Socket     (PortNumber)
 import           Hookup
diff --git a/src/Client/View/ChannelInfo.hs b/src/Client/View/ChannelInfo.hs
--- a/src/Client/View/ChannelInfo.hs
+++ b/src/Client/View/ChannelInfo.hs
@@ -26,6 +26,7 @@
 import           Data.HashSet (HashSet)
 import           Data.Text (Text)
 import           Data.Time
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 
diff --git a/src/Client/View/Digraphs.hs b/src/Client/View/Digraphs.hs
--- a/src/Client/View/Digraphs.hs
+++ b/src/Client/View/Digraphs.hs
@@ -18,6 +18,7 @@
 import           Data.List.Split
 import qualified Data.Text as Text
 import           Digraphs
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 
 -- | Render the lines of a table showing all of the available digraph entries
diff --git a/src/Client/View/Help.hs b/src/Client/View/Help.hs
--- a/src/Client/View/Help.hs
+++ b/src/Client/View/Help.hs
@@ -27,6 +27,7 @@
 import           Data.Monoid ((<>))
 import           Data.Text (Text)
 import qualified Data.Text as Text
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 
 -- | Generate either the list of all commands and their arguments,
diff --git a/src/Client/View/MaskList.hs b/src/Client/View/MaskList.hs
--- a/src/Client/View/MaskList.hs
+++ b/src/Client/View/MaskList.hs
@@ -24,6 +24,7 @@
 import           Data.Ord
 import           Data.Text (Text)
 import           Data.Time
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 
diff --git a/src/Client/View/Messages.hs b/src/Client/View/Messages.hs
--- a/src/Client/View/Messages.hs
+++ b/src/Client/View/Messages.hs
@@ -25,6 +25,7 @@
 import           Client.State.Window
 import           Control.Lens
 import           Control.Monad
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 import           Irc.Message
diff --git a/src/Client/View/Palette.hs b/src/Client/View/Palette.hs
--- a/src/Client/View/Palette.hs
+++ b/src/Client/View/Palette.hs
@@ -17,6 +17,7 @@
 import           Client.Image.Palette
 import           Control.Lens
 import           Data.List
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 
 digits :: String
diff --git a/src/Client/View/UrlSelection.hs b/src/Client/View/UrlSelection.hs
--- a/src/Client/View/UrlSelection.hs
+++ b/src/Client/View/UrlSelection.hs
@@ -25,6 +25,7 @@
 import           Data.HashSet (HashSet)
 import qualified Data.HashSet as HashSet
 import           Data.Text (Text)
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 import           Text.Read (readMaybe)
diff --git a/src/Client/View/UserList.hs b/src/Client/View/UserList.hs
--- a/src/Client/View/UserList.hs
+++ b/src/Client/View/UserList.hs
@@ -25,6 +25,7 @@
 import           Data.Ord
 import           Data.Text (Text)
 import qualified Data.Text as Text
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 import           Irc.UserInfo
diff --git a/src/Client/View/Windows.hs b/src/Client/View/Windows.hs
--- a/src/Client/View/Windows.hs
+++ b/src/Client/View/Windows.hs
@@ -20,6 +20,7 @@
 import           Control.Lens
 import           Data.List
 import qualified Data.Map as Map
+import           Graphics.Vty.Attributes
 import           Graphics.Vty.Image
 import           Irc.Identifier
 
