diff --git a/mig-extra.cabal b/mig-extra.cabal
--- a/mig-extra.cabal
+++ b/mig-extra.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:               mig-extra
-version:            0.1.0.1
+version:            0.1.1.0
 synopsis:           Extra utils for Mig core library
 description:        Extra utils for mig server library
 category:           Web
@@ -62,8 +62,8 @@
     , http-api-data
     , http-media
     , http-types
-    , mig >=0.2.0.1
-    , mig-client
+    , mig >=0.2.1.0
+    , mig-client >=0.1.1.0
     , openapi3
     , template-haskell
     , text
diff --git a/src/Mig/Extra/Plugin/Trace.hs b/src/Mig/Extra/Plugin/Trace.hs
--- a/src/Mig/Extra/Plugin/Trace.hs
+++ b/src/Mig/Extra/Plugin/Trace.hs
@@ -16,6 +16,8 @@
   logHttpBy,
   ppReq,
   Verbosity (..),
+  withLogs,
+  withLogsBy,
 ) where
 
 import Control.Monad
@@ -56,6 +58,12 @@
 ifLevel current level vals
   | level <= current = vals
   | otherwise = []
+
+withLogs :: (MonadIO m) => Server m -> Server m
+withLogs = applyPlugin (logHttp V2)
+
+withLogsBy :: (MonadIO m) => (Json.Value -> m ()) -> Server m -> Server m
+withLogsBy toLogItem = applyPlugin (logHttpBy toLogItem V2)
 
 -------------------------------------------------------------------------------------
 -- through
diff --git a/src/Mig/Extra/Server/Common.hs b/src/Mig/Extra/Server/Common.hs
--- a/src/Mig/Extra/Server/Common.hs
+++ b/src/Mig/Extra/Server/Common.hs
@@ -25,6 +25,9 @@
   notImplemented,
   redirect,
   setHeader,
+  setCookie,
+  SetCookie (..),
+  defCookie,
 
   -- ** methods
   Send (..),
@@ -38,6 +41,13 @@
   HEAD,
   TRACE,
 
+  -- ** safe URLs
+  UrlOf,
+  ToUrl (..),
+  Url (..),
+  renderUrl,
+  (:|) (..),
+
   -- ** path and query
 
   -- | Build API for routes with queries and captures.
@@ -48,6 +58,8 @@
   QueryFlag (..),
   Optional (..),
   Header (..),
+  OptionalHeader (..),
+  Cookie (..),
   PathInfo (..),
   FullPathInfo (..),
   RawRequest (..),
@@ -122,7 +134,9 @@
 import Control.Monad.Trans.Class as X
 import Data.Aeson as X (FromJSON (..), ToJSON (..))
 import Data.Default as X
+import Data.Maybe as X
 import Data.OpenApi as X (OpenApi, ToParamSchema (..), ToSchema (..))
+import Data.String as X
 import Data.Text as X (Text)
 import GHC.Generics as X (Generic)
 import Mig.Extra.Derive as X
diff --git a/src/Mig/Extra/Server/Html.hs b/src/Mig/Extra/Server/Html.hs
--- a/src/Mig/Extra/Server/Html.hs
+++ b/src/Mig/Extra/Server/Html.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE DeriveAnyClass #-}
 {-# LANGUAGE UndecidableInstances #-}
 
 -- | Html servers
@@ -16,6 +17,9 @@
   Resp (..),
   RespOr,
 
+  -- * utils
+  Link (..),
+
   -- * re-exports
   Body (..),
   module X,
@@ -24,11 +28,13 @@
 import Mig.Core (Body (..))
 import Mig.Core qualified as Core
 import Mig.Extra.Server.Common as X
+import Text.Blaze.Html5 qualified as H
+import Text.Blaze.Html5.Attributes qualified as HA
 
 -- response
 
 newtype Resp a = Resp (Core.Resp Html a)
-  deriving newtype (IsResp)
+  deriving newtype (IsResp, Eq, Show, Functor)
 
 type RespOr err a = Either (Resp err) (Resp a)
 
@@ -40,3 +46,16 @@
 type Options m a = Send OPTIONS m (Resp a)
 type Head m a = Send HEAD m (Resp a)
 type Trace m a = Send TRACE m (Resp a)
+
+{-| HTML a-links, this type is useful for using
+with template engines that rely on @ToJSON@ instance.
+Also it can be rendered as Html with @ToMarkup@ instance.
+-}
+data Link = Link
+  { href :: Url
+  , name :: Text
+  }
+  deriving (Generic, ToJSON)
+
+instance ToMarkup Link where
+  toMarkup link = H.a H.! HA.href (renderUrl link.href) $ H.text link.name
diff --git a/src/Mig/Extra/Server/Html/IO.hs b/src/Mig/Extra/Server/Html/IO.hs
--- a/src/Mig/Extra/Server/Html/IO.hs
+++ b/src/Mig/Extra/Server/Html/IO.hs
@@ -14,6 +14,9 @@
   Resp (..),
   RespOr,
 
+  -- * utils
+  Link (..),
+
   -- * re-exports
   Body (..),
   module X,
@@ -21,7 +24,7 @@
 
 import Mig.Core (Body (..))
 import Mig.Extra.Server.Common as X
-import Mig.Extra.Server.Html (Resp (..), RespOr)
+import Mig.Extra.Server.Html (Link (..), Resp (..), RespOr)
 
 type Get a = Send GET IO (Resp a)
 type Post a = Send POST IO (Resp a)
diff --git a/src/Mig/Extra/Server/Json.hs b/src/Mig/Extra/Server/Json.hs
--- a/src/Mig/Extra/Server/Json.hs
+++ b/src/Mig/Extra/Server/Json.hs
@@ -41,10 +41,10 @@
 -- response
 
 newtype Resp a = Resp (Core.Resp Json a)
-  deriving newtype (IsResp, Functor)
+  deriving newtype (IsResp, Eq, Show, Functor)
 
 newtype RespOr err a = RespOr (Core.RespOr Json err a)
-  deriving newtype (IsResp, Functor)
+  deriving newtype (IsResp, Eq, Show, Functor)
 
 -- request
 
