diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,15 @@
 Brick changelog
 ---------------
 
+0.38
+----
+
+New features:
+ * Added support for parsing `#RRGGBB` color values in theme
+   customization files in addition to the color names already supported
+   (thanks Brent Carmer). These values are mapped to the nearest
+   reasonable entry in the 240-color space.
+
 0.37.2
 ------
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.37.2
+version:             0.38
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
@@ -87,7 +87,7 @@
     Brick.Widgets.Internal
 
   build-depends:       base <= 4.11.1.0,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        transformers,
                        data-clist >= 0.1,
                        dlist,
@@ -157,7 +157,7 @@
   main-is:             CacheDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -171,7 +171,7 @@
   main-is:             VisibilityDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -186,7 +186,7 @@
   main-is:             ViewportScrollDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -199,7 +199,7 @@
   main-is:             DialogDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -212,7 +212,7 @@
   main-is:             MouseDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th,
@@ -227,7 +227,7 @@
   main-is:             LayerDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -241,7 +241,7 @@
   main-is:             SuspendAndResumeDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -255,7 +255,7 @@
   main-is:             PaddingDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -268,7 +268,7 @@
   main-is:             ThemeDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -281,7 +281,7 @@
   main-is:             AttrDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -294,7 +294,7 @@
   main-is:             MarkupDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -307,7 +307,7 @@
   main-is:             ListDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        vector
@@ -321,7 +321,7 @@
   main-is:             ListViDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        vector
@@ -335,7 +335,7 @@
   main-is:             CustomEventDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -349,7 +349,7 @@
   main-is:             FillDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -362,7 +362,7 @@
   main-is:             HelloWorldDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -375,7 +375,7 @@
   main-is:             EditDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        vector,
                        microlens >= 0.3.0.0,
@@ -391,7 +391,7 @@
   main-is:             BorderDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -405,7 +405,7 @@
   main-is:             DynamicBorderDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
@@ -419,7 +419,7 @@
   main-is:             ProgressBarDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.18.1,
+                       vty >= 5.22,
                        text,
                        microlens
 
diff --git a/src/Brick/Themes.hs b/src/Brick/Themes.hs
--- a/src/Brick/Themes.hs
+++ b/src/Brick/Themes.hs
@@ -21,6 +21,10 @@
 -- @brightRed@, @brightGreen@, @brightYellow@, @brightBlue@,
 -- @brightMagenta@, @brightCyan@, @brightWhite@, or @default@.
 --
+-- We also support color specifications in the common hex format @#RRGGBB@, but
+-- note that this specification is lossy: terminals can only display 256 colors,
+-- but hex codes can specify @256^3 = 16777216@ colors.
+--
 -- A style specification can be either one of the following values
 -- (without quotes) or a comma-delimited list of one or more of the
 -- following values (e.g. @"[bold,underline]"@) indicating that all
@@ -75,13 +79,14 @@
 import Control.Monad (forM, join)
 import Control.Applicative ((<|>))
 import qualified Data.Text as T
+import qualified Data.Text.Read as T
 import qualified Data.Text.IO as T
 import qualified Data.Map as M
 import qualified Data.Semigroup as Sem
 import Data.Tuple (swap)
 import Data.List (intercalate)
 import Data.Bits ((.|.), (.&.))
-import Data.Maybe (fromMaybe, isNothing, catMaybes)
+import Data.Maybe (fromMaybe, isNothing, catMaybes, mapMaybe)
 import Data.Monoid ((<>))
 import qualified Data.Foldable as F
 
@@ -90,6 +95,8 @@
 import Brick.AttrMap (AttrMap, AttrName, attrMap, attrNameComponents)
 import Brick.Types.TH (suffixLenses)
 
+import Text.Printf
+
 -- | An attribute customization can specify which aspects of an
 -- attribute to customize.
 data CustomAttr =
@@ -194,15 +201,28 @@
     isNothing (customBg c) &&
     isNothing (customStyle c)
 
+-- |  This function is lossy in the sense that we only internally support 240 colors but
+-- the #RRGGBB format supports 16^3 colors.
 parseColor :: T.Text -> Either String (MaybeDefault Color)
 parseColor s =
     let stripped = T.strip $ T.toLower s
         normalize (t, c) = (T.toLower t, c)
     in if stripped == "default"
-       then Right Default
-       else maybe (Left $ "Invalid color: " <> show stripped) (Right . SetTo) $
-                  lookup stripped (normalize <$> swap <$> allColors)
+          then Right Default
+          else case parseRGB stripped of
+              Just c  -> Right (SetTo c)
+              Nothing -> maybe (Left $ "Invalid color: " <> show stripped) (Right . SetTo) $
+                             lookup stripped (normalize <$> swap <$> allColors)
+  where
+    parseRGB t = if T.head t /= '#'
+                    then Nothing
+                    else case mapMaybe readHex (T.chunksOf 2 (T.tail t)) of
+                            [r,g,b] -> Just (rgbColor r g b)
+                            _ -> Nothing
 
+    readHex :: T.Text -> Maybe Int
+    readHex t = either (const Nothing) (Just . fst) (T.hexadecimal t)
+
 allColors :: [(Color, T.Text)]
 allColors =
     [ (black, "black")
@@ -309,7 +329,9 @@
             return $ Right $ applyCustomizations customDef (flip M.lookup customMap) t
 
 vtyColorName :: Color -> T.Text
-vtyColorName (Color240 _) = error "Color240 space not supported yet"
+vtyColorName c@(Color240 n) = case color240CodeToRGB (fromIntegral n) of
+    Just (r,g,b) -> T.pack (printf "#%02x%02x%02x" r g b)
+    Nothing -> (error $ "Invalid color: " <> show c)
 vtyColorName c =
     fromMaybe (error $ "Invalid color: " <> show c)
               (lookup c allColors)
