diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+0.2.0
+-----
+
+* Added `GenericArbitrary` for use with the [DerivingVia](https://ghc.gitlab.haskell.org/ghc/doc/users_guide/exts/deriving_via.html) compiler extension.
+* Minimum bound on QuickCheck changed to 2.14.
+
 0.1.0
 -----
 
diff --git a/generic-arbitrary.cabal b/generic-arbitrary.cabal
--- a/generic-arbitrary.cabal
+++ b/generic-arbitrary.cabal
@@ -1,5 +1,5 @@
 name:                generic-arbitrary
-version:             0.1.0
+version:             0.2.0
 synopsis:            Generic implementation for QuickCheck's Arbitrary
 description:
     Generic implementations of methods of the 'Arbitrary' class from the
@@ -11,13 +11,20 @@
 license-file:        LICENSE
 author:              Typeable.io contributors
 maintainer:          makeit@typeable.io
+homepage:            http://github.com/typeable/generic-arbitrary#readme
 category:            Generic
 build-type:          Simple
 extra-source-files:  CHANGELOG.md
 cabal-version:       >=1.22
+tested-with:         GHC == 7.10.3
+                   , GHC == 8.0.2
+                   , GHC == 8.2.2
+                   , GHC == 8.4.1
+                   , GHC == 8.6.5
+                   , GHC == 8.10.1
 
 library
   exposed-modules:     Test.QuickCheck.Arbitrary.Generic
-  build-depends:       QuickCheck >= 2.8, base >=4.8 && <5
+  build-depends:       QuickCheck >= 2.14, base >=4.8 && <5
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/Test/QuickCheck/Arbitrary/Generic.hs b/src/Test/QuickCheck/Arbitrary/Generic.hs
--- a/src/Test/QuickCheck/Arbitrary/Generic.hs
+++ b/src/Test/QuickCheck/Arbitrary/Generic.hs
@@ -15,6 +15,16 @@
   shrink = genericShrink
 @
 
+This instance can also be derived using DerivingVia language extension
+
+@
+data Foo = Foo
+  { _fooX :: X
+  , _fooY :: Y
+  } deriving (Generic)
+    deriving (Arbitrary) via GenericArbitrary Foo
+@
+
 The generated 'arbitrary' method is equivalent to
 
 @Foo <$> arbitrary <*> arbitrary@.
@@ -22,16 +32,31 @@
 -}
 
 module Test.QuickCheck.Arbitrary.Generic
-  ( Arbitrary(..)
+  ( GenericArbitrary(..)
+  , Arbitrary(..)
   , genericArbitrary
   , genericShrink
   ) where
 
 import Control.Applicative
+import Data.Coerce (coerce)
 import Data.Proxy
 import GHC.Generics as G
 import GHC.TypeLits
 import Test.QuickCheck as QC
+import Test.QuickCheck.Arbitrary (GSubterms, RecursivelyShrink)
+
+newtype GenericArbitrary a = GenericArbitrary { unGenericArbitrary :: a }
+  deriving (Show, Eq)
+
+instance
+  ( Generic a,
+    GArbitrary (Rep a),
+    RecursivelyShrink (Rep a),
+    GSubterms (Rep a) a
+  ) => Arbitrary (GenericArbitrary a) where
+  arbitrary = coerce (genericArbitrary :: Gen a)
+  shrink = coerce (genericShrink :: a -> [a])
 
 class GArbitrary a where
   gArbitrary :: QC.Gen (a x)
