diff --git a/ipython-kernel.cabal b/ipython-kernel.cabal
--- a/ipython-kernel.cabal
+++ b/ipython-kernel.cabal
@@ -1,5 +1,5 @@
 name:                ipython-kernel
-version:             0.10.2.0
+version:             0.10.2.1
 synopsis:            A library for creating kernels for IPython frontends
 
 description:         ipython-kernel is a library for communicating with frontends for the interactive IPython framework. It is used extensively in IHaskell, the interactive Haskell environment.
diff --git a/src/IHaskell/IPython/Types.hs b/src/IHaskell/IPython/Types.hs
--- a/src/IHaskell/IPython/Types.hs
+++ b/src/IHaskell/IPython/Types.hs
@@ -281,6 +281,10 @@
       _                     -> fail ("Unknown message type: " ++ show s)
   parseJSON _ = fail "Must be a string."
 
+-- | Kernel language info, see
+--
+-- * https://jupyter-client.readthedocs.io/en/stable/messaging.html#kernel-info
+-- * https://jupyter-client.readthedocs.io/en/stable/wrapperkernels.html#MyKernel.language_info
 data LanguageInfo =
        LanguageInfo
          { languageName :: String        -- ^ The language name, e.g. "haskell"
@@ -288,6 +292,7 @@
          , languageFileExtension :: String        -- ^ .hs
          , languageCodeMirrorMode :: String        -- ^ 'ihaskell'. can be 'null'
          , languagePygmentsLexer :: String
+         , languageMimeType :: String       -- "text/x-haskell"
          }
   deriving (Show, Eq)
 
@@ -298,6 +303,7 @@
                   , "file_extension" .= languageFileExtension info
                   , "codemirror_mode" .= languageCodeMirrorMode info
                   , "pygments_lexer" .= languagePygmentsLexer info
+                  , "mimetype" .= languageMimeType info
                   ]
 
 data CodeReview = CodeComplete
@@ -317,6 +323,9 @@
                     ]
 
 -- | A message used to communicate with the IPython frontend.
+--
+-- See
+-- https://jupyter-client.readthedocs.io/en/stable/messaging.html
 data Message =
              -- | A request from a frontend for information about the kernel.
               KernelInfoRequest { header :: MessageHeader }
@@ -805,8 +814,8 @@
   show MimeMarkdown = "text/markdown"
   show MimeJavascript = "application/javascript"
   show MimeJson = "application/json"
-  show MimeVega = "application/vnd.vega.v2+json"
-  show MimeVegalite = "application/vnd.vegalite.v2+json"
+  show MimeVega = "application/vnd.vega.v5+json"
+  show MimeVegalite = "application/vnd.vegalite.v4+json"
   show MimeVdom = "application/vdom.v1+json"
   show (MimeCustom custom) = Text.unpack custom
 
@@ -822,8 +831,8 @@
   readsPrec _ "text/markdown" = [(MimeMarkdown, "")]
   readsPrec _ "application/javascript" = [(MimeJavascript, "")]
   readsPrec _ "application/json" = [(MimeJson, "")]
-  readsPrec _ "application/vnd.vega.v2+json" = [(MimeVega, "")]
-  readsPrec _ "application/vnd.vegalite.v1+json" = [(MimeVegalite, "")]
+  readsPrec _ "application/vnd.vega.v5+json" = [(MimeVega, "")]
+  readsPrec _ "application/vnd.vegalite.v4+json" = [(MimeVegalite, "")]
   readsPrec _ "application/vdom.v1+json" = [(MimeVdom, "")]
   readsPrec _ t = [(MimeCustom (Text.pack t), "")]
 
diff --git a/src/IHaskell/IPython/ZeroMQ.hs b/src/IHaskell/IPython/ZeroMQ.hs
--- a/src/IHaskell/IPython/ZeroMQ.hs
+++ b/src/IHaskell/IPython/ZeroMQ.hs
@@ -344,6 +344,6 @@
     hdr = header msg
     parentHeaderStr = maybe "{}" encodeStrict $ mhParentHeader hdr
     idents = mhIdentifiers hdr
-    metadata = "{}"
+    metadata = let Metadata mdobject = mhMetadata hdr in encodeStrict mdobject
     content = encodeStrict msg
     headStr = encodeStrict hdr
