diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,14 @@
 Brick changelog
 ---------------
 
+2.1
+---
+
+API changes:
+
+* Added `Brick.Main.customMainWithDefaultVty` as an alternative way to
+  initialize Brick.
+
 2.0
 ---
 
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             2.0
+version:             2.1
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal user interfaces (TUIs) painlessly with 'brick'! You
@@ -94,7 +94,7 @@
     Brick.Types.Internal
     Brick.Widgets.Internal
 
-  build-depends:       base >= 4.9.0.0 && < 4.19.0.0,
+  build-depends:       base >= 4.9.0.0 && < 4.21.0.0,
                        vty >= 6.0,
                        vty-crossplatform,
                        bimap >= 0.5 && < 0.6,
@@ -113,7 +113,7 @@
                        text,
                        text-zipper >= 0.13,
                        template-haskell,
-                       deepseq >= 1.3 && < 1.5,
+                       deepseq >= 1.3 && < 1.6,
                        unix-compat,
                        bytestring,
                        word-wrap >= 0.2
@@ -453,7 +453,6 @@
   build-depends:       base,
                        brick,
                        vty,
-                       vty-crossplatform,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th,
@@ -576,4 +575,5 @@
                        microlens,
                        vector,
                        vty,
+                       vty-unix,
                        QuickCheck
diff --git a/programs/CustomEventDemo.hs b/programs/CustomEventDemo.hs
--- a/programs/CustomEventDemo.hs
+++ b/programs/CustomEventDemo.hs
@@ -12,13 +12,12 @@
 import Data.Monoid
 #endif
 import qualified Graphics.Vty as V
-import Graphics.Vty.CrossPlatform (mkVty)
 
 import Brick.BChan
 import Brick.Main
   ( App(..)
   , showFirstCursor
-  , customMain
+  , customMainWithDefaultVty
   , halt
   )
 import Brick.AttrMap
@@ -83,6 +82,4 @@
         writeBChan chan Counter
         threadDelay 1000000
 
-    let buildVty = mkVty V.defaultConfig
-    initialVty <- buildVty
-    void $ customMain initialVty buildVty (Just chan) theApp initialState
+    void $ customMainWithDefaultVty (Just chan) theApp initialState
diff --git a/programs/TailDemo.hs b/programs/TailDemo.hs
--- a/programs/TailDemo.hs
+++ b/programs/TailDemo.hs
@@ -143,10 +143,9 @@
 
 main :: IO ()
 main = do
-    vty <- mkVty V.defaultConfig
     chan <- newBChan 10
 
     -- Run thread to simulate incoming data
     void $ forkIO $ generateLines chan
 
-    void $ customMain vty (mkVty V.defaultConfig) (Just chan) app initialState
+    void $ customMainWithDefaultVty (Just chan) app initialState
diff --git a/src/Brick/Main.hs b/src/Brick/Main.hs
--- a/src/Brick/Main.hs
+++ b/src/Brick/Main.hs
@@ -5,6 +5,7 @@
   , defaultMain
   , customMain
   , customMainWithVty
+  , customMainWithDefaultVty
   , simpleMain
   , resizeOrQuit
   , simpleApp
@@ -130,10 +131,8 @@
             -> s
             -- ^ The initial application state.
             -> IO s
-defaultMain app st = do
-    let builder = mkVty defaultConfig
-    initialVty <- builder
-    customMain initialVty builder Nothing app st
+defaultMain app st =
+    fst <$> customMainWithDefaultVty Nothing app st
 
 -- | A simple main entry point which takes a widget and renders it. This
 -- event loop terminates when the user presses any key, but terminal
@@ -234,6 +233,25 @@
     shutdown vty
     restoreInitialState
     return s
+
+-- | Like 'customMainWithVty', except that Vty is initialized with the
+-- default configuration.
+customMainWithDefaultVty :: (Ord n)
+                         => Maybe (BChan e)
+                         -- ^ An event channel for sending custom
+                         -- events to the event loop (you write to this
+                         -- channel, the event loop reads from it).
+                         -- Provide 'Nothing' if you don't plan on
+                         -- sending custom events.
+                         -> App s e n
+                         -- ^ The application.
+                         -> s
+                         -- ^ The initial application state.
+                         -> IO (s, Vty)
+customMainWithDefaultVty mUserChan app initialAppState = do
+    let builder = mkVty defaultConfig
+    vty <- builder
+    customMainWithVty vty builder mUserChan app initialAppState
 
 -- | Like 'customMain', except the last 'Vty' handle used by the
 -- application is returned without being shut down with 'shutdown'. This
diff --git a/tests/Render.hs b/tests/Render.hs
--- a/tests/Render.hs
+++ b/tests/Render.hs
@@ -10,6 +10,8 @@
 import Data.Monoid
 #endif
 import qualified Graphics.Vty as V
+import qualified Graphics.Vty.Platform.Unix.Output as VU
+import qualified Graphics.Vty.Platform.Unix.Settings as VU
 import Brick.Widgets.Border (hBorder)
 import Control.Exception (SomeException, try)
 
@@ -18,7 +20,7 @@
 
 renderDisplay :: Ord n => [Widget n] -> IO ()
 renderDisplay ws = do
-    outp <- V.outputForConfig V.defaultConfig
+    outp <- VU.buildOutput =<< VU.defaultSettings
     ctx <- V.displayContext outp region
     V.outputPicture ctx (renderWidget Nothing ws region)
     V.releaseDisplay outp
