diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Change log
 
+## 0.3.0.0
+
+* Remove deprecated `(.@)` operator
+* Message metadata is now of type `[SeriesElem]` instead of `[Series]`
+  * _Should_ be backwards-compatible based on library's recommended usage
+
 ## 0.2.0.2
 
 * Support `text-2.0`
diff --git a/library/Control/Monad/Logger/Aeson.hs b/library/Control/Monad/Logger/Aeson.hs
--- a/library/Control/Monad/Logger/Aeson.hs
+++ b/library/Control/Monad/Logger/Aeson.hs
@@ -9,7 +9,7 @@
 
     -- * Types
     Message(..)
-  , (.@)
+  , SeriesElem
   , LoggedMessage(..)
 
     -- * Logging functions
@@ -91,7 +91,7 @@
 import Control.Monad.Catch (MonadMask, MonadThrow)
 import Control.Monad.IO.Class (MonadIO(liftIO))
 import Control.Monad.Logger.Aeson.Internal
-  ( LoggedMessage(..), Message(..), OutputOptions(..), (.@), KeyMap
+  ( LoggedMessage(..), Message(..), OutputOptions(..), KeyMap, SeriesElem
   )
 import Data.Aeson (KeyValue((.=)), Value(String))
 import Data.Aeson.Types (Pair)
diff --git a/library/Control/Monad/Logger/Aeson/Internal.hs b/library/Control/Monad/Logger/Aeson/Internal.hs
--- a/library/Control/Monad/Logger/Aeson/Internal.hs
+++ b/library/Control/Monad/Logger/Aeson/Internal.hs
@@ -1,7 +1,7 @@
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE CPP #-}
 {-# LANGUAGE DeriveGeneric #-}
-{-# LANGUAGE DerivingStrategies #-}
+{-# LANGUAGE DerivingVia #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE NamedFieldPuns #-}
 {-# LANGUAGE OverloadedStrings #-}
@@ -13,7 +13,7 @@
 
     -- ** @Message@-related
     Message(..)
-  , (.@)
+  , SeriesElem(..)
   , LoggedMessage(..)
   , threadContextStore
   , logCS
@@ -101,15 +101,14 @@
 keyMapUnion :: KeyMap v -> KeyMap v -> KeyMap v
 keyMapUnion = AesonCompat.union
 
--- | Synonym for '(.=)' from @aeson@.
---
--- This operator is deprecated and will be removed in a future version. Please
--- use '(.=)' instead, which is re-exported from "Data.Aeson".
+-- | A single key-value pair, where the value is encoded JSON. This is a more
+-- restricted version of 'Series': a 'SeriesElem' encapsulates exactly one
+-- key-value pair, whereas a 'Series' encapsulates zero or more key-value pairs.
 --
--- @since 0.1.0.0
-(.@) :: (KeyValue kv, ToJSON v) => Key -> v -> kv
-(.@) = (.=)
-{-# DEPRECATED (.@) "This operator will be removed in a future major version." #-}
+-- Values of this type are only created via '(.=)' from @aeson@.
+newtype SeriesElem = UnsafeSeriesElem
+  { unSeriesElem :: Series
+  } deriving (KeyValue) via Series
 
 -- | This type is the Haskell representation of each JSON log message produced
 -- by this library.
@@ -239,9 +238,9 @@
               loggedMessageText :# keyMapToSeriesList loggedMessageMeta
         }
 
-    keyMapToSeriesList :: KeyMap Value -> [Series]
+    keyMapToSeriesList :: KeyMap Value -> [SeriesElem]
     keyMapToSeriesList =
-      fmap (uncurry Aeson.pair . fmap Aeson.toEncoding) . keyMapToList
+      fmap (uncurry (.=)) . keyMapToList
 
     LoggedMessage
       { loggedMessageTimestamp
@@ -254,7 +253,7 @@
       } = loggedMessage
 
 -- | A 'Message' captures a textual component and a metadata component. The
--- metadata component is a list of 'Series' to support tacking on arbitrary
+-- metadata component is a list of 'SeriesElem' to support tacking on arbitrary
 -- structured data to a log message.
 --
 -- With the @OverloadedStrings@ extension enabled, 'Message' values can be
@@ -279,7 +278,7 @@
 -- helps!
 --
 -- @since 0.1.0.0
-data Message = Text :# [Series]
+data Message = Text :# [SeriesElem]
 infixr 5 :#
 
 instance IsString Message where
@@ -451,7 +450,7 @@
     <> ( if null messageMeta then
            mempty
          else
-           Aeson.pairStr "meta" $ Aeson.pairs $ mconcat messageMeta
+           Aeson.pairStr "meta" $ Aeson.pairs $ foldMap unSeriesElem messageMeta
        )
   where
   messageText :# messageMeta = message
diff --git a/monad-logger-aeson.cabal b/monad-logger-aeson.cabal
--- a/monad-logger-aeson.cabal
+++ b/monad-logger-aeson.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           monad-logger-aeson
-version:        0.2.0.2
+version:        0.3.0.0
 synopsis:       JSON logging using monad-logger interface
 description:    @monad-logger-aeson@ provides structured JSON logging using @monad-logger@'s
                 interface.
diff --git a/package.yaml b/package.yaml
--- a/package.yaml
+++ b/package.yaml
@@ -1,5 +1,5 @@
 name: monad-logger-aeson
-version: '0.2.0.2'
+version: '0.3.0.0'
 github: "jship/monad-logger-aeson"
 license: MIT
 license-file: LICENSE.md
