diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,17 @@
 Brick changelog
 ---------------
 
+0.27
+----
+
+API changes:
+ * Brick.Widgets.Core: added `hyperlink` combinator (thanks Getty Ritter
+   for hyperlinking support)
+
+Other changes:
+ * Updated AttrDemo to show how to use hyperlinking
+ * README: Added `herms` to featured projects
+
 0.26.1
 ------
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -59,6 +59,7 @@
  * `viewprof`, a GHC profile viewer: https://github.com/maoe/viewprof
  * `tart`, a mouse-driven ASCII art drawing program: https://github.com/jtdaugherty/tart
  * `silly-joy`, an interpreter for Joy in Haskell: https://github.com/rootmos/silly-joy
+ * `herms`, a command-line tool for managing kitchen recipes: https://github.com/jackkiefer/herms
 
 Getting Started
 ---------------
diff --git a/brick.cabal b/brick.cabal
--- a/brick.cabal
+++ b/brick.cabal
@@ -1,5 +1,5 @@
 name:                brick
-version:             0.26.1
+version:             0.27
 synopsis:            A declarative terminal user interface library
 description:
   Write terminal applications painlessly with 'brick'! You write an
@@ -81,7 +81,7 @@
     Brick.Widgets.Internal
 
   build-depends:       base <= 5,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        transformers,
                        data-clist >= 0.1,
                        dlist,
@@ -133,7 +133,7 @@
   main-is:             CacheDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -147,7 +147,7 @@
   main-is:             VisibilityDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -162,7 +162,7 @@
   main-is:             ViewportScrollDemo.hs
   build-depends:       base,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -175,7 +175,7 @@
   main-is:             DialogDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -188,7 +188,7 @@
   main-is:             MouseDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th,
@@ -203,7 +203,7 @@
   main-is:             LayerDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -217,7 +217,7 @@
   main-is:             SuspendAndResumeDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -231,7 +231,7 @@
   main-is:             PaddingDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -244,7 +244,7 @@
   main-is:             AttrDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -257,7 +257,7 @@
   main-is:             MarkupDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -270,7 +270,7 @@
   main-is:             ListDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        vector
@@ -284,7 +284,7 @@
   main-is:             ListViDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        vector
@@ -298,7 +298,7 @@
   main-is:             CustomEventDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens >= 0.3.0.0,
                        microlens-th
@@ -312,7 +312,7 @@
   main-is:             FillDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -325,7 +325,7 @@
   main-is:             HelloWorldDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -338,7 +338,7 @@
   main-is:             EditDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        vector,
                        microlens >= 0.3.0.0,
@@ -354,7 +354,7 @@
   main-is:             BorderDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
 
@@ -368,6 +368,6 @@
   main-is:             ProgressBarDemo.hs
   build-depends:       base <= 5,
                        brick,
-                       vty >= 5.15,
+                       vty >= 5.18.1,
                        text,
                        microlens
diff --git a/programs/AttrDemo.hs b/programs/AttrDemo.hs
--- a/programs/AttrDemo.hs
+++ b/programs/AttrDemo.hs
@@ -4,7 +4,7 @@
 import Data.Monoid
 import Graphics.Vty
   ( Attr, white, blue, cyan, green, red, yellow
-  , black
+  , black, withURL
   )
 
 import Brick.Main
@@ -16,6 +16,7 @@
   , withAttr
   , vBox
   , str
+  , hyperlink
   )
 import Brick.Util (on, fg)
 import Brick.AttrMap (attrMap, AttrMap)
@@ -35,9 +36,15 @@
          , withAttr "foundFull" $
            str "You can override everything ..."
          , withAttr "foundFgOnly" $
-           str "... or only you want to change and inherit the rest."
+           str "... or only what you want to change and inherit the rest."
          , str "Attribute names are assembled with the Monoid append operation to indicate"
          , str "hierarchy levels, e.g. \"window\" <> \"title\"."
+         , str " "
+         , withAttr "linked" $
+           str "This text is hyperlinked in terminals that support hyperlinking."
+         , str " "
+         , hyperlink "http://www.google.com/" $
+           str "This text is also hyperlinked in terminals that support hyperlinking."
          ]
 
 globalDefault :: Attr
@@ -49,6 +56,7 @@
     , ("foundFgOnly",             fg red)
     , ("general",                 yellow `on` black)
     , ("general" <> "specific",   fg cyan)
+    , ("linked",                  fg yellow `withURL` "http://www.google.com/")
     ]
 
 app :: App () e ()
diff --git a/src/Brick/AttrMap.hs b/src/Brick/AttrMap.hs
--- a/src/Brick/AttrMap.hs
+++ b/src/Brick/AttrMap.hs
@@ -150,10 +150,11 @@
 setDefault newDefault (AttrMap _ m) = AttrMap newDefault m
 
 combineAttrs :: Attr -> Attr -> Attr
-combineAttrs (Attr s1 f1 b1) (Attr s2 f2 b2) =
+combineAttrs (Attr s1 f1 b1 u1) (Attr s2 f2 b2 u2) =
     Attr (s1 `combineMDs` s2)
          (f1 `combineMDs` f2)
          (b1 `combineMDs` b2)
+         (u1 `combineMDs` u2)
 
 combineMDs :: MaybeDefault a -> MaybeDefault a -> MaybeDefault a
 combineMDs _ (SetTo v) = SetTo v
diff --git a/src/Brick/Widgets/Core.hs b/src/Brick/Widgets/Core.hs
--- a/src/Brick/Widgets/Core.hs
+++ b/src/Brick/Widgets/Core.hs
@@ -18,6 +18,7 @@
   , strWrap
   , strWrapWith
   , fill
+  , hyperlink
 
   -- * Padding
   , padLeft
@@ -264,6 +265,16 @@
 -- when the input contains multiple lines.
 txt :: T.Text -> Widget n
 txt = str . T.unpack
+
+-- | Hyperlink the given widget to the specified URL. Not all terminal
+-- emulators support this. In those that don't, this should have no
+-- discernible effect.
+hyperlink :: T.Text -> Widget n -> Widget n
+hyperlink url p =
+    Widget (hSize p) (vSize p) $ do
+        c <- getContext
+        let attr = attrMapLookup (c^.ctxAttrNameL) (c^.ctxAttrMapL) `V.withURL` url
+        withReaderT (& ctxAttrMapL %~ setDefault attr) (render p)
 
 -- | Pad the specified widget on the left. If max padding is used, this
 -- grows greedily horizontally; otherwise it defers to the padded
