diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,8 @@
+# 0.3.5
+
+- Generalize `SwaggerSchemaUI` and `swaggerSchemaUIServerImpl` to support arbitrary `Value` instead
+  of hardcoded `Swagger` type.
+
 # 0.3.3
 
 - Add `swaggerSchemaUIServerImpl'`
diff --git a/servant-swagger-ui-core.cabal b/servant-swagger-ui-core.cabal
--- a/servant-swagger-ui-core.cabal
+++ b/servant-swagger-ui-core.cabal
@@ -1,6 +1,6 @@
 cabal-version:      1.12
 name:               servant-swagger-ui-core
-version:            0.3.4
+version:            0.3.5
 synopsis:           Servant swagger ui core components
 category:           Web, Servant, Swagger
 description:
@@ -19,12 +19,11 @@
 license-file:       LICENSE
 build-type:         Simple
 tested-with:
-  GHC ==8.0.2
-   || ==8.2.2
+  GHC ==8.2.2
    || ==8.4.4
    || ==8.6.5
    || ==8.8.4
-   || ==8.10.2
+   || ==8.10.4
 
 extra-source-files: Changelog.md
 
@@ -37,13 +36,13 @@
   ghc-options:      -Wall
   build-depends:
       base                 >=4.7      && <4.15
+    , aeson                >=0.8.0.2  && <1.6
     , blaze-markup         >=0.7.0.2  && <0.9
     , bytestring           >=0.10.4.0 && <0.11
     , http-media           >=0.7.1.3  && <0.9
     , servant              >=0.14     && <0.19
     , servant-blaze        >=0.8      && <0.10
     , servant-server       >=0.14     && <0.19
-    , swagger2             >=2.3.0.1  && <2.7
     , text                 >=1.2.3.0  && <1.3
     , transformers         >=0.3      && <0.6
     , transformers-compat  >=0.3      && <0.7
diff --git a/src/Servant/Swagger/UI/Core.hs b/src/Servant/Swagger/UI/Core.hs
--- a/src/Servant/Swagger/UI/Core.hs
+++ b/src/Servant/Swagger/UI/Core.hs
@@ -46,8 +46,8 @@
     Handler,
     ) where
 
+import Data.Aeson                     (ToJSON (..), Value)
 import Data.ByteString                (ByteString)
-import Data.Swagger                   (Swagger)
 import GHC.TypeLits                   (KnownSymbol, Symbol, symbolVal)
 import Network.Wai.Application.Static (embeddedSettings, staticApp)
 import Servant
@@ -67,8 +67,10 @@
 -- \/swagger-ui\/...
 -- @
 --
+-- This type does not actually force served type to be @Swagger@ from @swagger2@ package,
+-- it could be arbitrary @aeson@ 'Value'.
 type SwaggerSchemaUI (dir :: Symbol) (schema :: Symbol) =
-    SwaggerSchemaUI' dir (schema :> Get '[JSON] Swagger)
+    SwaggerSchemaUI' dir (schema :> Get '[JSON] Value)
 
 -- | Use 'SwaggerSchemaUI'' when you need even more control over
 -- where @swagger.json@ is served (e.g. subdirectory).
@@ -101,11 +103,11 @@
         proxyApi = Proxy :: Proxy api
 
 swaggerSchemaUIServerImpl
-    :: (Monad m, ServerT api m ~ m Swagger)
+    :: (Monad m, ServerT api m ~ m Value, ToJSON a)
     => T.Text -> [(FilePath, ByteString)]
-    -> Swagger -> ServerT (SwaggerSchemaUI' dir api) m
+    -> a -> ServerT (SwaggerSchemaUI' dir api) m
 swaggerSchemaUIServerImpl indexTemplate files swagger
-  = swaggerSchemaUIServerImpl' indexTemplate files $ return swagger
+  = swaggerSchemaUIServerImpl' indexTemplate files $ return $ toJSON swagger
 
 -- | Use a custom server to serve the Swagger spec source.
 swaggerSchemaUIServerImpl'
