diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,15 @@
+ISC License
+
+Copyright (c) 2022 Gautier DI FOLCO
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
+OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+PERFORMANCE OF THIS SOFTWARE.
diff --git a/sized-wrapper-quickcheck.cabal b/sized-wrapper-quickcheck.cabal
new file mode 100644
--- /dev/null
+++ b/sized-wrapper-quickcheck.cabal
@@ -0,0 +1,49 @@
+cabal-version:       3.0
+name:                sized-wrapper-quickcheck
+version:             0.1.0.0
+author:              Gautier DI FOLCO
+maintainer:          gautier.difolco@gmail.com
+category:            Data
+build-type:          Simple
+license:             ISC
+license-file:        LICENSE
+synopsis:            QuickCheck instance for 'Sized'
+description:         QuickCheck instance for 'Sized'.
+Homepage:            http://github.com/blackheaven/sized-wrapper/sized-wrapper-quickcheck
+tested-with:         GHC==9.2.2, GHC==9.0.2, GHC==8.10.7
+
+library
+  default-language:   Haskell2010
+  build-depends:
+        base == 4.*
+      , QuickCheck == 2.*
+      , sized-wrapper >= 0.1.0.0 && < 1
+  hs-source-dirs: src
+  exposed-modules:
+      Test.QuickCheck.Instances.Sized
+  other-modules:
+      Paths_sized_wrapper_quickcheck
+  autogen-modules:
+      Paths_sized_wrapper_quickcheck
+  default-extensions:
+      DataKinds
+      DefaultSignatures
+      DeriveAnyClass
+      DeriveGeneric
+      DerivingStrategies
+      DerivingVia
+      DuplicateRecordFields
+      FlexibleContexts
+      GADTs
+      GeneralizedNewtypeDeriving
+      KindSignatures
+      LambdaCase
+      OverloadedLists
+      OverloadedStrings
+      RankNTypes
+      RecordWildCards
+      ScopedTypeVariables
+      TypeApplications
+      TypeFamilies
+      TypeOperators
+  ghc-options: -Wall -Wcompat -Widentities -Wincomplete-record-updates -Wincomplete-uni-patterns -Wpartial-fields -Wredundant-constraints
diff --git a/src/Test/QuickCheck/Instances/Sized.hs b/src/Test/QuickCheck/Instances/Sized.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/QuickCheck/Instances/Sized.hs
@@ -0,0 +1,67 @@
+{-# LANGUAGE UndecidableInstances #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+
+-- |
+-- Module        : Test.QuickCheck.Instances.Sized
+-- Copyright     : Gautier DI FOLCO
+-- License       : BSD2
+--
+-- Maintainer    : Gautier DI FOLCO <gautier.difolco@gmail.com>
+-- Stability     : Unstable
+-- Portability   : GHC
+--
+-- QuickCheck's 'Arbitrary' instance for 'Sized'.
+module Test.QuickCheck.Instances.Sized
+  ( Arbitrary (..),
+    ArbitrarySized (..),
+    ArbitraryBuiltSized (..),
+  )
+where
+
+import Control.Monad
+import Data.Maybe (maybeToList)
+import Data.Proxy
+import Data.Sized
+import GHC.TypeLits
+import Test.QuickCheck hiding (sized)
+
+instance
+  ( Size s,
+    SizedFromContainer a,
+    Arbitrary a,
+    ArbitraryBuiltSized a,
+    ArbitrarySized s
+  ) =>
+  Arbitrary (Sized s a)
+  where
+  arbitrary = arbitrarySized (Proxy @s) >>= fmap trustedSized . buildSized
+
+  shrink xs =
+    [ xs''
+      | xs' <- shrink $ getSized xs,
+        xs'' <- maybeToList $ sized xs'
+    ]
+
+class ArbitrarySized a where
+  arbitrarySized :: Proxy a -> Gen Int
+
+instance ArbitrarySized Unknown where
+  arbitrarySized _ = chooseInt (0, maxBound)
+
+instance KnownNat n => ArbitrarySized (AtLeast n) where
+  arbitrarySized _ = chooseInt (fromInteger $ natVal $ Proxy @n, maxBound)
+
+instance KnownNat n => ArbitrarySized (AtMost n) where
+  arbitrarySized _ = chooseInt (0, fromInteger $ natVal $ Proxy @n)
+
+instance KnownNat n => ArbitrarySized (Exactly n) where
+  arbitrarySized _ = return $ fromInteger $ natVal $ Proxy @n
+
+instance (KnownNat n, KnownNat m) => ArbitrarySized (Between n m) where
+  arbitrarySized _ = chooseInt (fromInteger $ natVal $ Proxy @n, fromInteger $ natVal $ Proxy @m)
+
+class ArbitraryBuiltSized a where
+  buildSized :: Int -> Gen a
+
+instance Arbitrary a => ArbitraryBuiltSized [a] where
+  buildSized n = replicateM n arbitrary
