diff --git a/morpheus-graphql.cabal b/morpheus-graphql.cabal
--- a/morpheus-graphql.cabal
+++ b/morpheus-graphql.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           morpheus-graphql
-version:        0.24.3
+version:        0.25.0
 synopsis:       Morpheus GraphQL
 description:    Build GraphQL APIs with your favourite functional language!
 category:       web, graphql
@@ -258,10 +258,10 @@
     , base >=4.7.0 && <5.0.0
     , bytestring >=0.10.4 && <0.12.0
     , containers >=0.4.2.1 && <0.7.0
-    , morpheus-graphql-app >=0.24.0 && <0.25.0
-    , morpheus-graphql-code-gen >=0.24.0 && <0.25.0
-    , morpheus-graphql-core >=0.24.0 && <0.25.0
-    , morpheus-graphql-server >=0.24.0 && <0.25.0
+    , morpheus-graphql-app >=0.25.0 && <0.26.0
+    , morpheus-graphql-code-gen >=0.25.0 && <0.26.0
+    , morpheus-graphql-core >=0.25.0 && <0.26.0
+    , morpheus-graphql-server >=0.25.0 && <0.26.0
     , mtl >=2.0.0 && <3.0.0
     , relude >=0.3.0 && <2.0.0
     , template-haskell >=2.0.0 && <3.0.0
@@ -298,12 +298,12 @@
     , bytestring >=0.10.4 && <0.12.0
     , containers >=0.4.2.1 && <0.7.0
     , morpheus-graphql
-    , morpheus-graphql-app >=0.24.0 && <0.25.0
-    , morpheus-graphql-code-gen >=0.24.0 && <0.25.0
-    , morpheus-graphql-core >=0.24.0 && <0.25.0
-    , morpheus-graphql-server >=0.24.0 && <0.25.0
-    , morpheus-graphql-subscriptions >=0.24.0 && <0.25.0
-    , morpheus-graphql-tests >=0.24.0 && <0.25.0
+    , morpheus-graphql-app >=0.25.0 && <0.26.0
+    , morpheus-graphql-code-gen >=0.25.0 && <0.26.0
+    , morpheus-graphql-core >=0.25.0 && <0.26.0
+    , morpheus-graphql-server >=0.25.0 && <0.26.0
+    , morpheus-graphql-subscriptions >=0.25.0 && <0.26.0
+    , morpheus-graphql-tests >=0.25.0 && <0.26.0
     , mtl >=2.0.0 && <3.0.0
     , relude >=0.3.0 && <2.0.0
     , tasty >=0.1.0 && <1.5.0
diff --git a/src/Data/Morpheus/Document.hs b/src/Data/Morpheus/Document.hs
--- a/src/Data/Morpheus/Document.hs
+++ b/src/Data/Morpheus/Document.hs
@@ -2,25 +2,19 @@
 {-# LANGUAGE NoImplicitPrelude #-}
 
 module Data.Morpheus.Document
-  ( toGraphQLDocument,
-    gqlDocument,
+  ( gqlDocument,
     importGQLDocument,
     importGQLDocumentWithNamespace,
     RootResolverConstraint,
   )
 where
 
-import Data.ByteString.Lazy.Char8 (ByteString)
 import Data.Morpheus.CodeGen.Server
   ( CodeGenConfig (..),
     gqlDocument,
     importServerTypeDefinitions,
   )
-import Data.Morpheus.Server
-  ( RootResolverConstraint,
-    printSchema,
-  )
-import Data.Morpheus.Types (RootResolver)
+import Data.Morpheus.Server (RootResolverConstraint)
 import Language.Haskell.TH
 import Relude hiding (ByteString, readFile)
 
@@ -29,10 +23,3 @@
 
 importGQLDocumentWithNamespace :: FilePath -> Q [Dec]
 importGQLDocumentWithNamespace = importServerTypeDefinitions CodeGenConfig {namespace = True}
-
-{-# DEPRECATED toGraphQLDocument "use Data.Morpheus.Server.printSchema" #-}
-toGraphQLDocument ::
-  RootResolverConstraint m event query mut sub =>
-  proxy (RootResolver m event query mut sub) ->
-  ByteString
-toGraphQLDocument = printSchema
diff --git a/src/Data/Morpheus/Kind.hs b/src/Data/Morpheus/Kind.hs
--- a/src/Data/Morpheus/Kind.hs
+++ b/src/Data/Morpheus/Kind.hs
@@ -6,51 +6,17 @@
 -- | associating types to GraphQL Kinds
 module Data.Morpheus.Kind
   ( SCALAR,
-    OBJECT,
-    ENUM,
     WRAPPER,
-    UNION,
-    INPUT_OBJECT,
     DerivingKind (..),
-    GQL_KIND,
-    OUTPUT,
-    INPUT,
-    INTERFACE,
     TYPE,
     CUSTOM,
   )
 where
 
 import Data.Morpheus.Server.Types
-
-{-# DEPRECATED GQL_KIND "use: DerivingKind" #-}
-
-type GQL_KIND = DerivingKind
-
-{-# DEPRECATED INTERFACE "use: deriving(GQLType), will be automatically inferred" #-}
-
-type INTERFACE = TYPE
-
-{-# DEPRECATED ENUM "use: deriving(GQLType), will be automatically inferred" #-}
-
-type ENUM = TYPE
-
-{-# DEPRECATED OUTPUT "use: deriving(GQLType), will be automatically inferred" #-}
-
-type OUTPUT = TYPE
-
-{-# DEPRECATED INPUT "use: deriving(GQLType), will be automatically inferred" #-}
-
-type INPUT = TYPE
-
-{-# DEPRECATED INPUT_OBJECT "use: deriving(GQLType), will be automatically inferred" #-}
-
-type INPUT_OBJECT = TYPE
-
-{-# DEPRECATED UNION "use: deriving(GQLType), IMPORTANT: only types with <type constructor name><constructor name> will sustain their form, other union constructors will be wrapped inside an new object" #-}
-
-type UNION = TYPE
-
-{-# DEPRECATED OBJECT "use: deriving(GQLType), will be automatically inferred" #-}
-
-type OBJECT = TYPE
+  ( CUSTOM,
+    DerivingKind (..),
+    SCALAR,
+    TYPE,
+    WRAPPER,
+  )
diff --git a/src/Data/Morpheus/NamedResolvers.hs b/src/Data/Morpheus/NamedResolvers.hs
--- a/src/Data/Morpheus/NamedResolvers.hs
+++ b/src/Data/Morpheus/NamedResolvers.hs
@@ -2,6 +2,7 @@
   ( ResolveNamed (..),
     NamedResolverT (..),
     resolve,
+    useBatched,
   )
 where
 
@@ -9,4 +10,5 @@
   ( NamedResolverT (..),
     ResolveNamed (..),
     resolve,
+    useBatched,
   )
diff --git a/src/Data/Morpheus/Types.hs b/src/Data/Morpheus/Types.hs
--- a/src/Data/Morpheus/Types.hs
+++ b/src/Data/Morpheus/Types.hs
@@ -3,15 +3,7 @@
 
 -- | GQL Types
 module Data.Morpheus.Types
-  ( GQLType
-      ( KIND,
-        description,
-        getDescriptions,
-        typeOptions,
-        getDirectives,
-        defaultValues,
-        directives
-      ),
+  ( GQLType (..),
     EncodeScalar (..),
     EncodeWrapper (..),
     DecodeScalar (..),
@@ -22,7 +14,6 @@
     ScalarValue (..),
     RootResolver (..),
     constRes,
-    constMutRes,
     Undefined,
     Resolver,
     QUERY,
@@ -30,26 +21,15 @@
     SUBSCRIPTION,
     lift,
     liftEither,
-    failRes,
     WithOperation,
     publish,
     subscribe,
-    unsafeInternalContext,
     ResolverContext (..),
     ResolverO,
     ComposedResolver,
     ResolverQ,
     ResolverM,
     ResolverS,
-    ResolveQ,
-    ResolveM,
-    ResolveS,
-    Res,
-    MutRes,
-    SubRes,
-    IORes,
-    IOMutRes,
-    IOSubRes,
     SubscriptionField,
     App,
     RenderGQL,
@@ -59,11 +39,6 @@
     NamedResolvers (..),
 
     -- * GQLType naming configuration
-    GQLTypeOptions,
-    defaultTypeOptions,
-    fieldLabelModifier,
-    constructorTagModifier,
-    typeNameModifier,
     defaultRootResolver,
 
     -- * GQL directives API
@@ -79,9 +54,11 @@
     -- * default GQL directives
     GQLDirective (..),
     Deprecated (..),
-    dropNamespaceOptions,
     DropNamespace (..),
     Rename (..),
+    DefaultValue (..),
+    GQLError,
+    MonadError,
   )
 where
 
@@ -92,6 +69,7 @@
     Arg (..),
     DecodeScalar (..),
     DecodeWrapper (..),
+    DefaultValue (..),
     Deprecated (..),
     Describe (..),
     DropNamespace (..),
@@ -101,7 +79,6 @@
     GQLRequest (..),
     GQLResponse (..),
     GQLType (..),
-    GQLTypeOptions (..),
     ID (..),
     MUTATION,
     Prefixes (..),
@@ -119,67 +96,14 @@
     VisitField (..),
     VisitType (..),
     WithOperation,
-    defaultTypeOptions,
-    dropNamespaceOptions,
     enumDirective,
     fieldDirective,
     render,
     subscribe,
     typeDirective,
-    unsafeInternalContext,
   )
 import Data.Morpheus.Types.Internal.AST (GQLError)
 import Relude hiding (Undefined)
-
-{-# DEPRECATED Res "use ResolverQ" #-}
-
-type Res = Resolver QUERY
-
-{-# DEPRECATED MutRes "use ResolverM" #-}
-
-type MutRes = Resolver MUTATION
-
-{-# DEPRECATED SubRes "use ResolverS" #-}
-
-type SubRes = Resolver SUBSCRIPTION
-
-{-# DEPRECATED IORes "use ResolverQ" #-}
-
-type IORes e = Res e IO
-
-{-# DEPRECATED IOMutRes "use ResolverM" #-}
-
-type IOMutRes e = MutRes e IO
-
-{-# DEPRECATED IOSubRes "use ResolverS" #-}
-
-type IOSubRes e = SubRes e IO
-
-{-# DEPRECATED ResolveQ "use ResolverQ" #-}
-
-type ResolveQ e m a = ResolverQ e m a
-
-{-# DEPRECATED ResolveM "use ResolverM" #-}
-
-type ResolveM e m a = ResolverM e m a
-
-{-# DEPRECATED ResolveS "use ResolverS" #-}
-
-type ResolveS e m a = ResolverS e m a
-
-constMutRes :: Monad m => [e] -> a -> args -> ResolverM e m a
-constMutRes events v = const $ do
-  publish events
-  pure v
-
-{-# DEPRECATED failRes "use \"fail\" from \"MonadFail\"" #-}
-failRes ::
-  ( Monad m,
-    WithOperation o
-  ) =>
-  String ->
-  Resolver o e m a
-failRes = fail
 
 liftEither :: (MonadTrans t, Monad (t m), MonadError GQLError (t m)) => Monad m => m (Either String a) -> t m a
 liftEither x = lift x >>= either (throwError . fromString) pure
diff --git a/test/Feature/Input/DefaultValues.hs b/test/Feature/Input/DefaultValues.hs
--- a/test/Feature/Input/DefaultValues.hs
+++ b/test/Feature/Input/DefaultValues.hs
@@ -19,7 +19,8 @@
 import Data.Morpheus (interpreter)
 import Data.Morpheus.Document (importGQLDocument)
 import Data.Morpheus.Types
-  ( GQLRequest,
+  ( DefaultValue (..),
+    GQLRequest,
     GQLResponse,
     ID (..),
     RootResolver (..),
diff --git a/test/Feature/NamedResolvers/Deities.hs b/test/Feature/NamedResolvers/Deities.hs
--- a/test/Feature/NamedResolvers/Deities.hs
+++ b/test/Feature/NamedResolvers/Deities.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -13,6 +14,7 @@
   )
 where
 
+import Control.Monad.Except
 import Data.Morpheus (deriveApp)
 import Data.Morpheus.Document
   ( importGQLDocument,
@@ -21,10 +23,12 @@
   ( NamedResolverT,
     ResolveNamed (..),
     resolve,
+    useBatched,
   )
 import Data.Morpheus.Types
   ( App,
     Arg (..),
+    GQLError,
     ID,
     NamedResolvers (..),
     Undefined,
@@ -33,35 +37,39 @@
 
 importGQLDocument "test/Feature/NamedResolvers/deities.gql"
 
-instance Monad m => ResolveNamed m Power where
-  type Dep Power = ID
-  resolveNamed "sp" = pure Shapeshifting
-  resolveNamed _ = pure Thunderbolt
+getPower :: (Eq a, IsString a, Applicative f) => a -> f Power
+getPower "sp" = pure Shapeshifting
+getPower _ = pure Thunderbolt
 
-instance Monad m => ResolveNamed m (Deity (NamedResolverT m)) where
-  type Dep (Deity (NamedResolverT m)) = ID
-  resolveNamed "zeus" =
-    pure
+getDeity :: (Eq a, Monad m, Applicative f, IsString a) => a -> f (Maybe (Deity (NamedResolverT m)))
+getDeity "zeus" =
+  pure $
+    Just
       Deity
         { name = resolve (pure "Zeus"),
           power = resolve (pure ["tb"])
         }
-  resolveNamed "morpheus" =
-    pure
+getDeity "morpheus" =
+  pure $
+    Just
       Deity
         { name = resolve (pure "Morpheus"),
           power = resolve (pure ["sp"])
         }
-  resolveNamed _ =
-    pure
-      Deity
-        { name = resolve (pure "Unknown"),
-          power = resolve (pure [])
-        }
+getDeity _ = pure Nothing
 
-instance Monad m => ResolveNamed m (Query (NamedResolverT m)) where
+instance Monad m => ResolveNamed m Power where
+  type Dep Power = ID
+  resolveNamed = getPower
+
+instance MonadError GQLError m => ResolveNamed m (Deity (NamedResolverT m)) where
+  type Dep (Deity (NamedResolverT m)) = ID
+  resolveBatched = traverse getDeity
+  resolveNamed = useBatched
+
+instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where
   type Dep (Query (NamedResolverT m)) = ()
-  resolveNamed () =
+  resolveNamed _ =
     pure
       Query
         { deity = \(Arg uid) -> resolve (pure (Just uid)),
@@ -69,8 +77,4 @@
         }
 
 deitiesApp :: App () IO
-deitiesApp =
-  deriveApp
-    ( NamedResolvers ::
-        NamedResolvers IO () Query Undefined Undefined
-    )
+deitiesApp = deriveApp (NamedResolvers :: NamedResolvers IO () Query Undefined Undefined)
diff --git a/test/Feature/NamedResolvers/Entities.hs b/test/Feature/NamedResolvers/Entities.hs
--- a/test/Feature/NamedResolvers/Entities.hs
+++ b/test/Feature/NamedResolvers/Entities.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -11,6 +12,7 @@
   )
 where
 
+import Control.Monad.Except
 import Data.Morpheus (deriveApp)
 import Data.Morpheus.NamedResolvers
   ( NamedResolverT,
@@ -20,6 +22,7 @@
 import Data.Morpheus.Types
   ( App,
     Arg (..),
+    GQLError,
     GQLType (..),
     ID,
     NamedResolvers (..),
@@ -37,11 +40,14 @@
       GQLType
     )
 
-instance Monad m => ResolveNamed m (Entity (NamedResolverT m)) where
+getEntity :: (MonadError GQLError m) => ID -> m (Entity (NamedResolverT m))
+getEntity "zeus" = pure $ EntityDeity (resolve $ pure "zeus")
+getEntity "morpheus" = pure $ EntityDeity (resolve $ pure "morpheus")
+getEntity x = pure $ EntityRealm (resolve $ pure x)
+
+instance (MonadError GQLError m) => ResolveNamed m (Entity (NamedResolverT m)) where
   type Dep (Entity (NamedResolverT m)) = ID
-  resolveNamed "zeus" = pure $ EntityDeity (resolve $ pure "zeus")
-  resolveNamed "morpheus" = pure $ EntityDeity (resolve $ pure "morpheus")
-  resolveNamed x = pure $ EntityRealm (resolve $ pure x)
+  resolveNamed = getEntity
 
 -- QUERY
 data Query m = Query
@@ -53,20 +59,12 @@
       GQLType
     )
 
-instance Monad m => ResolveNamed m (Query (NamedResolverT m)) where
+instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where
   type Dep (Query (NamedResolverT m)) = ()
-  resolveNamed () =
+  resolveNamed _ =
     pure
       Query
-        { entities =
-            resolve
-              ( pure
-                  [ "zeus",
-                    "morpheus",
-                    "olympus",
-                    "dreams"
-                  ]
-              ),
+        { entities = resolve (pure ["zeus", "morpheus", "olympus", "dreams"]),
           entity = \(Arg uid) -> resolve (pure (Just uid))
         }
 
diff --git a/test/Feature/NamedResolvers/Realms.hs b/test/Feature/NamedResolvers/Realms.hs
--- a/test/Feature/NamedResolvers/Realms.hs
+++ b/test/Feature/NamedResolvers/Realms.hs
@@ -1,6 +1,7 @@
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE DeriveGeneric #-}
 {-# LANGUAGE DuplicateRecordFields #-}
+{-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -14,6 +15,7 @@
   )
 where
 
+import Control.Monad.Except
 import Data.Morpheus
   ( deriveApp,
   )
@@ -24,10 +26,12 @@
   ( NamedResolverT,
     ResolveNamed (..),
     resolve,
+    useBatched,
   )
 import Data.Morpheus.Types
   ( App,
     Arg (..),
+    GQLError,
     ID,
     NamedResolvers (..),
     Undefined,
@@ -36,48 +40,41 @@
 
 importGQLDocument "test/Feature/NamedResolvers/realms.gql"
 
-instance Monad m => ResolveNamed m (Realm (NamedResolverT m)) where
-  type Dep (Realm (NamedResolverT m)) = ID
-  resolveNamed "olympus" =
-    pure
+getRealm :: (MonadError GQLError m) => ID -> m (Maybe (Realm (NamedResolverT m)))
+getRealm "olympus" =
+  pure $
+    Just
       Realm
         { name = resolve (pure "Mount Olympus"),
           owner = resolve (pure "zeus")
         }
-  resolveNamed "dreams" =
-    pure
+getRealm "dreams" =
+  pure $
+    Just
       Realm
         { name = resolve (pure "Fictional world of dreams"),
           owner = resolve (pure "morpheus")
         }
-  resolveNamed _ =
-    pure
-      Realm
-        { name = resolve (pure "Unknown"),
-          owner = resolve (pure "none")
-        }
+getRealm _ = pure Nothing
 
-instance Monad m => ResolveNamed m (Deity (NamedResolverT m)) where
+instance MonadError GQLError m => ResolveNamed m (Realm (NamedResolverT m)) where
+  type Dep (Realm (NamedResolverT m)) = ID
+  resolveBatched = traverse getRealm
+  resolveNamed = useBatched
+
+instance (MonadError GQLError m) => ResolveNamed m (Deity (NamedResolverT m)) where
   type Dep (Deity (NamedResolverT m)) = ID
-  resolveNamed "zeus" =
-    pure
-      Deity
-        { realm = resolve (pure "olympus")
-        }
-  resolveNamed "morpheus" =
-    pure
-      Deity
-        { realm = resolve (pure "dreams")
-        }
-  resolveNamed x =
-    pure
-      Deity
-        { realm = resolve (pure x)
-        }
+  resolveBatched = traverse getDeity
+  resolveNamed = useBatched
 
-instance Monad m => ResolveNamed m (Query (NamedResolverT m)) where
+getDeity :: (MonadError GQLError m) => ID -> m (Maybe (Deity (NamedResolverT m)))
+getDeity "zeus" = pure $ Just Deity {realm = resolve (pure "olympus")}
+getDeity "morpheus" = pure $ Just Deity {realm = resolve (pure "dreams")}
+getDeity _ = pure Nothing
+
+instance MonadError GQLError m => ResolveNamed m (Query (NamedResolverT m)) where
   type Dep (Query (NamedResolverT m)) = ()
-  resolveNamed () =
+  resolveNamed _ =
     pure
       Query
         { realm = \(Arg arg) -> resolve (pure (Just arg)),
diff --git a/test/Feature/NamedResolvers/tests/deity-simple/response.json b/test/Feature/NamedResolvers/tests/deity-simple/response.json
--- a/test/Feature/NamedResolvers/tests/deity-simple/response.json
+++ b/test/Feature/NamedResolvers/tests/deity-simple/response.json
@@ -1,8 +1,5 @@
 {
   "data": {
-    "deity": {
-      "name": "Unknown",
-      "power": []
-    }
+    "deity": null
   }
 }
diff --git a/test/Feature/NamedResolvers/tests/realm-simple/response.json b/test/Feature/NamedResolvers/tests/realm-simple/response.json
--- a/test/Feature/NamedResolvers/tests/realm-simple/response.json
+++ b/test/Feature/NamedResolvers/tests/realm-simple/response.json
@@ -1,7 +1,5 @@
 {
   "data": {
-    "realm": {
-      "name": "Unknown"
-    }
+    "realm": null
   }
 }
diff --git a/test/Rendering/Schema.hs b/test/Rendering/Schema.hs
--- a/test/Rendering/Schema.hs
+++ b/test/Rendering/Schema.hs
@@ -22,6 +22,7 @@
   )
 import Data.Morpheus.Types
   ( DecodeScalar (..),
+    DefaultValue (..),
     DropNamespace (..),
     ID,
     Rename (..),
diff --git a/test/Rendering/schema.gql b/test/Rendering/schema.gql
--- a/test/Rendering/schema.gql
+++ b/test/Rendering/schema.gql
@@ -20,7 +20,7 @@
 
 input Coordinates @TestDirective(name: "SomeName") {
   latitude: TestScalar!
-  longitude: Int! @TestDirective(name: "SomeName")
+  longitude: Int! = 4 @TestDirective(name: "SomeName")
 }
 
 type Address {
