diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,77 @@
 For the latest version of this document, please see
 [https://github.com/DougBurke/hvega/blob/master/hvega/CHANGELOG.md](https://github.com/DougBurke/hvega/blob/master/hvega/CHANGELOG.md).
 
+## 0.9.0.0
+
+The Vega-Lite tests are now validated against version 4.12 of the
+Vega-Lite schema.
+
+### New Constructors
+
+Support for arcs has been added: the `Arc` type has been added to
+`Mark`; `Theta`, `Theta2`, `R`, and `R2` have been added to
+`Position`; and `MInnerRadius`, `MOuterRadius`, `MPadAngle`,
+`MRadius2`, `MRadiusOffset`, `MRadius2Offset`, `MTheta2`,
+`MThetaOffset`, and `MTheta2Offset` added to `MarkProperty`.
+`ArcStyle` has been added to `ConfigurationProperty`.
+
+Support for ARIA attributes has been added to a number of features
+(e.g. `Aria` and `AriaDescription` for `AxisConfig` and `MAria`,
+`MAriaDescription`, `MAriaRole`, `MAriaRoleDescription` for
+`MarkProperty`, `AriaStyle` for `ConfigurationProperty`).  The
+`ariaDescrption` encoding has been added, along with the
+`AriaDescriptionChannel`.
+
+The `angle` encoding channel has been added for text and point marks.
+
+The `Channel` type has gained `ChAngle`, `ChTheta`, `ChTheta2`,
+`ChRadius`, `ChRadius`', 'ChDescription', and `ChURL`.
+
+Layers have been added to `Arrangement` (`Layer`) and to `RepeatFields`
+(`LayerFields`).
+
+The `MRepeatDatum` and `MDatum`, `PRepeatDatum` and `PDatum`, and
+`TRepeatDatum` and `TDatum` pairs have been added to `MarkChannel`,
+`PositionChannel`, and `TextChannel` respectively.
+
+The `MarkProperty` now has support for labelling the X (or X2)
+coordinate as the "width" of the plot and Y (or Y2) as the "height" of
+the plot. See `MXWidth`, `MX2Width`, `MYHeight`, and `MY2Height`.
+
+Improved support for tick scales: `TickCount` and `TickCountTime` have
+been added to `AxisConfig`, `AxTickCountTime` has been added to
+`AxisProperty`, `LTickCountTime` has been added to `LegendProperty`,
+and `LeTickCountTime` has been added to `LegendConfig`.
+
+Add support for width and height to scale's range, with the `RHeight` and
+`RWidth` constructors. The `RPair` constructor has been added as an
+experimental means for specifying just the minimum and maximum values.
+
+`AxisProperty` has gained `AxFormatAsCustom`. `AxisConfig` has gained
+`Format`, `FormatAsNum`, `FormatAsTemporal`, and `FormatAsCustom`.
+`LegendProperty` has gained `LFormatAsCustom`. `HeaderProperty` has
+gained `HFormatAsCustom`. `TextChannel` has gained `TFormatAsCustom`.
+The `ConfigurationProperty` type has a new option to configure support
+for custom format types (`CustomFormatStyle`).
+
+`AxisConfig` and `AxisProperty` have gained new cap styles:
+`DomainCap`, `GridCap`, `TickCap` and `AxDomainCap`, `AxGridCap`,
+`AxTickCap` respectively.
+
+The `TZIndex` option of `TitleConfig` can now be used with `TitleStyle`
+(prior to Vega-Lite 4.12 it was only supported when used with
+`title`). The `LeZIndex` type has been added to `LegendConfig`.
+
+The `HyperlinkChannel` has gained a number of constructors it was
+missing: `HyBand`, `HyFormat`, `HyFormatAsNum`, `HyFormatAsTemporal`,
+`HyFormatAsCustom`, `HyLabelExpr`, `HyTitle`, and `HyNoTitle`.  A
+similar update has been made to `TextChannel`, which has gained
+`TBand` and `TLabelExpr`.
+
 ## 0.8.0.0
 
 The Vega-Lite tests are now validated against version 4.8 of the
-Vega-Lite schema.
+Vega-Lite Sschema.
 
 The `RepeatStyle` constructor for `ConfigurationProperty` should not
 be used, as its functionality has been moved to `ConcatStyle` in
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,9 +1,9 @@
 # hvega
 
-[![vega-lite version](https://img.shields.io/badge/Vega--Lite-v4.8-purple.svg)](https://vega.github.io/vega-lite/)
+[![vega-lite version](https://img.shields.io/badge/Vega--Lite-v4.12-purple.svg)](https://vega.github.io/vega-lite/)
 
 Create [Vega-Lite](https://vega.github.io/vega-lite/) visualizations in
-Haskell. It targets version 4.8 of the Vega-Lite specification. Note that
+Haskell. It targets version 4.12 of the Vega-Lite specification. Note that
 the module does not include a viewer for these visualizations (which are
 JSON files), but does provide several helper functions, such as
 [toHtmlFile](https://hackage.haskell.org/package/hvega/docs/Graphics-Vega-VegaLite.html#v:toHtmlFile),
diff --git a/hvega.cabal b/hvega.cabal
--- a/hvega.cabal
+++ b/hvega.cabal
@@ -1,5 +1,5 @@
 name:                hvega
-version:             0.8.0.0
+version:             0.9.0.0
 synopsis:            Create Vega-Lite visualizations (version 4) in Haskell.
 description:         This is based on the elm-vegalite package
                      (<http://package.elm-lang.org/packages/gicentre/elm-vegalite/latest>)
@@ -50,6 +50,7 @@
                      tests/specs/gallery/error/*.vl
                      tests/specs/gallery/facet/*.vl
                      tests/specs/gallery/geo/*.vl
+                     tests/specs/gallery/histogram/*.vl
                      tests/specs/gallery/interaction/*.vl
                      tests/specs/gallery/label/*.vl
                      tests/specs/gallery/layer/*.vl
@@ -157,7 +158,7 @@
                        Graphics.Vega.VegaLite.Time
                        Graphics.Vega.VegaLite.Transform
   build-depends:       base >= 4.9 && < 5
-                     , aeson >= 0.11 && < 1.5
+                     , aeson >= 0.11 && < 1.6
                      , text == 1.2.*
                      , unordered-containers == 0.2.*
 
@@ -203,6 +204,7 @@
                        Gallery.Error
                        Gallery.Facet
                        Gallery.Geo
+                       Gallery.Histogram
                        Gallery.Interaction
                        Gallery.Label
                        Gallery.Layer
@@ -212,7 +214,7 @@
                        Gallery.Scatter
                        Gallery.Table
 
-  build-depends:       aeson >= 0.11 && < 1.5
+  build-depends:       aeson >= 0.11 && < 1.6
                      , aeson-pretty == 0.8.*
                      , base >= 4 && < 5
                      , bytestring == 0.10.*
@@ -221,6 +223,7 @@
                      , tasty
                      , tasty-golden >= 2.2 && < 2.4
                      , text == 1.2.*
+                     , unordered-containers >= 0.2 && < 0.3
                      , hvega
 
   default-language:    Haskell2010
diff --git a/hvega.nix b/hvega.nix
--- a/hvega.nix
+++ b/hvega.nix
@@ -1,18 +1,16 @@
 { mkDerivation, aeson, aeson-pretty, base, bytestring, containers
 , filepath, stdenv, tasty, tasty-golden, text, unordered-containers
-, zlib
 }:
 mkDerivation {
   pname = "hvega";
-  version = "0.7.0.0";
+  version = "0.9.0.0";
   src = ./.;
   isLibrary = true;
   isExecutable = true;
   libraryHaskellDepends = [ aeson base text unordered-containers ];
-  executableHaskellDepends = [ zlib ];
   testHaskellDepends = [
     aeson aeson-pretty base bytestring containers filepath tasty
-    tasty-golden text
+    tasty-golden text unordered-containers
   ];
   homepage = "https://github.com/DougBurke/hvega";
   description = "Create Vega-Lite visualizations (version 4) in Haskell";
diff --git a/src/Graphics/Vega/VegaLite.hs b/src/Graphics/Vega/VegaLite.hs
--- a/src/Graphics/Vega/VegaLite.hs
+++ b/src/Graphics/Vega/VegaLite.hs
@@ -14,7 +14,7 @@
 it has been updated to match later versions.  This module allows users
 to create a Vega-Lite specification, targeting __version 4__ of the
 <https://vega.github.io/schema/vega-lite/v4.json JSON schema>.
-Version 0.8 of @hvega@ supports version 4.8 of the Vega-Lite specification.
+Version 0.9 of @hvega@ supports version 4.12 of the Vega-Lite specification.
 
 Although this is based on the Elm module, there are differences, such
 as using type constructors rather than functions for many properties -
@@ -539,6 +539,7 @@
          --
          -- $markprops
 
+       , VL.angle
        , VL.color
        , VL.fill
        , VL.fillOpacity
@@ -607,6 +608,12 @@
        , VL.detail
        , VL.DetailChannel(..)
 
+         -- ** Aria Description Channel
+         --
+
+       , VL.ariaDescription
+       , VL.AriaDescriptionChannel(..)
+
          -- ** Scaling
          --
          -- $scaling
@@ -807,6 +814,10 @@
          --
          -- $update
 
+         -- ** Version 0.9
+         --
+         -- $update0900
+
          -- ** Version 0.8
          --
          -- $update0800
@@ -1203,6 +1214,81 @@
 -- The following section describes how to update code that used
 -- an older version of @hvega@.
 
+-- $update0900
+-- The @0.9.0.0@ release updates @hvega@ to support version 4.12 of
+-- the Vega-Lite schema.
+--
+-- __New constructors__
+--
+-- Support for arcs has been added: the 'VL.Arc' type has been added
+-- to 'VL.Mark'; 'VL.Theta', 'VL.Theta2', 'VL.R', and 'VL.R2' have
+-- been added to 'VL.Position'; and 'VL.MInnerRadius',
+-- 'VL.MOuterRadius', 'VL.MPadAngle', 'VL.MRadius2',
+-- 'VL.MRadiusOffset', 'VL.MRadius2Offset', 'VL.MTheta2',
+-- 'VL.MThetaOffset', and 'VL.MTheta2Offset' added to
+-- 'VL.MarkProperty'. 'VL.ArcStyle' has been added to
+-- 'VL.ConfigurationProperty'.
+--
+-- Support for ARIA attributes has been added to a number of features
+-- (e.g. 'VL.Aria' and 'VL.AriaDescription' for 'VL.AxisConfig' and
+-- 'VL.MAria', 'VL.MAriaDescription', 'VL.MAriaRole', 'VL.MAriaRoleDescription'
+-- for 'VL.MarkProperty', 'VL.AriaStyle' for 'VL.ConfigurationProperty').
+-- The 'VL.ariaDescrption' encoding has been added, along with the
+-- 'VL.AriaDescriptionChannel'.
+--
+-- The 'VL.angle' encoding channel has been added for text and point marks.
+--
+-- The 'VL.Channel' type has gained 'VL.ChAngle', 'VL.ChTheta', 'VL.ChTheta2',
+-- 'VL.ChRadius', 'VL.ChRadius2', 'VL.ChDescription', and 'VL.ChURL'.
+--
+-- Layers have been added to 'VL.Arrangement' ('VL.Layer') and to
+-- 'VL.RepeatFields' ('VL.LayerFields').
+--
+-- The 'VL.MRepeatDatum' and 'VL.MDatum', 'VL.PRepeatDatum' and
+-- 'VL.PDatum', and 'VL.TRepeatDatum' and 'VL.TDatum' pairs have been
+-- added to 'VL.MarkChannel', 'VL.PositionChannel', and
+-- 'VL.TextChannel' respectively.
+--
+-- The 'VL.MarkProperty' now has support for labelling the X (or X2)
+-- coordinate as the \"width\" of the plot and Y (or Y2)
+-- as the \"height\" of the plot. See 'VL.MXWidth', 'VL.MX2Width',
+-- 'VL.MYHeight', and 'VL.MY2Height'.
+--
+-- Improved support for tick scales: 'VL.TickCount' and
+-- 'VL.TickCountTime' have been added to 'VL.AxisConfig',
+-- 'VL.AxTickCountTime' has been added to 'VL.AxisProperty',
+-- 'VL.LTickCountTime' has been added to 'VL.LegendProperty', and
+-- 'VL.LeTickCountTime' has been added to 'VL.LegendConfig'.
+--
+-- The 'VL.ScaleRange' type has now gained three new versions:
+-- (experimental) 'VL.RPair' for defining the axis range,
+-- and 'VL.RHeight' and 'VL.RWidth' for specifying the height 
+-- or width as a signal.
+--
+-- 'VL.AxisProperty' has gained 'VL.AxFormatAsCustom'. 'VL.AxisConfig'
+-- has gained 'VL.Format', 'VL.FormatAsNum', 'VL.FormatAsTemporal',
+-- and 'VL.FormatAsCustom'. 'VL.LegendProperty' has gained
+-- 'VL.LFormatAsCustom'.  'VL.HeaderProperty' has gained
+-- 'VL.HFormatAsCustom'. 'VL.TextChannel' has gained
+-- 'VL.TFormatAsCustom'. The 'VL.ConfigurationProperty' type has a new
+-- option to configure support for custom format types
+-- ('VL.CustomFormatStyle').
+--
+-- 'VL.AxisConfig' and 'VL.AxisProperty' have gained new cap styles:
+-- 'VL.DomainCap', 'VL.GridCap', 'VL.TickCap' and
+-- 'VL.AxDomainCap', 'VL.AxGridCap', 'VL.AxTickCap' respectively.
+--
+-- The 'VL.TZIndex' option of 'VL.TitleConfig' can now be used with
+-- 'VL.TitleStyle' (prior to Vega-Lite 4.12 it was only supported
+-- when used with 'VL.title'). The 'VL.LeZIndex' type has been added
+-- to 'VL.LegendConfig'.
+--
+-- The 'VL.HyperlinkChannel' has gained a number of constructors it was
+-- missing: 'VL.HyBand', 'VL.HyFormat', 'VL.HyFormatAsNum',
+-- 'VL.HyFormatAsTemporal', 'VL.HyFormatAsCustom', 'VL.HyLabelExpr',
+-- 'VL.HyTitle', and 'VL.HyNoTitle'. A similar update has been made
+-- to 'VL.TextChannel', which has gained 'VL.TBand' and 'VL.TLabelExpr'.
+
 -- $update0800
 -- The @0.8.0.0@ release updates @hvega@ to support version 4.8 of
 -- the Vega-Lite schema.
@@ -1303,7 +1389,7 @@
 -- as there are now separate configuration options: 'VL.AxisNamedStyles'
 -- and 'VL.MarkNamedStyles'. The 'VL.AStyle' and 'VL.AxStyle' options have been
 -- added to 'VL.AxisConfig' and 'VL.AxisProperty' respectively.
--- The `VL.StyleLabel` type alias has been added to help the documentation, but
+-- The 'VL.StyleLabel' type alias has been added to help the documentation, but
 -- provides no extra type safety.
 --
 -- __Breaking Change__
diff --git a/src/Graphics/Vega/VegaLite/Configuration.hs b/src/Graphics/Vega/VegaLite/Configuration.hs
--- a/src/Graphics/Vega/VegaLite/Configuration.hs
+++ b/src/Graphics/Vega/VegaLite/Configuration.hs
@@ -76,6 +76,7 @@
   , HeaderProperty
   , ViewBackground
   , Cursor
+  , fromT
   , fromColor
   , fromDS
   , splitOnNewline
@@ -111,7 +112,10 @@
   ( MarkProperty
   , mprops_
   )
-
+import Graphics.Vega.VegaLite.Scale
+  ( ScaleNice
+  , scaleNiceSpec
+  )
 import Graphics.Vega.VegaLite.Selection
   ( Selection
   , SelectionProperty
@@ -194,8 +198,21 @@
 {-# DEPRECATED NamedStyles "Please change Legend to MarkNamedStyles" #-}
 
 data ConfigurationProperty
-    = AreaStyle [MarkProperty]
+    = ArcStyle [MarkProperty]
+      -- ^ The default appearance of arc marks.
+      --
+      --   @since 0.9.0.0
+    | AreaStyle [MarkProperty]
       -- ^ The default appearance of area marks.
+    | AriaStyle Bool
+      -- ^ A boolean flag indicating if ARIA default attributes should be included for
+      --   marks and guides (SVG output only). If False, the \"aria-hidden\"
+      --   attribute will be set for all guides, removing them from the ARIA accessibility
+      --   tree and Vega-Lite will not generate default descriptions for marks.
+      --
+      --   __Default value:__ True
+      --
+      --   @since 0.9.0.0
     | AutosizeStyle [Autosize]
       -- ^ The default sizing of visualizations.
       --
@@ -245,6 +262,14 @@
       --    to when configuring an axis with 'Graphics.Vega.VegaLite.AxStyle' and
       --    'AStyle'.
       --
+      --   To customize the style for guides (axes, headers, and legends), Vega-Lite
+      --   includes the following built-in style names:
+      --
+      --    - \"guide-label\": style for axis, legend, and header labels
+      --    - \"guide-title\": style for axis, legend, and header titles
+      --    - \"group-label\": styles for chart titles
+      --    - \"group-subtitle\"
+      --
       --   @since 0.6.0.0
     | BackgroundStyle Color
       -- ^ The default background color of visualizations.
@@ -282,6 +307,12 @@
       --   This was renamed from @CountTitle@ in @0.6.0.0@.
       --
       --   @since 0.6.0.0
+    | CustomFormatStyle Bool
+      -- ^ Allow the \"formatType\" property for text marks and guides to accept a custom
+      --   formatter function registered as a
+      --   [Vega Expression](https://vega.github.io/vega-lite/docs/compile.html#format-type).
+      --
+      --   @since 0.9.0.0
     | ErrorBandStyle [MarkProperty]
       -- ^ The default appearance for error bands.
       --
@@ -511,7 +542,9 @@
 
 -- easier to turn into a ConfigSpec in config than here
 configProperty :: ConfigurationProperty -> LabelledSpec
+configProperty (ArcStyle mps) = mprops_ "arc" mps
 configProperty (AreaStyle mps) = mprops_ "area" mps
+configProperty (AriaStyle b) = "aria" .= b
 configProperty (AutosizeStyle aus) = "autosize" .= object (map autosizeProperty aus)
 configProperty (Axis acs) = toAxis "" acs
 configProperty (AxisBand c acs) = toAxisChoice c "Band" acs
@@ -537,6 +570,7 @@
 configProperty (CircleStyle mps) = mprops_ "circle" mps
 configProperty (ConcatStyle cps) = "concat" .= object (map compConfigProperty cps)
 configProperty (CountTitleStyle ttl) = "countTitle" .= ttl
+configProperty (CustomFormatStyle b) = "customFormatTypes" .= b
 configProperty (ErrorBandStyle mps) = mprops_ "errorband" mps
 configProperty (ErrorBarStyle mps) = mprops_ "errorbar" mps
 configProperty (FacetStyle cps) = "facet" .= object (map compConfigProperty cps)
@@ -697,6 +731,8 @@
 For more detail see the
 <https://vega.github.io/vega-lite/docs/legend.html#config Vega-Lite documentation>.
 
+In @0.9.0.0@ the 'LeTickCountTime' constructor was added.
+
 In @0.8.0.0@ the @LeTitle@ constructor was removed as there is no way
 to set the default text for a legend title in Vega-Lite ('LeNoTitle'
 remains as this is used to turn off legend titles).
@@ -724,7 +760,30 @@
 -- based on schema 3.3.0 #/definitions/LegendConfig
 
 data LegendConfig
-    = LeClipHeight Double
+    = LeAria Bool
+      -- ^ A boolean flag indicating if
+      --   [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   should be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG group,
+      --   removing the legend from the ARIA accessibility tree.
+      --
+      --   __Default value:__ True
+      --
+      --   @since 0.9.0.0
+    | LeAriaDescription T.Text
+      -- ^ A text description of this legend for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If the 'LeAria' property is true, for SVG output the
+      --   [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)
+      --   will be set to this description.
+      --
+      --   If the description is unspecified it will be automatically generated.
+      --
+      --   @since 0.9.0.0
+    | LeClipHeight Double
       -- ^ The height in pixels at which to clip symbol legend entries.
       --
       --   @since 0.4.0.0
@@ -918,9 +977,20 @@
     | LeSymbolType Symbol
       -- ^ The default shape type for legend symbols.
     | LeTickCount Int
-      -- ^ The desired number of tick values for quantitative legends
+      -- ^ The desired number of tick values for quantitative legends.
       --
-      --   @since0.6.0.0
+      --   The 'LeTickCountTime' option can instead be used for \"time\"
+      --   or \"utc\" scales.
+      --
+      --   @since 0.6.0.0
+    | LeTickCountTime ScaleNice
+      -- ^ A specialised version of 'LeTickCount' for \"time\" and \"utc\"
+      --   time scales.
+      --
+      --   The 'Graphics.Vega.VegaLite.IsNice' and 'Graphics.Vega.VegaLte.NTickCount'
+      --   options should not be used as they generate invalid VegaLite.
+      --
+      --   @since 0.9.0.0
     | LeNoTitle
       -- ^ Do not add a title for the legend.
       --
@@ -967,8 +1037,15 @@
       --   The default is 0.35.
       --
       --   @since 0.6.0.0
+    | LeZIndex ZIndex
+      -- ^ The z-index indicating the layering of the legend group relative
+      --   to the other axis, mark, and legend groups.
+      --
+      --   @since 0.9.0.0
 
 legendConfigProperty :: LegendConfig -> LabelledSpec
+legendConfigProperty (LeAria b) = "bool" .= b
+legendConfigProperty (LeAriaDescription t) = "description" .= t
 legendConfigProperty (LeClipHeight x) = "clipHeight" .= x
 legendConfigProperty (LeColumnPadding x) = "columnPadding" .= x
 legendConfigProperty (LeColumns n) = "columns" .= n
@@ -1026,6 +1103,7 @@
 legendConfigProperty (LeSymbolStrokeWidth x) = "symbolStrokeWidth" .= x
 legendConfigProperty (LeSymbolType s) = "symbolType" .= symbolLabel s
 legendConfigProperty (LeTickCount n) = "tickCount" .= n
+legendConfigProperty (LeTickCountTime sn) = "tickCount" .= scaleNiceSpec sn
 legendConfigProperty LeNoTitle = "title" .= A.Null
 legendConfigProperty (LeTitleAlign ha) = "titleAlign" .= hAlignLabel ha
 legendConfigProperty (LeTitleAnchor anc) = "titleAnchor" .= anchorLabel anc
@@ -1041,6 +1119,7 @@
 legendConfigProperty (LeTitleOrient orient) = "titleOrient" .= sideLabel orient
 legendConfigProperty (LeTitlePadding x) = "titlePadding" .= x
 legendConfigProperty (LeUnselectedOpacity x) = "unselectedOpacity" .= x
+legendConfigProperty (LeZIndex z) = "zindex" .= z
 
 
 {-|
@@ -1269,7 +1348,30 @@
 
 -}
 data AxisConfig
-    = AStyle [StyleLabel]
+    = Aria Bool
+      -- ^ A boolean flag indicating if
+      --   [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   should be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG group, removing
+      --   the axis from the ARIA accessibility tree.
+      --
+      --   __Default value:__ True
+      --
+      --   @since 0.9.0.0
+    | AriaDescription T.Text
+      -- ^ A text description of this axis for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If the 'Aria' property is True, for SVG output the
+      --   [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)
+      --   will be set to this description.
+      --
+      --   If the description is unspecified it will be automatically generated.
+      --
+      --   @since 0.9.0.0
+    | AStyle [StyleLabel]
       -- ^ The named styles - generated with 'AxisNamedStyles' - to apply to the
       --   axis or axes.
       --
@@ -1287,6 +1389,10 @@
       --  @since 0.8.0.0
     | Domain Bool
       -- ^ Should the axis domain be displayed?
+    | DomainCap StrokeCap
+      -- ^ The stroke cap for the domain lines' ending style.
+      --
+      --   @since 0.9.0.0
     | DomainColor Color
       -- ^ The axis domain color.
     | DomainDash DashStyle
@@ -1303,8 +1409,40 @@
       --   @since 0.4.0.0
     | DomainWidth Double
       -- ^ The width of the axis domain.
+    | Format T.Text
+      -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html) for
+      --   axis values. To distinguish between formatting as numeric values
+      --   and data/time values, additionally use 'FormatAsNum', 'FormatAsTemporal',
+      --   or 'FormatAsCustom'.
+      --
+      --   When used with a [custom formatType](https://vega.github.io/vega-lite/docs/config.html#custom-format-type),
+      --   this value will be passed as \"format\" alongside \"datum.value\" to the
+      --   registered function.
+      --
+      --   @since 0.9.0.0
+    | FormatAsNum
+      -- ^ Facet headers should be formatted as numbers. Use a
+      --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
+      --   with 'Format'.
+      --
+      --   @since 0.9.0.0
+    | FormatAsTemporal
+      -- ^ Facet headers should be formatted as dates or times. Use a
+      --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
+      --   with 'Format'.
+      --
+      --   @since 0.9.0.0
+    | FormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'Format'.
+      --
+      --   @since 0.9.0.0
     | Grid Bool
       -- ^ Should an axis grid be displayed?
+    | GridCap StrokeCap
+      -- ^ The stroke cap for the grid lines' ending style.
+      --
+      --   @since 0.9.0.0
     | GridColor Color
       -- ^ The color for the grid.
     | GridDash DashStyle
@@ -1439,8 +1577,30 @@
       --   extents to indicate intervals.
       --
       --   @since 0.5.0.0
+    | TickCap StrokeCap
+      -- ^ The stroke cap for the grid lines' ending style.
+      --
+      --   @since 0.9.0.0
     | TickColor Color
       -- ^ The color of the ticks.
+    | TickCount Int
+      -- ^ The desired number of ticks for axes visualizing quantitative scales.
+      --   This is a hint to the system, and the actual number used will be
+      --   adjusted to be \"nice\" (multiples of 2, 5, or 10) and lie within the
+      --   underlying scale's range.
+      --
+      --   The 'TickCountTime' option can instead be used for \"time\" or
+      --   \"utc\" scales.
+      --
+      --   @since 0.9.0.0
+    | TickCountTime ScaleNice
+      -- ^ A specialised version of 'TickCount' for \"time\" and \"utc\"
+      --   time scales.
+      --
+      --   The 'Graphics.Vega.VegaLite.IsNice' and 'Graphics.Vega.VegaLte.NTickCount'
+      --   options should not be used as they generate invalid VegaLite.
+      --
+      --   @since 0.9.0.0
     | TickDash DashStyle
       -- ^ The dash pattern of the ticks.
     | TickDashOffset DashOffset
@@ -1518,15 +1678,26 @@
 axisConfigProperty (AStyle [s]) = "style" .= s
 axisConfigProperty (AStyle s) = "style" .= s
 
+axisConfigProperty (Aria b) = "aria" .= b
+axisConfigProperty (AriaDescription t) = "description" .= t
+
 axisConfigProperty (BandPosition x) = "bandPosition" .= x
 axisConfigProperty (Disable b) = "disable" .= b
 axisConfigProperty (Domain b) = "domain" .= b
+axisConfigProperty (DomainCap c) = "domainCap" .= strokeCapLabel c
 axisConfigProperty (DomainColor c) = "domainColor" .= fromColor c
 axisConfigProperty (DomainDash ds) = "domainDash" .= fromDS ds
 axisConfigProperty (DomainDashOffset x) = "domainDashOffset" .= x
 axisConfigProperty (DomainOpacity x) = "domainOpacity" .= x
 axisConfigProperty (DomainWidth w) = "domainWidth" .= w
+
+axisConfigProperty (Format fmt) = "format" .= fmt
+axisConfigProperty FormatAsNum = "formatNum" .= fromT "number"
+axisConfigProperty FormatAsTemporal = "formatNum" .= fromT "type"
+axisConfigProperty (FormatAsCustom c) = "formatType" .= c
+
 axisConfigProperty (Grid b) = "grid" .= b
+axisConfigProperty (GridCap c) = "gridCap" .= strokeCapLabel c
 axisConfigProperty (GridColor c) = "gridColor" .= fromColor c
 axisConfigProperty (GridDash ds) = "gridDash" .= fromDS ds
 axisConfigProperty (GridDashOffset x) = "gridDashOffset" .= x
@@ -1559,7 +1730,10 @@
 axisConfigProperty (MinExtent n) = "minExtent" .= n
 axisConfigProperty (Orient orient) = "orient" .= sideLabel orient
 axisConfigProperty (TickBand band) = "tickBand" .= bandAlignLabel band
+axisConfigProperty (TickCap c) = "tickCap" .= strokeCapLabel c
 axisConfigProperty (TickColor c) = "tickColor" .= fromColor c
+axisConfigProperty (TickCount n) = "tickCount" .= n
+axisConfigProperty (TickCountTime sn) = "tickCount" .= scaleNiceSpec sn
 axisConfigProperty (TickDash ds) = "tickDash" .= fromDS ds
 axisConfigProperty (TickDashOffset x) = "tickDashOffset" .= x
 axisConfigProperty (TickExtra b) = "tickExtra" .= b
@@ -1630,6 +1804,17 @@
       -- ^ The anchor position when placing titles.
     | TAngle Angle
       -- ^ The angle when orientating titles.
+    | TAria Bool
+      -- ^ A boolean flag indicating if
+      --   [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   should be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG group,
+      --   removing the title from the ARIA accessibility tree.
+      --
+      --   __Default value:__ True
+      --
+      --   @since 0.9.0.0
     | TBaseline VAlign
       -- ^ The vertical alignment when placing titles.
     | TColor Color  -- this allows for null as a color
@@ -1711,8 +1896,6 @@
     | TZIndex ZIndex
       -- ^ Drawing order of a title relative to the other chart elements.
       --
-      --   This should only be used with 'title' and not 'TitleConfig'.
-      --
       --   @since 0.4.0.0
 
 
@@ -1720,6 +1903,7 @@
 titleConfigSpec (TAlign ha) = "align" .= hAlignLabel ha
 titleConfigSpec (TAnchor an) = "anchor" .= anchorLabel an
 titleConfigSpec (TAngle x) = "angle" .= x
+titleConfigSpec (TAria b) = "aria" .= b
 titleConfigSpec (TBaseline va) = "baseline" .= vAlignLabel va
 titleConfigSpec (TColor clr) = "color" .= fromColor clr
 titleConfigSpec (TdX x) = "dx" .= x
diff --git a/src/Graphics/Vega/VegaLite/Core.hs b/src/Graphics/Vega/VegaLite/Core.hs
--- a/src/Graphics/Vega/VegaLite/Core.hs
+++ b/src/Graphics/Vega/VegaLite/Core.hs
@@ -80,6 +80,7 @@
        , AxisProperty(..)
        , ConditionalAxisProperty(..)
 
+       , angle
        , color
        , fill
        , fillOpacity
@@ -99,9 +100,8 @@
        , TextChannel(..)
 
        , hyperlink
-       , HyperlinkChannel(..)
-
        , url
+       , HyperlinkChannel(..)
 
        , order
        , OrderChannel(..)
@@ -112,6 +112,9 @@
        , detail
        , DetailChannel(..)
 
+       , ariaDescription
+       , AriaDescriptionChannel(..)
+
        , ScaleProperty(..)
        , categoricalDomainMap
        , domainRangeMap
@@ -212,6 +215,7 @@
   , Side
   , StackProperty
   , StackOffset
+  , StrokeCap
   , Channel
   , Resolve
   , Bounds
@@ -238,6 +242,7 @@
   , vAlignLabel
   , bandAlignLabel
   , scaleLabel
+  , strokeCapLabel
   , positionLabel
   , overlapStrategyLabel
   , sideLabel
@@ -467,6 +472,13 @@
       -- ^ Reference in a mark channel to a field name generated by 'repeatFlow'
       --   or 'repeat'. The parameter identifies whether reference is being made to
       --   fields that are to be arranged in columns, in rows, or a with a flow layout.
+    | MRepeatDatum Arrangement
+      -- ^ Reference in a mark channel to a datum value generated by 'repeatFlow'
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   a datum that is to be encoded in layers, or in columns or rows in a
+      --   flow layout.
+      --
+      --   @since 0.9.0.0
     | MmType Measurement
       -- ^ Level of measurement when encoding with a mark property channel.
     | MScale [ScaleProperty]
@@ -531,6 +543,12 @@
     | MPath T.Text
       -- ^ SVG path string used when encoding with a mark property channel. Useful
       --   for providing custom shapes.
+    | MDatum DataValue
+      -- ^ Name of a literal data item used for encoding with a mark property channel.
+      --   Unlike 'MNumber', 'MString', and 'MBoolean', datum literals represent values in
+      --   data space.
+      --
+      --   @since 0.9.0.0
     | MNumber Double
       -- ^ Literal numeric value when encoding with a mark property channel.
     | MString T.Text
@@ -556,6 +574,7 @@
 markChannelProperty :: MarkChannel -> [LabelledSpec]
 markChannelProperty (MName s) = [field_ s]
 markChannelProperty (MRepeat arr) = ["field" .= object [repeat_ arr]]
+markChannelProperty (MRepeatDatum arr) = ["datum" .= object [repeat_ arr]]
 markChannelProperty (MmType t) = [mtype_ t]
 markChannelProperty (MScale sps) = [scaleProp_ sps]
 markChannelProperty (MLegend lps) = [legendProp_ lps]
@@ -569,6 +588,7 @@
 markChannelProperty (MTimeUnit tu) = [timeUnit_ tu]
 markChannelProperty (MAggregate op) = [aggregate_ op]
 markChannelProperty (MPath s) = ["value" .= s]
+markChannelProperty (MDatum d) = ["datum" .= dataValueSpec d]
 markChannelProperty (MNumber x) = ["value" .= x]
 markChannelProperty (MString s) = ["value" .= s]
 markChannelProperty (MBoolean b) = ["value" .= b]
@@ -594,8 +614,8 @@
 @enc []@ to create a specification.
 
 The supported encodings are:
-'color', 'column', 'detail', 'fill', 'fillOpacity', 'hyperlink',
-'opacity', 'order', 'position', 'row', 'shape', 'size',
+'ariaDescription', 'angle', 'color', 'column', 'detail', 'fill', 'fillOpacity',
+'hyperlink', 'opacity', 'order', 'position', 'row', 'shape', 'size',
 'stroke', 'strokeDash', 'strokeOpacity', 'strokeWidth', 'text', 'tooltip',
 'tooltips', and 'url'.
 
@@ -614,6 +634,20 @@
 
 {-|
 
+Encode an Aria description.
+
+@since 0.9.0.0
+-}
+ariaDescription ::
+  [AriaDescriptionChannel]
+  -- ^ The properties for the channel.
+  -> BuildEncodingSpecs
+ariaDescription ads ols =
+  ES ("description", object (concatMap ariaDescriptionChannelProperty ads)) : ols
+
+
+{-|
+
 Apply a stack transform for positioning multiple values. This is an alternative
 to specifying stacking directly when encoding position.
 
@@ -772,6 +806,7 @@
       --   Not all scales support @SZero@ and the default depends on the type of
       --   channel.
 
+
 scaleProperty :: ScaleProperty -> LabelledSpec
 scaleProperty (SType sType) = "type" .= scaleLabel sType
 scaleProperty (SAlign c) = "align" .= clamped 0 1 c
@@ -787,6 +822,9 @@
 scaleProperty (SPadding x) = "padding" .= x
 scaleProperty (SPaddingInner x) = "paddingInner" .= x
 scaleProperty (SPaddingOuter x) = "paddingOuter" .= x
+scaleProperty (SRange (RPair lo hi)) = "range" .= [lo, hi]
+scaleProperty (SRange (RHeight w)) = "range" .= [fromT "height", toJSON w]
+scaleProperty (SRange (RWidth h)) = "range" .= [toJSON h, fromT "width"]
 scaleProperty (SRange (RNumbers xs)) = "range" .= xs
 scaleProperty (SRange (RNumberLists xss)) = "range" .= xss
 scaleProperty (SRange (RStrings ss)) = "range" .= ss
@@ -900,11 +938,19 @@
       -- @
       --
       --   @since 0.4.0.0
+    | PDatum DataValue
+      -- ^ Set a position to an arbitrary data value. Useful for placing items at a
+      --   specific point in the data space. To place in data screen space use
+      --   'PNumber'.
+      --
+      --   @since 0.9.0.0
     | PNumber Double
       -- ^ Set a position to an arbitrary value. Useful for placing items at the top of
       --   a plot area (@PNumber 0@) or a fixed number of pixels from the top.
       --   See also 'PHeight' and 'PWidth'.
       --
+      --   Use 'PDatum' to place an item using a data coordinate.
+      --
       --   @since 0.4.0.0
     | PRepeat Arrangement
       -- ^ Reference in a position channel to a field name generated by 'repeatFlow'
@@ -926,6 +972,13 @@
       --    , 'Graphics.Vega.VegaLite.specification' spec
       --    ]
       -- @
+    | PRepeatDatum Arrangement
+      -- ^ Reference in a position channel to a datum value generated by 'repeatFlow'
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   a datum that is to be encoded in layers, or in columns or rows in a
+      --   flow layout.
+      --
+      --   @since 0.9.0.0
     | PmType Measurement
       -- ^ Level of measurement when encoding with a position channel.
     | PBin [BinProperty]
@@ -1048,8 +1101,10 @@
   in "axis" .= js
 positionChannelProperty (PStack so) = stackOffset so
 positionChannelProperty (PRepeat arr) = "field" .= object [repeat_ arr]
+positionChannelProperty (PRepeatDatum arr) = "datum" .= object [repeat_ arr]
 positionChannelProperty PHeight = value_ "height"
 positionChannelProperty PWidth = value_ "width"
+positionChannelProperty (PDatum d) = "datum" .= dataValueSpec d
 positionChannelProperty (PNumber x) = "value" .= x
 positionChannelProperty (PImpute ips) = impute_ ips
 positionChannelProperty (PBand x) = "band" .= x
@@ -1120,7 +1175,30 @@
 -}
 {-# DEPRECATED AxDates "Please change AxDates to AxValues" #-}
 data AxisProperty
-    = AxBandPosition Double
+    = AxAria Bool
+      -- ^ A boolean flag indicating if
+      --   [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   should be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG group, removing
+      --   the axis from the ARIA accessibility tree.
+      --
+      --   __Default value:__ True
+      --
+      --   @since 0.9.0.0
+    | AxAriaDescription T.Text
+      -- ^ A text description of this axis for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If the 'AxAria' property is True, for SVG output the
+      --   [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)
+      --   will be set to this description.
+      --
+      --   If the description is unspecified it will be automatically generated.
+      --
+      --   @since 0.9.0.0
+    | AxBandPosition Double
       -- ^ An interpolation fraction indicating where, for @band@ scales, axis ticks should
       --   be position. A value of @0@ places ticks at the left-edge of the band, @0.5@ in
       --   the middle, and @1@ at the right edge.
@@ -1161,6 +1239,10 @@
       --   @since 0.5.0.0
     | AxDomain Bool
       -- ^ Should the axis domain (the baseline) be displayed?
+    | AxDomainCap StrokeCap
+      -- ^ The stroke cap for the domain lines' ending style.
+      --
+      --   @since 0.9.0.0
     | AxDomainColor Color
       -- ^ The axis domain color.
       --
@@ -1184,21 +1266,35 @@
     | AxFormat T.Text
       -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html) for
       --   axis values. To distinguish between formatting as numeric values
-      --   and data/time values, additionally use 'AxFormatAsNum' or 'AxFormatAsTemporal'.
+      --   and data/time values, additionally use 'AxFormatAsNum', 'AxFormatAsTemporal',
+      --   or 'AxFormatAsCustom'.
+      --
+      --   When used with a [custom formatType](https://vega.github.io/vega-lite/docs/config.html#custom-format-type),
+      --   this value will be passed as \"format\" alongside \"datum.value\" to the
+      --   registered function.
     | AxFormatAsNum
       -- ^ Facet headers should be formatted as numbers. Use a
       --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
       --   with 'AxFormat'.
       --
-      -- @since 0.4.0.0
+      --   @since 0.4.0.0
     | AxFormatAsTemporal
       -- ^ Facet headers should be formatted as dates or times. Use a
       --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
       --   with 'AxFormat'.
       --
-      -- @since 0.4.0.0
+      --   @since 0.4.0.0
+    | AxFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'AxFormat'.
+      --
+      --   @since 0.9.0.0
     | AxGrid Bool
       -- ^ Should an axis grid be displayed?
+    | AxGridCap StrokeCap
+      -- ^ The stroke cap for the grid lines' ending style.
+      --
+      --   @since 0.9.0.0
     | AxGridColor Color
       -- ^ The color for the grid.
       --
@@ -1367,6 +1463,10 @@
       --   extents to indicate intervals.
       --
       --   @since 0.5.0.0
+    | AxTickCap StrokeCap
+      -- ^ The stroke cap for the grid lines' ending style.
+      --
+      --   @since 0.9.0.0
     | AxTickColor Color
       -- ^ The color of the ticks.
       --
@@ -1376,6 +1476,17 @@
       --   This is a hint to the system, and the actual number used will be
       --   adjusted to be \"nice\" (multiples of 2, 5, or 10) and lie within the
       --   underlying scale's range.
+      --
+      --   The 'AxTickCountTime' option can instead be used for \"time\" or
+      --   \"utc\" scales.
+    | AxTickCountTime ScaleNice
+      -- ^ A specialised version of 'AxTickCount' for \"time\" and \"utc\"
+      --   time scales.
+      --
+      --   The 'Graphics.Vega.VegaLite.IsNice' and 'Graphics.Vega.VegaLte.NTickCount'
+      --   options should not be used as they generate invalid VegaLite.
+      --
+      --   @since 0.9.0.0
     | AxTickDash DashStyle
       -- ^ The dash pattern of the ticks.
       --
@@ -1509,6 +1620,9 @@
 axisProperty (AxStyle [s]) = "style" .= s
 axisProperty (AxStyle s) = "style" .= s
 
+axisProperty (AxAria b) = "aria" .= b
+axisProperty (AxAriaDescription t) = "description" .= t
+
 axisProperty (AxBandPosition x) = "bandPosition" .= x
 axisProperty (AxDataCondition predicate cap) =
   let (ifAxProp, elseAxProp) = conditionalAxisProperty cap
@@ -1519,6 +1633,7 @@
                                              ]
                      , "value" .= elseProp]
 axisProperty (AxDomain b) = "domain" .= b
+axisProperty (AxDomainCap c) = "domainCap" .= strokeCapLabel c
 axisProperty (AxDomainColor s) = "domainColor" .= fromColor s
 axisProperty (AxDomainDash ds) = "domainDash" .= fromDS ds
 axisProperty (AxDomainDashOffset x) = "domainDashOffset" .= x
@@ -1527,7 +1642,9 @@
 axisProperty (AxFormat fmt) = "format" .= fmt
 axisProperty AxFormatAsNum = "formatType" .= fromT "number"
 axisProperty AxFormatAsTemporal = "formatType" .= fromT "time"
+axisProperty (AxFormatAsCustom c) = "formatType" .= c
 axisProperty (AxGrid b) = "grid" .= b
+axisProperty (AxGridCap c) = "gridCap" .= strokeCapLabel c
 axisProperty (AxGridColor s) = "gridColor" .= fromColor s
 axisProperty (AxGridDash ds) = "gridDash" .= fromDS ds
 axisProperty (AxGridDashOffset x) = "gridDashOffset" .= x
@@ -1564,8 +1681,10 @@
 axisProperty (AxPosition n) = "position" .= n
 axisProperty (AxTicks b) = "ticks" .= b
 axisProperty (AxTickBand bnd) = "tickBand" .= bandAlignLabel bnd
+axisProperty (AxTickCap c) = "tickCap" .= strokeCapLabel c
 axisProperty (AxTickColor s) = "tickColor" .= fromColor s
 axisProperty (AxTickCount n) = "tickCount" .= n
+axisProperty (AxTickCountTime sn) = "tickCount" .= scaleNiceSpec sn
 axisProperty (AxTickDash ds) = "tickDash" .= fromDS ds
 axisProperty (AxTickDashOffset x) = "tickDashOffset" .= x
 axisProperty (AxTickExtra b) = "tickExtra" .= b
@@ -1971,26 +2090,31 @@
 
 
 -- | Types of hyperlink channel property used for linking marks or text to URLs.
-
+--
+--   Unfortunately there is a split between @H@ and @Hy@ as the prefix.
 data HyperlinkChannel
     = HName FieldName
       -- ^ Field used for encoding with a hyperlink channel.
     | HRepeat Arrangement
       -- ^ Reference in a hyperlink channel to a field name generated by 'repeatFlow'
-      --  or 'repeat'. The parameter identifies whether reference is being made to
-      -- fields that are to be arranged in columns, in rows, or a with a flow layout.
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   fields that are to be arranged in columns, in rows, or a with a flow layout.
     | HmType Measurement
       -- ^ Level of measurement when encoding with a hyperlink channel.
+    | HAggregate Operation
+      -- ^ Compute aggregate summary statistics for a field to be encoded with a
+      --   hyperlink channel.
+    | HyBand Double
+      -- ^ Specify the mark position or size relative to the band size.
+      --   The value is in the range 0 to 1, inclusive.
+      --
+      --   @since 0.9.0.0
     | HBin [BinProperty]
       -- ^ Discretize numeric values into bins when encoding with a hyperlink channel.
     | HBinned
       -- ^ Indicate that data encoded with a hyperlink channel are already binned.
       --
       --   @since 0.4.0.0
-    | HAggregate Operation
-      -- ^ Compute aggregate summary statistics for a field to be encoded with a
-      -- hyperlink channel.
-    | HTimeUnit TimeUnit
     | HSelectionCondition BooleanOp [HyperlinkChannel] [HyperlinkChannel]
       -- ^ Make a hyperlink channel conditional on interactive selection. The first parameter
       --   provides the selection to evaluate, the second the encoding to apply if the hyperlink
@@ -2003,24 +2127,153 @@
       --
       --   The arguments to this constructor have changed in @0.4.0.0@
       --   to support multiple expressions.
+    | HyFormat T.Text
+      -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html)
+      --   for hyperlink properties. To distinguish between formatting as numeric values and data/time
+      --   values, additionally use 'HyFormatAsNum', 'HyFormatAsTemporal', and
+      --   'HyFormatAsCustom'.
+      --
+      --   @since 0.9.0.0
+    | HyFormatAsNum
+      -- ^ The marks should be formatted as numbers. Use a
+      --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
+      --   with 'HyFormat'.
+      --
+      --   @since 0.9.0.0
+    | HyFormatAsTemporal
+      -- ^ The marks should be formatted as dates or times. Use a
+      --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
+      --   with 'HyFormat'.
+      --
+      --   @since 0.9.0.0
+    | HyFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'HyFormat'.
+      --
+      --   @since 0.9.0.0
+    | HyLabelExpr VegaExpr
+      -- ^ Provide the expression used to generate labels.
+      --
+      --   @since 0.9.0.0
     | HString T.Text
       -- ^ Literal string value when encoding with a hyperlink channel.
+    | HTimeUnit TimeUnit
+      -- ^ Time unit aggregation of field values when encoding with a
+      --   hyperlink channel.
+    | HyTitle T.Text
+      -- ^ Title of a field when encoding with a hyperlink channel.
+      --
+      --   @since 0.9.0.0
+    | HyNoTitle
+      -- ^ Display no title.
+      --
+      --   @since 0.9.0.0
 
 hyperlinkChannelProperty :: HyperlinkChannel -> [LabelledSpec]
 hyperlinkChannelProperty (HName s) = [field_ s]
 hyperlinkChannelProperty (HRepeat arr) = ["field" .= object [repeat_ arr]]
 hyperlinkChannelProperty (HmType t) = [mtype_ t]
+hyperlinkChannelProperty (HAggregate op) = [aggregate_ op]
+hyperlinkChannelProperty (HyBand x) = ["band" .= x]
 hyperlinkChannelProperty (HBin bps) = [bin bps]
 hyperlinkChannelProperty HBinned = [binned_]
 hyperlinkChannelProperty (HSelectionCondition selName ifClause elseClause) =
   selCond_ hyperlinkChannelProperty selName ifClause elseClause
 hyperlinkChannelProperty (HDataCondition tests elseClause) =
   dataCond_ hyperlinkChannelProperty tests elseClause
-hyperlinkChannelProperty (HTimeUnit tu) = [timeUnit_ tu]
-hyperlinkChannelProperty (HAggregate op) = [aggregate_ op]
+hyperlinkChannelProperty (HyFormat fmt) = ["format" .= fmt]
+hyperlinkChannelProperty HyFormatAsNum = ["formatType" .= fromT "number"]
+hyperlinkChannelProperty HyFormatAsTemporal = ["formatType" .= fromT "time"]
+hyperlinkChannelProperty (HyFormatAsCustom c) = ["formatType" .= c]
+hyperlinkChannelProperty (HyLabelExpr lbl) = ["labelExpr" .= lbl]
 hyperlinkChannelProperty (HString s) = [value_ s]
+hyperlinkChannelProperty (HTimeUnit tu) = [timeUnit_ tu]
+hyperlinkChannelProperty (HyTitle t) = ["title" .= t]
+hyperlinkChannelProperty HyNoTitle = ["title" .= A.Null]
 
 
+-- | A text description of this mark for ARIA accessibility.
+--
+--   @since 0.9.0.0
+data AriaDescriptionChannel
+    = ADName FieldName
+      -- ^ Field used for encoding with an Aria description.
+    | ADRepeat Arrangement
+      -- ^ Reference in an Aria description channel to a field name generated by 'repeatFlow'
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   fields that are to be arranged in columns, in rows, or a with a flow layout.
+    | ADmType Measurement
+      -- ^ Level of measurement.
+    | ADAggregate Operation
+      -- ^ Compute aggregate summary statistics for a field to be encoded.
+    | ADBand Double
+      -- ^ Specify the mark position or size relative to the band size.
+      --   The value is in the range 0 to 1, inclusive.
+    | ADBin [BinProperty]
+      -- ^ Discretize numeric values into bins.
+    | ADBinned
+      -- ^ Indicate that data encoded are already binned.
+    | ADSelectionCondition BooleanOp [AriaDescriptionChannel] [AriaDescriptionChannel]
+      -- ^ Make the channel conditional on interactive selection. The first parameter
+      --   provides the selection to evaluate, the second the encoding to apply if the description
+      --   has been selected, the third the encoding if it is not selected.
+    | ADDataCondition [(BooleanOp, [AriaDescriptionChannel])] [AriaDescriptionChannel]
+      -- ^ Make the channel conditional on one or more predicate expressions. The first
+      --   parameter is a list of tuples each pairing an expression to evaluate with the encoding
+      --   if that expression is @True@. The second is the encoding if none of the expressions
+      --   evaluate as @True@.
+    | ADFormat T.Text
+      -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html)
+      --   for descriptions. To distinguish between formatting as numeric values and data/time
+      --   values, additionally use 'ADFormatAsNum', 'ADFormatAsTemporal', and
+      --   'ADFormatAsCustom'.
+    | ADFormatAsNum
+      -- ^ The marks should be formatted as numbers. Use a
+      --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
+      --   with 'ADFormat'.
+    | ADFormatAsTemporal
+      -- ^ The marks should be formatted as dates or times. Use a
+      --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
+      --   with 'ADFormat'.
+    | ADFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'ADFormat'.
+    | ADLabelExpr VegaExpr
+      -- ^ Provide the expression used to generate labels.
+    | ADString T.Text
+      -- ^ Literal string value.
+    | ADTimeUnit TimeUnit
+      -- ^ Time unit aggregation of field values when encoding with an Aria
+      --   description channel.
+    | ADTitle T.Text
+      -- ^ Title of a field when encoding with an Aria description channel.
+    | ADNoTitle
+      -- ^ Display no title.
+
+
+ariaDescriptionChannelProperty :: AriaDescriptionChannel -> [LabelledSpec]
+ariaDescriptionChannelProperty (ADName s) = [field_ s]
+ariaDescriptionChannelProperty (ADRepeat arr) = ["field" .= object [repeat_ arr]]
+ariaDescriptionChannelProperty (ADmType t) = [mtype_ t]
+ariaDescriptionChannelProperty (ADAggregate op) = [aggregate_ op]
+ariaDescriptionChannelProperty (ADBand x) = ["band" .= x]
+ariaDescriptionChannelProperty (ADBin bps) = [bin bps]
+ariaDescriptionChannelProperty ADBinned = [binned_]
+ariaDescriptionChannelProperty (ADSelectionCondition selName ifClause elseClause) =
+  selCond_ ariaDescriptionChannelProperty selName ifClause elseClause
+ariaDescriptionChannelProperty (ADDataCondition tests elseClause) =
+  dataCond_ ariaDescriptionChannelProperty tests elseClause
+ariaDescriptionChannelProperty (ADFormat fmt) = ["format" .= fmt]
+ariaDescriptionChannelProperty ADFormatAsNum = ["formatType" .= fromT "number"]
+ariaDescriptionChannelProperty ADFormatAsTemporal = ["formatType" .= fromT "time"]
+ariaDescriptionChannelProperty (ADFormatAsCustom c) = ["formatType" .= c]
+ariaDescriptionChannelProperty (ADLabelExpr lbl) = ["labelExpr" .= lbl]
+ariaDescriptionChannelProperty (ADString s) = [value_ s]
+ariaDescriptionChannelProperty (ADTimeUnit tu) = [timeUnit_ tu]
+ariaDescriptionChannelProperty (ADTitle t) = ["title" .= t]
+ariaDescriptionChannelProperty ADNoTitle = ["title" .= A.Null]
+
+
 ----
 
 {-|
@@ -2156,10 +2409,28 @@
 data TextChannel
     = TName FieldName
       -- ^ Name of the field used for encoding with a text channel.
+    | TRepeat Arrangement
+      -- ^ Reference in a text channel to a field name generated by 'repeatFlow'
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   fields that are to be arranged in columns, in rows, or a with a flow layout.
+    | TRepeatDatum Arrangement
+      -- ^ Reference in a text channel to a datum value generated by 'repeatFlow'
+      --   or 'repeat'. The parameter identifies whether reference is being made to
+      --   a datum that is to be encoded in layers, or in columns or rows in a
+      --   flow layout.
+      --
+      --   @since 0.9.0.0
+    | TmType Measurement
+      -- ^ Level of measurement when encoding with a text channel.
     | TAggregate Operation
       -- ^ Compute some aggregate summary statistics for a field to be encoded with a
       --   text channel. The type of aggregation is determined by the given operation
       --   parameter.
+    | TBand Double
+      -- ^ Specify the mark position or size relative to the band size.
+      --   The value is in the range 0 to 1, inclusive.
+      --
+      --   @since 0.9.0.0
     | TBin [BinProperty]
       -- ^ Discretize numeric values into bins when encoding with a text channel.
     | TBinned
@@ -2174,42 +2445,40 @@
       --
       --   The arguments to this constructor have changed in @0.4.0.0@
       --   to support multiple expressions.
+    | TSelectionCondition BooleanOp [TextChannel] [TextChannel]
+      -- ^ Make a text channel conditional on interactive selection. The first parameter
+      --   is a selection condition to evaluate; the second the encoding to apply if that
+      --   selection is true; the third parameter is the encoding if the selection is false.
+    | TDatum DataValue
+      -- ^ A constant value in the data domain.
+      --
+      --   @since 0.9.0.0
     | TFormat T.Text
       -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html)
       --   for text marks. To distinguish between formatting as numeric values and data/time
-      --   values, additionally use 'TFormatAsNum' or 'TFormatAsTemporal'.
+      --   values, additionally use 'TFormatAsNum', 'TFormatAsTemporal', and
+      --   'TFormatAsCustom'.
     | TFormatAsNum
       -- ^ The text marks should be formatted as numbers. Use a
       --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
       --   with 'TFormat'.
       --
-      -- @since 0.4.0.0
+      --   @since 0.4.0.0
     | TFormatAsTemporal
       -- ^ The text marks should be formatted as dates or times. Use a
       --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
       --   with 'TFormat'.
       --
-      -- @since 0.4.0.0
-    | TmType Measurement
-      -- ^ Level of measurement when encoding with a text channel.
-    | TRepeat Arrangement
-      -- ^ Reference in a text channel to a field name generated by 'repeatFlow'
-      --   or 'repeat'. The parameter identifies whether reference is being made to
-      --   fields that are to be arranged in columns, in rows, or a with a flow layout.
-    | TSelectionCondition BooleanOp [TextChannel] [TextChannel]
-      -- ^ Make a text channel conditional on interactive selection. The first parameter
-      --   is a selection condition to evaluate; the second the encoding to apply if that
-      --   selection is true; the third parameter is the encoding if the selection is false.
-    | TTitle T.Text
-      -- ^ Title of a field when encoding with a text or tooltip channel.
-      --
       --   @since 0.4.0.0
-    | TNoTitle
-      -- ^ Display no title.
+    | TFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'TFormat'.
       --
-      --   @since 0.4.0.0
-    | TTimeUnit TimeUnit
-      -- ^ Time unit aggregation of field values when encoding with a text channel.
+      --   @since 0.9.0.0
+    | TLabelExpr VegaExpr
+      -- ^ Provide the expression used to generate labels.
+      --
+      --   @since 0.9.0.0
     | TString T.Text
       -- ^ A literal value for encoding a text property channel. See also 'TStrings'.
       --
@@ -2227,26 +2496,41 @@
       -- ^ A multi-line value. See also 'TString'.
       --
       --   @since 0.7.0.0
+    | TTimeUnit TimeUnit
+      -- ^ Time unit aggregation of field values when encoding with a text channel.
+    | TTitle T.Text
+      -- ^ Title of a field when encoding with a text or tooltip channel.
+      --
+      --   @since 0.4.0.0
+    | TNoTitle
+      -- ^ Display no title.
+      --
+      --   @since 0.4.0.0
 
 textChannelProperty :: TextChannel -> [LabelledSpec]
 textChannelProperty (TName s) = [field_  s]
+textChannelProperty (TRepeat arr) = ["field" .= object [repeat_ arr]]
+textChannelProperty (TRepeatDatum arr) = ["datum" .= object [repeat_ arr]]
+textChannelProperty (TmType measure) = [mtype_ measure]
 textChannelProperty (TAggregate op) = [aggregate_ op]
+textChannelProperty (TBand x) = ["band" .= x]
 textChannelProperty (TBin bps) = [bin bps]
 textChannelProperty TBinned = [binned_]
-textChannelProperty (TFormat fmt) = ["format" .= fmt]
-textChannelProperty TFormatAsNum = ["formatType" .= fromT "number"]
-textChannelProperty TFormatAsTemporal = ["formatType" .= fromT "time"]
-textChannelProperty (TmType measure) = [mtype_ measure]
-textChannelProperty (TRepeat arr) = ["field" .= object [repeat_ arr]]
-textChannelProperty (TTitle s) = ["title" .= splitOnNewline s]
-textChannelProperty TNoTitle = ["title" .= A.Null]
-textChannelProperty (TTimeUnit tu) = [timeUnit_ tu]
 textChannelProperty (TDataCondition tests elseClause) =
   dataCond_ textChannelProperty tests elseClause
 textChannelProperty (TSelectionCondition selName ifClause elseClause) =
   selCond_ textChannelProperty selName ifClause elseClause
+textChannelProperty (TDatum dv) = ["datum" .= dataValueSpec dv]
+textChannelProperty (TFormat fmt) = ["format" .= fmt]
+textChannelProperty TFormatAsNum = ["formatType" .= fromT "number"]
+textChannelProperty TFormatAsTemporal = ["formatType" .= fromT "time"]
+textChannelProperty (TFormatAsCustom c) = ["formatType" .= c]
+textChannelProperty (TLabelExpr e) = ["labelExpr" .= e]
 textChannelProperty (TString s) = ["value" .= s]
 textChannelProperty (TStrings xs) = ["value" .= xs]
+textChannelProperty (TTimeUnit tu) = [timeUnit_ tu]
+textChannelProperty (TTitle s) = ["title" .= splitOnNewline s]
+textChannelProperty TNoTitle = ["title" .= A.Null]
 
 
 -- | Properties of an ordering channel used for sorting data fields.
@@ -3659,6 +3943,20 @@
 calculateAs expr label ols =
   let fields = [ "calculate" .= expr, "as" .= label ]
   in TS (object fields) : ols
+
+
+{-|
+
+Encode an angle (orientation) channel, which allows for data-driven
+rotation of text, point, and square marks.
+
+@since 0.9.0.0
+-}
+angle ::
+  [MarkChannel]
+  -- ^ The color-encoding options.
+  -> BuildEncodingSpecs
+angle markProps ols = mchan_ "angle" markProps : ols
 
 
 {-|
diff --git a/src/Graphics/Vega/VegaLite/Foundation.hs b/src/Graphics/Vega/VegaLite/Foundation.hs
--- a/src/Graphics/Vega/VegaLite/Foundation.hs
+++ b/src/Graphics/Vega/VegaLite/Foundation.hs
@@ -443,12 +443,17 @@
       -- ^ Flow arrangement (aka \"repeat\").
       --
       --   @since 0.4.0.0
+    | Layer
+      -- ^ Layer arrangement in a repeat view.
+      --
+      --   @since 0.9.0.0
 
 
 arrangementLabel :: Arrangement -> T.Text
 arrangementLabel Column = "column"
 arrangementLabel Row = "row"
 arrangementLabel Flow = "repeat"  -- NOTE: not "flow"!
+arrangementLabel Layer = "layer"
 
 
 -- | Indicates the anchor position for text.
@@ -519,6 +524,22 @@
     | Y2
     -- ^ The secondary coordinate for ranged 'Graphics.Vega.VegaLite.Area', 'Graphics.Vega.VegaLite.Bar', 'Graphics.Vega.VegaLite.Rect', and 'Graphics.Vega.VegaLite.Rule'
     --    marks.
+    | Theta
+      -- ^ The start angle of an arc.
+      --
+      --   @since 0.9.0.0
+    | Theta2
+      -- ^ The end angle of an arc.
+      --
+      --   @since 0.9.0.0
+    | R
+      -- ^ The outer radius of an arc.
+      --
+      --   @since 0.9.0.0
+    | R2
+      -- ^ The inner radius of an arc.
+      --
+      --   @since 0.9.0.0
     | XError
       -- ^ Indicates that the 'X' channel represents the mid-point and
       --   the 'XError' channel gives the offset. If 'XError2' is not
@@ -558,6 +579,10 @@
 positionLabel Y = "y"
 positionLabel X2 = "x2"
 positionLabel Y2 = "y2"
+positionLabel Theta = "theta"
+positionLabel Theta2 = "theta2"
+positionLabel R = "radius"
+positionLabel R2 = "radius2"
 positionLabel XError     = "xError"
 positionLabel YError     = "yError"
 positionLabel XError2    = "xError2"
@@ -1115,6 +1140,16 @@
       -- ^ @since 0.4.0.0
     | ChLatitude2
       -- ^ @since 0.4.0.0
+    | ChAngle
+      -- ^ @since 0.9.0.0
+    | ChTheta
+      -- ^ @since 0.9.0.0
+    | ChTheta2
+      -- ^ @since 0.9.0.0
+    | ChRadius
+      -- ^ @since 0.9.0.0
+    | ChRadius2
+      -- ^ @since 0.9.0.0
     | ChColor
     | ChFill
       -- ^ @since 0.3.0.0
@@ -1137,7 +1172,10 @@
       -- ^ @since 0.4.0.0
     | ChText
       -- ^ @since 0.4.0.0
-
+    | ChDescription
+      -- ^ @since 0.9.0.0
+    | ChURL
+      -- ^ @since 0.9.0.0
 
 channelLabel :: Channel -> T.Text
 channelLabel ChX = "x"
@@ -1145,9 +1183,14 @@
 channelLabel ChX2 = "x2"
 channelLabel ChY2 = "y2"
 channelLabel ChLongitude = "longitude"
-channelLabel ChLatitude = "latitude"
 channelLabel ChLongitude2 = "longitude2"
+channelLabel ChLatitude = "latitude"
 channelLabel ChLatitude2 = "latitude2"
+channelLabel ChAngle = "angle"
+channelLabel ChTheta = "theta"
+channelLabel ChTheta2 = "theta2"
+channelLabel ChRadius = "radius"
+channelLabel ChRadius2 = "radius2"
 channelLabel ChColor = "color"
 channelLabel ChFill = "fill"
 channelLabel ChFillOpacity = "fillOpacity"
@@ -1158,10 +1201,11 @@
 channelLabel ChSize = "size"
 channelLabel ChStroke = "stroke"
 channelLabel ChStrokeDash = "strokeDash"
-channelLabel ChStrokeWidth = "strokeWidth"
 channelLabel ChStrokeOpacity = "strokeOpacity"
+channelLabel ChStrokeWidth = "strokeWidth"
 channelLabel ChText = "text"
-
+channelLabel ChDescription = "description"
+channelLabel ChURL = "url"
 
 {-|
 
@@ -1327,11 +1371,13 @@
 data RepeatFields
     = RowFields [FieldName]
     | ColumnFields [FieldName]
-
+    | LayerFields [FieldName]
+      -- ^ @since 0.9.0.0
 
 repeatFieldsProperty :: RepeatFields -> LabelledSpec
 repeatFieldsProperty (RowFields fs) = "row" .= fs
 repeatFieldsProperty (ColumnFields fs) = "column" .= fs
+repeatFieldsProperty (LayerFields fs) = "layer" .= fs
 
 
 {-|
@@ -1486,19 +1532,25 @@
     = HFormat T.Text
       -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html) for
       --   facet header (title) values. To distinguish between formatting as numeric values
-      --   and data/time values, additionally use 'HFormatAsNum' or 'HFormatAsTemporal'.
+      --   and data/time values, additionally use 'HFormatAsNum', 'HFormatAsTemporal',
+      --   and 'HFormatAsCustom'.
     | HFormatAsNum
       -- ^ Facet headers should be formatted as numbers. Use a
       --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
       --   with 'HFormat'.
       --
-      -- @since 0.4.0.0
+      --   @since 0.4.0.0
     | HFormatAsTemporal
       -- ^ Facet headers should be formatted as dates or times. Use a
       --   [d3 date/time format string](https://github.com/d3/d3-time-format#locale_format)
       --   with 'HFormat'.
       --
-      -- @since 0.4.0.0
+      --   @since 0.4.0.0
+    | HFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'HFormat'.
+      --
+      --   @since 0.9.0.0
     | HLabel Bool
       -- ^ Should labels be included as part of the header. The default is @True@.
       --
@@ -1645,6 +1697,7 @@
 headerProperty (HFormat fmt) = "format" .= fmt
 headerProperty HFormatAsNum = "formatType" .= fromT "number"
 headerProperty HFormatAsTemporal = "formatType" .= fromT "time"
+headerProperty (HFormatAsCustom c) = "formatType" .= c
 headerProperty (HTitle ttl) = "title" .= splitOnNewline ttl
 headerProperty HNoTitle = "title" .= A.Null
 headerProperty (HLabel b) = "labels" .= b
diff --git a/src/Graphics/Vega/VegaLite/Legend.hs b/src/Graphics/Vega/VegaLite/Legend.hs
--- a/src/Graphics/Vega/VegaLite/Legend.hs
+++ b/src/Graphics/Vega/VegaLite/Legend.hs
@@ -66,6 +66,10 @@
   , fromDS
   , splitOnNewline
   )
+import Graphics.Vega.VegaLite.Scale
+  ( ScaleNice
+  , scaleNiceSpec
+  )
 import Graphics.Vega.VegaLite.Specification (VLSpec, LabelledSpec)
 import Graphics.Vega.VegaLite.Time
   ( DateTime
@@ -227,7 +231,30 @@
 -- based on schema #/definitions/Legend
 
 data LegendProperty
-    = LClipHeight Double
+    = LAria Bool
+      -- ^ A boolean flag indicating if
+      --   [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   should be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG group,
+      --   removing the legend from the ARIA accessibility tree.
+      --
+      --   __Default value:__ True
+      --
+      --    @since 0.9.0.0
+    | LAriaDescription T.Text
+      -- ^ A text description of this legend for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If the 'LAria' property is true, for SVG output the
+      --   [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute)
+      --   will be set to this description.
+      --
+      --   If the description is unspecified it will be automatically generated.
+      --
+      --   @since 0.9.0.0
+    | LClipHeight Double
       -- ^ The height, in pixels, to clip symbol legend entries.
       --
       --   @since 0.4.0.0
@@ -255,7 +282,8 @@
     | LFormat T.Text
       -- ^ [Formatting pattern](https://vega.github.io/vega-lite/docs/format.html) for
       --   legend values. To distinguish between formatting as numeric values
-      --   and data/time values, additionally use 'LFormatAsNum' or 'LFormatAsTemporal'.
+      --   and data/time values, additionally use 'LFormatAsNum', 'LFormatAsTemporal',
+      --   or 'LFormatAsCustom'.
     | LFormatAsNum
       -- ^ Legends should be formatted as numbers. Use a
       --   [d3 numeric format string](https://github.com/d3/d3-format#locale_format)
@@ -268,6 +296,11 @@
       --   with 'LFormat'.
       --
       -- @since 0.4.0.0
+    | LFormatAsCustom T.Text
+      -- ^ The [custom format type](https://vega.github.io/vega-lite/docs/config.html#custom-format-type)
+      --   for use with with 'LFormat'.
+      --
+      --   @since 0.9.0.0
     | LGradientLength Double
       -- ^ The length in pixels of the primary axis of the color gradient.
       --
@@ -385,6 +418,17 @@
       -- ^ @since 0.4.0.0
     | LTickCount Double
       -- ^ The desired number of tick values for quantitative legends.
+      --
+      --   The 'LTickCountTime' option can instead be used for \"time\" or
+      --   \"utc\" scales.
+    | LTickCountTime ScaleNice
+      -- ^ A specialised version of 'LTickCount' for \"time\" and \"utc\"
+      --   time scales.
+      --
+      --   The 'Graphics.Vega.VegaLite.IsNice' and 'Graphics.Vega.VegaLte.NTickCount'
+      --   options should not be used as they generate invalid VegaLite.
+      --
+      --   @since 0.9.0.0
     | LTickMinStep Double
       -- ^ The minimum desired step between legend ticks, in terms of the scale
       --   domain values.
@@ -447,6 +491,8 @@
       -- ^ The z-index at which to draw the legend.
 
 legendProperty :: LegendProperty -> LabelledSpec
+legendProperty (LAria b) = "aria" .= b
+legendProperty (LAriaDescription t) = "description" .= t
 legendProperty (LClipHeight x) = "clipHeight" .= x
 legendProperty (LColumnPadding x) = "columnPadding" .= x
 legendProperty (LColumns n) = "columns" .= n
@@ -456,6 +502,7 @@
 legendProperty (LFormat s) = "format" .= s
 legendProperty LFormatAsNum = "formatType" .= fromT "number"
 legendProperty LFormatAsTemporal = "formatType" .= fromT "time"
+legendProperty (LFormatAsCustom c) = "formatType" .= c
 legendProperty (LGradientLength x) = "gradientLength" .= x
 legendProperty (LGradientOpacity x) = "gradientOpacity" .= x
 legendProperty (LGradientStrokeColor s) = "gradientStrokeColor" .= fromColor s
@@ -493,6 +540,7 @@
 legendProperty (LSymbolStrokeWidth x) = "symbolStrokeWidth" .= x
 legendProperty (LSymbolType sym) = "symbolType" .= symbolLabel sym
 legendProperty (LTickCount x) = "tickCount" .= x
+legendProperty (LTickCountTime sn) = "tickCount" .= scaleNiceSpec sn
 legendProperty (LTickMinStep x) = "tickMinStep" .= x
 legendProperty (LTitle s) = "title" .= splitOnNewline s
 legendProperty LNoTitle = "title" .= A.Null
diff --git a/src/Graphics/Vega/VegaLite/Mark.hs b/src/Graphics/Vega/VegaLite/Mark.hs
--- a/src/Graphics/Vega/VegaLite/Mark.hs
+++ b/src/Graphics/Vega/VegaLite/Mark.hs
@@ -91,7 +91,11 @@
 --   properties apply to all marks.
 --
 data Mark
-    = Area
+    = Arc
+      -- ^ An arc mark.
+      --
+      --   @since 0.9.0.0
+    | Area
       -- ^ An [area mark](https://vega.github.io/vega-lite/docs/area.html)
       --   for representing a series of data elements, such as in a stacked
       --   area chart or streamgraph.
@@ -182,6 +186,7 @@
 
 
 markLabel :: Mark -> T.Text
+markLabel Arc = "arc"
 markLabel Area = "area"
 markLabel Bar = "bar"
 markLabel Boxplot = "boxplot"
@@ -233,7 +238,44 @@
     = MAlign HAlign
       -- ^ Horizontal alignment of a text mark.
     | MAngle Angle
-      -- ^ Rotation angle of a text mark.
+      -- ^ Rotation angle of a text, point, or square marks.
+    | MAria Bool
+      -- ^ Should [ARIA attributes](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   be included (SVG output only).
+      --
+      --   If False, the \"aria-hidden\" attribute will be set on the output SVG element,
+      --   removing the mark item from the ARIA accessibility tree.
+      --
+      --   @since 0.9.0.0
+    | MAriaDescription T.Text
+      -- ^ A text description of the mark item for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If specified, this property determines the
+      --   [\"aria-label\" attribute](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Techniques/Using_the_aria-label_attribute).
+      --
+      --   @since 0.9.0.0
+    | MAriaRole T.Text
+      -- ^ Sets the type of user interface element of the mark item for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If specified, this property determines the \"role\" attribute.
+      --
+      --   Warning: this property is experimental and may be changed in the future.
+      --
+      --   @since 0.9.0.0
+    | MAriaRoleDescription T.Text
+      -- ^ A human-readable, author-localized description for the role of the mark item for
+      --   [ARIA accessibility](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA)
+      --   (SVG output only).
+      --
+      --   If specified, this property determines the \"aria-roledescription\" attribute.
+      --
+      --   Warning: this property is experimental and may be changed in the future.
+      --
+      --   @since 0.9.0.0
     | MAspect Bool
       -- ^ Should the aspect ratio of an 'Image' mark be preserved?
       --
@@ -399,6 +441,11 @@
       --   hyperlink.
       --
       --   @since 0.4.0.0
+    | MInnerRadius Double
+      -- ^ The inner radius, in pixels, of arc marks. It is an alias for
+      --    'MRadius2'.
+      --
+      --   @since 0.9.0.0
     | MInterpolate MarkInterpolation
       -- ^ Interpolation method used by line and area marks.
     | MLimit Double
@@ -444,6 +491,10 @@
       --   @since 0.4.0.0
     | MOrient Orientation
       -- ^ Orientation of a non-stacked bar, tick, area or line mark.
+    | MOuterRadius Double
+      -- ^ The outer radius, in pixels, of arc marks. It is an alias for 'MRadius'.
+      --
+      --   @since 0.9.0.0
     | MOutliers [MarkProperty]
       -- ^ Outlier symbol properties for the 'Boxplot' mark. See also 'MNoOutliers'.
       --
@@ -452,12 +503,29 @@
       -- ^ Do not draw outliers with the 'Boxplot' mark.
       --
       --   @since 0.4.0.0
+    | MPadAngle Double
+      -- ^ The angular padding apploed to sides of the arc, in radians.
+      --
+      --   @since 0.9.0.0
     | MPoint PointMarker
       -- ^ Appearance of a point marker joining the vertices of a line or area mark.
       --
       --   @since 0.4.0.0
     | MRadius Double
-      -- ^ Polar coordinate radial offset of a text mark from its origin.
+      -- ^ Polar coordinate radial offset of a text mark, in pixels, from its origin.
+      --   For an arc mark this defines the outer radius, in pixels.
+    | MRadius2 Double
+      -- ^ The inner radius, in pixels, of an arc mark.
+      --
+      --   @since 0.9.0.0
+    | MRadiusOffset Double
+      -- ^ The offset for 'MRadius'.
+      --
+      --   @since 0.9.0.0
+    | MRadius2Offset Double
+      -- ^ The offset for 'MRadius2'.
+      --
+      --   @since 0.9.0.0
     | MRemoveInvalid Bool
       -- ^ The default handling of invalid (@null@ and @NaN@) values. If @True@,
       --   invalid values are skipped or filtered out when represented as marks,
@@ -538,7 +606,23 @@
     | MTheta Double
       -- ^ Polar coordinate angle (clockwise from north in radians)
       --   of a text mark from the origin (determined by its
-      --   x and y properties).
+      --   x and y properties). For arc marks, the arc length in radians
+      --   if theta2 is not specified, otherwise the start arc angle,
+      --   where a value of 0 refers to \"up\" or \"north\", and increases
+      --   clockwise).
+    | MTheta2 Double
+      -- ^ The end angle of arc marks, in radians. A value of 0 indicated
+      --   \"up\" or \"north", and increases clockwise.
+      --
+      --   @since 0.9.0.0
+    | MThetaOffset Double
+      -- ^ Offset for 'MTheta'.
+      --
+      --   @since 0.9.0.0
+    | MTheta2Offset Double
+      -- ^ Offset for 'MTheta2'.
+      --
+      --   @since 0.9.0.0
     | MThickness Double
       -- ^ Thickness of a tick mark.
     | MTicks [MarkProperty]
@@ -578,12 +662,12 @@
       --
       --   @since 0.4.0.0
     | MX Double
-      -- ^ X position of a mark.
+      -- ^ X position of a mark. See also 'MXWidth'.
       --
       --   @since 0.4.0.0
     | MX2 Double
       -- ^ X2 position of a mark. This is the secondary position for
-      --   lines and area marks).
+      --   lines and area marks). See also 'MX2Width'.
       --
       --   @since 0.4.0.0
     | MXOffset Double
@@ -595,12 +679,12 @@
       --
       --   @since 0.4.0.0
     | MY Double
-      -- ^ Y position of a mark.
+      -- ^ Y position of a mark. See also 'MYHeight'.
       --
       --   @since 0.4.0.0
     | MY2 Double
       -- ^ Y2 position of a mark. This is the secondary position for
-      --   lines and area marks).
+      --   lines and area marks). See also 'MY2Height'.
       --
       --   @since 0.4.0.0
     | MYOffset Double
@@ -611,6 +695,22 @@
       -- ^ Y2 position offset of a mark.
       --
       --   @since 0.4.0.0
+    | MXWidth
+      -- ^ Specify the X coordinate as the \"width\" of the plot.
+      --
+      --   @since 0.9.0.0
+    | MX2Width
+      -- ^ Specify the X2 coordinate as the \"width\" of the plot.
+      --
+      --   @since 0.9.0.0
+    | MYHeight
+      -- ^ Specify the Y coordinate as the \"height\" of the plot.
+      --
+      --   @since 0.9.0.0
+    | MY2Height
+      -- ^ Specify the Y2 coordinate as the \"height\" of the plot.
+      --
+      --   @since 0.9.0.0
 
 
 markProperty :: MarkProperty -> LabelledSpec
@@ -629,6 +729,12 @@
 
 markProperty (MAlign algn) = "align" .= hAlignLabel algn
 markProperty (MAngle x) = "angle" .= x
+
+markProperty (MAria b) = "aria" .= b
+markProperty (MAriaDescription t) = "description" .= t
+markProperty (MAriaRole t) = "ariaRole" .= t
+markProperty (MAriaRoleDescription t) = "ariaRoleDescription" .= t
+
 markProperty (MAspect b) = "aspect" .= b
 markProperty (MBaseline va) = "baseline" .= vAlignLabel va
 
@@ -675,6 +781,7 @@
 markProperty (MFontWeight w) = "fontWeight" .= fontWeightSpec w
 markProperty (MHeight x) = "height" .= x
 markProperty (MHRef s) = "href" .= s
+markProperty (MInnerRadius r) = "innerRadius" .= r
 markProperty (MInterpolate interp) = "interpolate" .= markInterpolationLabel interp
 markProperty (MRemoveInvalid b) = "invalid" .= if b then "filter" else A.Null
 markProperty (MLimit x) = "limit" .= x
@@ -690,12 +797,19 @@
 markProperty (MOrder b) = "order" .= b
 markProperty (MOrient orient) = "orient" .= orientationSpec orient
 
+markProperty (MOuterRadius r) = "outerRadius" .= r
+
 -- what uses this?
 markProperty MNoOutliers = "outliers" .= False
 markProperty (MOutliers mps) = mprops_ "outliers" mps
 
+markProperty (MPadAngle x) = "padAngle" .= x
+
 markProperty (MPoint pm) = "point" .= pointMarkerSpec pm
 markProperty (MRadius x) = "radius" .= x
+markProperty (MRadius2 x) = "radius2" .= x
+markProperty (MRadiusOffset x) = "radiusOffset" .= x
+markProperty (MRadius2Offset x) = "radius2Offset" .= x
 
 -- what uses this?
 markProperty MNoRule = "rule" .= False
@@ -717,6 +831,9 @@
 markProperty (MText t) = "text" .= t
 markProperty (MTexts ts) = "text" .= ts
 markProperty (MTheta x) = "theta" .= x
+markProperty (MTheta2 x) = "theta2" .= x
+markProperty (MThetaOffset x) = "thetaOffset" .= x
+markProperty (MTheta2Offset x) = "theta2Offset" .= x
 markProperty (MThickness x) = "thickness" .= x
 
 -- what uses this?
@@ -736,6 +853,11 @@
 markProperty (MYOffset x) = "yOffset" .= x
 markProperty (MX2Offset x) = "x2Offset" .= x
 markProperty (MY2Offset x) = "y2Offset" .= x
+
+markProperty MXWidth = "x" .= fromT "width"
+markProperty MX2Width = "x2" .= fromT "width"
+markProperty MYHeight = "y" .= fromT "height"
+markProperty MY2Height = "y2" .= fromT "height"
 
 -- unlike elm, need to sort the stops list since we don't have a
 -- smart constructor (although it's not obvious this is actually needed,
diff --git a/src/Graphics/Vega/VegaLite/Scale.hs b/src/Graphics/Vega/VegaLite/Scale.hs
--- a/src/Graphics/Vega/VegaLite/Scale.hs
+++ b/src/Graphics/Vega/VegaLite/Scale.hs
@@ -169,11 +169,26 @@
 -}
 
 data ScaleRange
-    = RNumbers [Double]
+    = RPair Double Double
+      -- ^ The minimum and maximum values.
+      --
+      --   @since 0.9.0.0
+    | RHeight Double
+      -- ^ Specify the width as a number and height as the string @"height"@.
+      --
+      --   @since 0.9.0.0
+    | RWidth Double
+      -- ^ Specify the height as a number and width as the string @"width"@.
+      --
+      --   @since 0.9.0.0
+    | RNumbers [Double]
       -- ^ For [continuous scales](https://vega.github.io/vega-lite/docs/scale.html#continuous),
       --   a two-element array indicating minimum and maximum values, or an array with more than
       --   two entries for specifying a
       --   [piecewise scale](https://vega.github.io/vega-lite/docs/scale.html#piecewise).
+      --
+      --   Support for the two-element version may be removed (ie this left only
+      --   for piecewise scales).
     | RNumberLists [[Double]]
       -- ^ A scale range comprising of numeric lists, such as custom dash styles for
       --   the 'Graphics.Vega.VegaLite.strokeDash' channel encoding.
diff --git a/tests/ConfigTests.hs b/tests/ConfigTests.hs
--- a/tests/ConfigTests.hs
+++ b/tests/ConfigTests.hs
@@ -35,6 +35,7 @@
             , ("titleCfg2", titleCfg2)
             , ("titleCfg3", titleCfg3)
             , ("breaklinecfg", breakLineCfg)
+            , ("headerlabels", headerlabels)
             ]
 
 
@@ -337,3 +338,26 @@
                 , enc []
                 , mark Text []
                 ]
+
+
+headerlabels :: VegaLite
+headerlabels =
+  let conf = configure
+             . configuration (HeaderStyle [HLabel False])
+             $ []
+
+      dvals = dataFromUrl "https://vega.github.io/vega-lite/data/population.json" []
+
+      trans = transform
+              . filter (FExpr "datum.year === 2000")
+              . calculateAs "datum.sex === 2 ? 'Female' : 'Male'" "gender"
+              $ []
+
+      enc = encoding
+            . position X [PName "age", PmType Ordinal]
+            . position Y [PName "people", PmType Quantitative, PAggregate Sum]
+            . column [FName "gender", FmType Nominal]
+            . color [MName "gender", MmType Nominal]
+            $ []
+
+  in toVegaLite [conf, dvals, trans, enc, mark Bar []]
diff --git a/tests/DataTests.hs b/tests/DataTests.hs
--- a/tests/DataTests.hs
+++ b/tests/DataTests.hs
@@ -57,6 +57,7 @@
             , ("domain2", domain2)
             , ("domain3", domain3)
             -- , ("key1", key1)
+            , ("argmin_spaces", argminSpaces)
             ]
 
 
@@ -717,3 +718,37 @@
   in toVegaLite [ dvals [], enc [], mark Line [] ]
 
 -}
+
+
+-- From https://github.com/vega/vega-lite/pull/6475/files
+argminSpaces :: VegaLite
+argminSpaces =
+  let desc = "An example showing how to use argmin in tooltips with fields with spaces"
+
+      dvals = dataFromColumns []
+              . dataColumn "Fighter Name" (Strings [ "liukang", "liukang", "liukang"
+                                                   , "johnnycage", "johnnycage", "johnnycage"
+                                                   , "raided", "raiden", "raiden"
+                                                   ])
+              . dataColumn "Place Rank" (Numbers [1, 10, 3, 6, 5, 4, 8, 12, 2])
+              . dataColumn "Fighting Style" (Strings [ "tiger", "crane", "shaolin"
+                                                     , "tiger", "crane", "shaolin"
+                                                     , "tiger", "crane", "shaolin"
+                                                     ])
+              $ []
+
+  in toVegaLite [ description desc
+                , dvals
+                , mark Point []
+                , encoding
+                  . position X [PName "Place Rank", PAggregate Min, PmType Quantitative]
+                  . position Y [PName "Fighter Name", PmType Nominal]
+                  . tooltips [ [TName "Fighter Name", TmType Nominal]
+                             , [TName "Place Rank", TAggregate Min, TmType Quantitative]
+                             , [ TName "Fighting Style"
+                               , TmType Nominal
+                               , TAggregate (ArgMin (Just "Place Rank"))
+                               ]
+                             ]
+                  $ []
+                ]
diff --git a/tests/FillStrokeTests.hs b/tests/FillStrokeTests.hs
--- a/tests/FillStrokeTests.hs
+++ b/tests/FillStrokeTests.hs
@@ -52,6 +52,7 @@
             , ("strokedash7", strokeDash7)
             , ("strokedash8", strokeDash8)
             , ("strokedash9", strokeDash9)
+            , ("fillopacity", fillopacity)
             ]
 
 encChart :: ([a] -> [EncodingSpec]) -> VegaLite
@@ -412,3 +413,22 @@
 strokeDash7 = scaledStrokeDash 1
 strokeDash8 = scaledStrokeDash 2
 strokeDash9 = scaledStrokeDash 4
+
+
+-- found in a bug report and thought would be a good test
+fillopacity :: VegaLite
+fillopacity =
+  let dvals = dataFromColumns []
+              . dataColumn "a" (Strings ["A", "B"])
+              . dataColumn "b" (Numbers [10, 20])
+              $ []
+
+      enc = encoding
+            . position X [PName "a", PmType Ordinal, PAxis [AxLabelAngle 0]]
+            . position Y [PName "b", PmType Quantitative]
+            . fillOpacity [MName "b", MmType Quantitative]
+
+  in toVegaLite [ dvals
+                , mark Bar []
+                , enc []
+                ]
diff --git a/tests/Gallery/Area.hs b/tests/Gallery/Area.hs
--- a/tests/Gallery/Area.hs
+++ b/tests/Gallery/Area.hs
@@ -9,7 +9,9 @@
 import Graphics.Vega.VegaLite
 
 import Prelude hiding (filter, lookup)
+import Data.Function ((&))
 
+
 testSpecs :: [(String, VegaLite)]
 testSpecs = [ ("area1", area1)
             , ("area2", area2)
@@ -18,8 +20,14 @@
             , ("area5", area5)
             , ("area6", area6)
             , ("area7", area7)
+            , ("lasagna", lasagna)
             ]
 
+
+stockData :: Data
+stockData = dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
+
+
 area1 :: VegaLite
 area1 =
     let
@@ -57,7 +65,7 @@
     in
     toVegaLite
         [ des
-        , dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
+        , stockData
         , trans []
         , mark Area [ MPoint (PMMarker []), MLine (LMMarker []) ]
         , enc []
@@ -261,3 +269,50 @@
         , trans []
         , vConcat [ spec1, asSpec [ layer [ spec2, spec3 ] ] ]
         ]
+
+
+-- https://vega.github.io/vega-lite/examples/rect_lasagna.html
+lasagna :: VegaLite
+lasagna =
+  let trans = transform
+              . filter (FExpr "datum.symbol !== 'GOOG'")
+              $ []
+
+      xAxis = [ AxFormat "%Y"
+              , AxLabelAngle 0
+              , AxLabelOverlap ONone
+              , AxDataCondition
+                xCondition
+                (CAxLabelColor "black" "")
+              , AxDataCondition
+                xCondition
+                (CAxTickColor "black" "")
+              ]
+
+      xCondition = FEqual "value" (DateTime [DTMonthNum 1, DTDate 1])
+                   & FilterOpTrans (MTimeUnit MonthDate)
+                   
+      enc = encoding
+            . position X [ PTimeUnit YearMonthDate
+                         , PName "date"
+                         , PmType Ordinal
+                         , PTitle "Time"
+                         , PAxis xAxis
+                         ]
+            .position Y [ PName "symbol"
+                        , PmType Nominal
+                        , PNoTitle
+                        ]
+            . color [ MAggregate Sum
+                    , MName "price"
+                    , MmType Quantitative
+                    , MTitle "Price"
+                    ]
+
+  in toVegaLite [ trans
+                , width 300
+                , height 100
+                , stockData
+                , mark Rect []
+                , enc []
+                ]
diff --git a/tests/Gallery/Bar.hs b/tests/Gallery/Bar.hs
--- a/tests/Gallery/Bar.hs
+++ b/tests/Gallery/Bar.hs
@@ -37,6 +37,8 @@
             , ("wilkinsondotplot", wilkinsonDotPlot)
             , ("initialletter", initialLetter)
             , ("barnegative", barNegative)
+            , ("baraxisspacesaving", barAxisSpaceSaving)
+            , ("layer_bar_labels_grey", layerBarLabelsGrey)
             ]
 
 
@@ -60,7 +62,10 @@
 seattleWeather :: Data
 seattleWeather = dataFromUrl "https://vega.github.io/vega-lite/data/seattle-weather.csv" []
 
+movieData :: Data
+movieData = dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
 
+
 -- bar1 in GalleryBar.elm
 bar1 :: VegaLite
 bar1 =
@@ -80,6 +85,7 @@
     in
     toVegaLite [ des, dvals [], mark Bar [], enc [] ]
 
+
 -- bar4 in GalleryBar.elm
 bar2 :: VegaLite
 bar2 =
@@ -94,7 +100,7 @@
     in
     toVegaLite
         [ des
-        , dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
+        , movieData
         , mark Bar [ MBinSpacing 0 ]
         , enc []
         ]
@@ -634,8 +640,6 @@
 labelOverlay =
   let des = description "Bar chart with label overlay"
 
-      dvals = dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
-
       trans = transform
               . calculateAs "isValid(datum.Major_Genre)? datum.Major_Genre : 'unclassified'" "genre"
 
@@ -686,7 +690,7 @@
         [ des
         , width 200
         , heightStep 16
-        , dvals
+        , movieData
         , trans []
         , enc []
         , layer [ specBar, specText ]
@@ -790,4 +794,72 @@
                                        ]
                                ]
                   $ []
+                ]
+
+
+-- https://vega.github.io/vega-lite/examples/bar_axis_space_saving.html
+barAxisSpaceSaving :: VegaLite
+barAxisSpaceSaving =
+  let desc = "Bar Chart with a spacing-saving y-axis"
+
+      enc = encoding
+            . position X [PAggregate Count, PmType Quantitative, PAxis [AxGrid False]]
+            . position Y [ PName "Origin"
+                         , PmType Nominal
+                         , PScale [SPadding 0]
+                         , PBand 0.5
+                         , PAxis yAx
+                         ]
+
+      yAx = [ AxBandPosition 0
+            , AxGrid True
+            , AxDomain False
+            , AxTicks False
+            , AxLabelAlign AlignLeft
+            , AxLabelBaseline AlignMiddle
+            , AxLabelPadding (-5)
+            , AxLabelOffset (-15)
+            , AxTitleX 5
+            , AxTitleY (-5)
+            , AxTitleAngle 0
+            , AxTitleAlign AlignLeft
+            ]
+
+  in toVegaLite [ description desc
+                , dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
+                , heightStep 50
+                , mark Bar [MYOffset 5, MCornerRadiusEnd 2]
+                , enc []
+                ]
+
+
+-- https://vega.github.io/vega-lite/examples/layer_bar_labels_grey.html
+layerBarLabelsGrey :: VegaLite
+layerBarLabelsGrey =
+  let baseEnc = encoding
+                . position Y [PName "Major_Genre", PmType Nominal, PAxis []]
+
+      plot1 = [ mark Bar [MColor "#ddd"]
+              , encoding
+                . position X [ PAggregate Mean
+                             , PName "IMDB_Rating"
+                             , PmType Quantitative
+                             , PScale [SDomain (DNumbers [0, 10])]
+                             , PTitle "Mean IMDB Ratings"
+                             ]
+                $ []
+              ]
+
+      plot2 = [ mark Text [MAlign AlignLeft, MX 5]
+              , encoding
+                . text [TName "Major_Genre", TmType Nominal]
+                . detail [DAggregate Count, DmType Quantitative]
+                $ []
+              ]
+
+  in toVegaLite [ width 200
+                , heightStep 16
+                , movieData
+                , baseEnc []
+                , layer [asSpec plot1, asSpec plot2]
                 ]
diff --git a/tests/Gallery/Facet.hs b/tests/Gallery/Facet.hs
--- a/tests/Gallery/Facet.hs
+++ b/tests/Gallery/Facet.hs
@@ -21,6 +21,7 @@
             , ("facet6", facet6)
             , ("facet7", facet7)
             , ("trellisareaseattle", trellisAreaSeattle)
+            , ("facetgridbar", facetGridBar)
             ]
 
 
@@ -263,4 +264,66 @@
                                 ]
                         ]
                 , specification plot
+                ]
+
+
+-- https://vega.github.io/vega-lite/examples/facet_grid_bar.html
+facetGridBar :: VegaLite
+facetGridBar =
+  let dvals = dataFromColumns []
+              . dataColumn "a" (Strings xa)
+              . dataColumn "b" (Strings xb)
+              . dataColumn "c" (Strings xc)
+              . dataColumn "p" (Strings xp)
+              $ []
+
+      xa = [ "a1", "a1", "a1", "a1", "a1", "a1", "a1", "a1", "a1"
+           , "a2", "a2", "a2", "a2", "a2", "a2", "a2", "a2", "a2"
+           , "a3", "a3", "a3", "a3", "a3", "a3", "a3", "a3", "a3"
+           ]
+      xb = [ "b1", "b1", "b1", "b2", "b2", "b2", "b3", "b3", "b3"
+           , "b1", "b1", "b1", "b2", "b2", "b2", "b3", "b3", "b3"
+           , "b1", "b1", "b1", "b2", "b2", "b2", "b3", "b3", "b3"
+           ]
+      xc = [ "x", "y", "z", "x", "y", "z", "x", "y", "z"
+           , "x", "y", "z", "x", "y", "z", "x", "y", "z"
+           , "x", "y", "z", "x", "y", "z", "x", "y", "z"
+           ]
+      xp = [ "0.14", "0.60", "0.03", "0.80", "0.38", "0.55", "0.11", "0.58", "0.79"
+           , "0.83", "0.87", "0.67", "0.97", "0.84", "0.90", "0.74", "0.64", "0.19"
+           , "0.57", "0.35", "0.49", "0.91", "0.38", "0.91", "0.99", "0.80", "0.37"
+           ]
+        
+      enc = encoding
+            . position X [ PName "p"
+                         , PmType Quantitative
+                         , PAxis [AxFormat "%"]
+                         , PNoTitle
+                         ]
+            . position Y [ PName "c"
+                         , PmType Nominal
+                         , PAxis []
+                         ]
+            . color [ MName "c"
+                    , MmType Nominal
+                    , MLegend [LOrient LOBottom, LTitleOrient SLeft]
+                    , MTitle "settings"
+                    ]
+            . row [ FName "a"
+                  , FmType Nominal
+                  , FTitle "Factor A"
+                  , FHeader [HLabelAngle 0]
+                  ]
+            . column [ FName "b"
+                     , FmType Nominal
+                     , FTitle "Factor B"
+                     ]
+
+  in toVegaLite [ description "A simple grid of bar charts to compare performance data."
+                , dvals
+                , width 60
+                , heightStep 8
+                , spacing 5
+                , mark Bar []
+                , enc []
                 ]
diff --git a/tests/Gallery/Histogram.hs b/tests/Gallery/Histogram.hs
new file mode 100644
--- /dev/null
+++ b/tests/Gallery/Histogram.hs
@@ -0,0 +1,47 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module Gallery.Histogram (testSpecs) where
+
+import Graphics.Vega.VegaLite
+
+import Prelude hiding (filter, lookup, repeat)
+
+testSpecs :: [(String, VegaLite)]
+testSpecs = [ ("histogram_rel_freq", histogramRelFreq) ]
+
+
+carData :: Data
+carData = dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
+
+
+histogramRelFreq :: VegaLite
+histogramRelFreq =
+  let desc = "Relative frequency histogram. The data is binned with first transform. The number of values per bin and the total number are calculated in the second and third transform to calculate the relative frequency in the last transformation step."
+
+      trans = transform
+              . binAs [AlreadyBinned True] "Horsepower" "bin_Horsepwoer"   -- intentional typo
+              . aggregate [opAs Count "" "Count"] ["bin_Horsepwoer", "bin_Horsepwoer_end"]
+              . joinAggregate [opAs Sum "Count" "TotalCount"] []
+              . calculateAs "datum.Count/datum.TotalCount" "PercentOfTotal"
+              $ []
+
+      enc = encoding
+            . position X [ PName "bin_Horsepwoer"
+                         , PmType Quantitative
+                         , PTitle "Horsepower"
+                         , PBin [AlreadyBinned True]
+                         ]
+            . position X2 [PName "bin_Horsepwoer_end"]
+            . position Y [ PName "PercentOfTotal"
+                         , PmType Quantitative
+                         , PTitle "Relative Frequency"
+                         , PAxis [AxFormat ".1~%"]
+                         ]
+
+  in toVegaLite [ description desc
+                , carData
+                , trans
+                , mark Bar [MTooltip TTEncoding]
+                , enc []
+                ]
+
diff --git a/tests/Gallery/Interaction.hs b/tests/Gallery/Interaction.hs
--- a/tests/Gallery/Interaction.hs
+++ b/tests/Gallery/Interaction.hs
@@ -27,6 +27,7 @@
             , ("interaction11b", interaction11b)
             , ("interaction11c", interaction11c)
             , ("interaction11d", interaction11d)
+            , ("interactivelinehover", interactiveLineHover)
             ]
 
 
@@ -482,3 +483,66 @@
 interaction11b = initInterval (Just xInit) Nothing
 interaction11c = initInterval Nothing (Just yInit)
 interaction11d = initInterval (Just xInit) (Just yInit)
+
+
+-- https://vega.github.io/vega-lite/examples/interactive_line_hover.html
+interactiveLineHover :: VegaLite
+interactiveLineHover =
+  let desc = "Multi-series line chart with labels and interactive highlight on hover.  We also set the selection's initial value to provide a better screenshot"
+
+      dvals = dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
+
+      baseEnc = encoding
+                . color [ MSelectionCondition (SelectionName "hover")
+                          [MName "symbol", MmType Nominal, MLegend []]
+                          [MString "grey"]
+                        ]
+                . opacity [ MSelectionCondition (SelectionName "hover")
+                            [MNumber 1]
+                            [MNumber 0.2]
+                          ]
+
+      lyr1 = [ encoding
+               . position X [PName "date", PmType Temporal, PTitle "date"]
+               . position Y [PName "price", PmType Quantitative, PTitle "price"]
+               $ []
+             , layer [asSpec lyr11, asSpec lyr12]
+             ]
+
+      lyr11 = [ description "transparent layer to make it easier to trigger selection"
+              , selection
+                . select "hover" Single [ On "mouseover"
+                                        , Empty
+                                        , Fields ["symbol"]
+                                        , SInit [("symbol", Str "AAPL")]
+                                        ]
+                $ []
+              , mark Line [MStrokeWidth 8, MStroke "transparent"]
+              ]
+      lyr12 = [mark Line []]
+
+      lyr2 = [ encoding
+               . position X [PName "date", PmType Temporal, PAggregate Max]
+               . position Y [PName "price", PmType Quantitative, PAggregate (ArgMax (Just "date"))]
+               $ []
+             , layer [asSpec lyr21, asSpec lyr22]
+             ]
+
+      lyr21 = [mark Circle []]
+      lyr22 = [ mark Text [MAlign AlignLeft, MdX 4]
+              , encoding
+                . text [TName "symbol", TmType Nominal]
+                $ []
+              ]
+
+  in toVegaLite [ description desc
+                , dvals
+                , transform
+                  . filter (FExpr "datum.symbol!=='IBM'")
+                  $ []
+                , baseEnc []
+                , layer (map asSpec [lyr1, lyr2])
+                , configure
+                  . configuration (ViewStyle [ViewNoStroke])
+                  $ []
+                ]
diff --git a/tests/Gallery/Label.hs b/tests/Gallery/Label.hs
--- a/tests/Gallery/Label.hs
+++ b/tests/Gallery/Label.hs
@@ -7,8 +7,9 @@
 --
 module Gallery.Label (testSpecs) where
 
-import Data.Aeson (Value)
+import Data.Aeson (Value(Object))
 import Data.Aeson.QQ.Simple (aesonQQ)
+import Data.HashMap.Strict (empty)
 
 import Graphics.Vega.VegaLite
 
@@ -184,68 +185,83 @@
         ]
 
 
+-- https://vega.github.io/vega-lite/examples/layer_bar_annotations.html
 label4 :: VegaLite
 label4 =
-    let
-        des =
-            description "Bar chart that highlights values beyond a threshold. The PM2.5 value of Beijing observed 15 days, highlighting the days when PM2.5 level is hazardous to human health. Data source https://chartaccent.github.io/chartaccent.html"
+  let des = description "The PM2.5 value of Beijing observed 15 days, highlighting the days when PM2.5 level is hazardous to human health. Data source https://chartaccent.github.io/chartaccent.html"
 
-        dvals =
-            dataFromColumns []
-                . dataColumn "Day" (Numbers (map fromIntegral [1::Int .. 15]))
-                . dataColumn "Value" (Numbers [ 54.8, 112.1, 63.6, 37.6, 79.7, 137.9, 120.1, 103.3, 394.8, 199.5, 72.3, 51.1, 112.0, 174.5, 130.5 ])
+      dvals = dataFromColumns []
+              . dataColumn "Day" (Numbers (map fromIntegral [1::Int .. 15]))
+              . dataColumn "Value" (Numbers [54.8, 112.1, 63.6, 37.6, 79.7, 137.9, 120.1, 103.3, 394.8, 199.5, 72.3, 51.1, 112.0, 174.5, 130.5])
 
-        encBar =
-            encoding
-                . position X [ PName "Day", PmType Ordinal, PAxis [ AxLabelAngle 0 ] ]
-                . position Y [ PName "Value", PmType Quantitative ]
+      encBar = encoding
+               . position X [PName "Day", PmType Ordinal, PAxis [AxLabelAngle 0]]
+               . position Y [PName "Value", PmType Quantitative]
 
-        specBar =
-            asSpec [ mark Bar [], encBar [] ]
+      specBar = asSpec [mark Bar [], encBar []]
 
-        trans =
-            transform
-                . filter (FExpr "datum.Value >= 300")
-                . calculateAs "300" "baseline"
+      trans = transform
+              . filter (FExpr "datum.Value >= 300")
+              . calculateAs "300" "baseline"
 
-        encUpperBar =
-            encoding
-                . position X [ PName "Day", PmType Ordinal, PAxis [ AxLabelAngle 0 ] ]
-                . position Y [ PName "baseline", PmType Quantitative ]
-                . position Y2 [ PName "Value" ]
-                . color [ MString "#e45755" ]
+      encUpperBar = encoding
+                    . position X [PName "Day", PmType Ordinal]
+                    . position Y [PName "baseline", PmType Quantitative, PTitle "PM2.5 Value"]
+                    . position Y2 [PName "Value"]
+                    . color [MString "#e45755"]
 
-        specUpperBar =
-            asSpec [ trans [], mark Bar [], encUpperBar [] ]
+      specUpperBar = asSpec [trans [], mark Bar [], encUpperBar []]
 
-        layer0 =
-            asSpec [ dvals [], layer [ specBar, specUpperBar ] ]
+      layer0 = asSpec [dvals [], layer [specBar, specUpperBar]]
 
-        thresholdData =
-            dataFromRows []
-                . dataRow [ ( "ThresholdValue", Number 300 ), ( "Threshold", Str "hazardous" ) ]
+      thresholdData = dataFromJson (Object empty) []
 
-        specRule =
-            asSpec [ mark Rule [], encRule [] ]
+      specRule = asSpec [mark Rule []]
 
-        encRule =
-            encoding
-                . position Y [ PName "ThresholdValue", PmType Quantitative ]
+      encRule = encoding
+                . position Y [PDatum (Number 300)]
 
-        specText =
-            asSpec [ mark Text [ MAlign AlignRight, MdX (-2), MdY (-4) ], encText [] ]
+      specText = asSpec [mark Text [ MAlign AlignRight
+                                   , MBaseline AlignBottom
+                                   , MdX (-2)
+                                   , MdY (-2)
+                                   , MXWidth
+                                   , MText "hazardous"
+                                   ]
+                        ]
 
-        encText =
-            encoding
-                . position X [ PWidth ]
-                . position Y [ PName "ThresholdValue", PmType Quantitative, PAxis [ AxTitle "PM2.5 Value" ] ]
-                . text [ TName "Threshold", TmType Ordinal ]
+      layer1 = asSpec [thresholdData, encRule [], layer [specRule, specText]]
 
-        layer1 =
-            asSpec [ thresholdData [], layer [ specRule, specText ] ]
-    in
-    toVegaLite [ des, layer [ layer0, layer1 ] ]
+  in toVegaLite [ des, layer [ layer0, layer1 ] ]
 
+
+{-
+{
+  "description": ,
+    ]}, {
+      "data": {
+         "values": [{}]
+      },
+      "encoding": {
+        "y": {"datum": 300}
+      },
+      "layer": [{
+        "mark": "rule"
+      }, {
+        "mark": {
+          "type": "text",
+          "align": "right",
+          "baseline": "bottom",
+          "dx": -2,
+          "dy": -2,
+          "x": "width",
+          "text": "hazardous"
+        }
+      }]
+    }
+  ]
+}
+-}
 
 label5 :: VegaLite
 label5 =
diff --git a/tests/Gallery/Layer.hs b/tests/Gallery/Layer.hs
--- a/tests/Gallery/Layer.hs
+++ b/tests/Gallery/Layer.hs
@@ -22,8 +22,15 @@
             , ("layer5", layer5)
             , ("layer6", layer6)
             , ("layer7", layer7)
+            , ("layertimeunitrect", layerTimeunitRect)
+            , ("layer_bar_fruit", layerBarFruit)
             ]
 
+
+seattleData :: Data
+seattleData = dataFromUrl "https://vega.github.io/vega-lite/data/seattle-weather.csv" []
+
+
 layer1 :: VegaLite
 layer1 =
     let
@@ -237,7 +244,7 @@
     in
     toVegaLite
         [ des
-        , dataFromUrl "https://vega.github.io/vega-lite/data/seattle-weather.csv" []
+        , seattleData
         , encTime []
         , layer [ specBar, specLine ]
         , res []
@@ -393,7 +400,87 @@
      [ description desc
      , height 300
      , width 400
-     , dataFromUrl "data/seattle-weather.csv" []
+     , seattleData
      , transform (wtrans [])
      , layer layers
      ]
+
+
+-- examples/specs/layer_timeunit_rect.vl.json
+layerTimeunitRect :: VegaLite
+layerTimeunitRect =
+  let desc = "Drawing rect bin from the beginning of May to end of July"
+
+      xAxis = [ PTimeUnit Month
+              , PName "date"
+              , PmType Temporal
+              ]
+
+      lyr1 = [ seattleData
+             , mark Bar []
+             , encoding
+               . position X (xAxis ++
+                            [ PTitle "month"
+                            , PAxis [ AxLabelAlign AlignLeft
+                                    , AxLabelExpr "datum.label[0]"
+                                    ]
+                            ]
+                            )
+               . position Y [PAggregate Mean, PName "precipitation", PmType Quantitative]
+               $ []
+             ]
+
+      lyr2 = [ dataFromColumns []
+               . dataColumn "date" (Strings ["May 1, 2010"])
+               . dataColumn "date_end" (Strings ["July 15, 2010"])
+               $ []
+             , mark Rect [MOpacity 0.5, MColor "grey"]
+             , encoding
+               . position X xAxis
+               . position X2 [PTimeUnit Month, PName "date_end"]
+               $ []
+             ]
+  
+  in toVegaLite [ description desc
+                , layer [asSpec lyr1, asSpec lyr2]
+                ]
+
+
+-- https://vega.github.io/vega-lite/examples/layer_bar_fruit.html
+layerBarFruit :: VegaLite
+layerBarFruit =
+  let desc = "Vega-Lite version of bar chart from https://observablehq.com/@d3/learn-d3-scales."
+
+      dvals = dataFromColumns []
+              . dataColumn "name" (Strings ["🍊", "🍇", "🍏", "🍌", "🍐", "🍋", "🍎", "🍉"])
+              . dataColumn "count" (Numbers [21,13, 8, 5, 3, 2, 1, 1])
+              $ []
+
+      plot1 = [ mark Bar []
+              , encoding
+                . color [MName "count", MmType Quantitative, MTitle "Number of fruit"]
+                $ []
+              ]
+
+      plot2 = [ mark Text [ MAlign AlignRight
+                          , MXOffset (-4)
+                          , MAria False
+                          ]
+              , encoding
+                . text [TName "count", TmType Quantitative]
+                . color [ MDataCondition
+                          [(FilterOp (FGreaterThan "count" (Number 10)), [MString "white"])]
+                          [MString "black"]
+                        ]
+                $ []
+              ]
+
+  in toVegaLite [ description desc
+                , width 400
+                , dvals
+                , encoding
+                  . position X [PName "count", PmType Quantitative, PNoTitle]
+                  . position Y [PName "name", PmType Ordinal, PSort [Descending, ByChannel ChX], PNoTitle]
+                  $ []
+                , layer [asSpec plot1, asSpec plot2]
+                ]
diff --git a/tests/Gallery/Line.hs b/tests/Gallery/Line.hs
--- a/tests/Gallery/Line.hs
+++ b/tests/Gallery/Line.hs
@@ -28,6 +28,7 @@
             , ("line11", line11)
             , ("line12", line12)
             , ("conditionalaxis", conditionalAxis)
+            , ("linecolorhalo", lineColorHalo)
             ]
 
 
@@ -375,4 +376,34 @@
                 , configure
                   . configuration (Axis [DomainColor "#ddd", TickColor "#ddd"])
                   $ []
+                ]
+
+
+-- https://vega.github.io/vega-lite/examples/line_color_halo.html
+lineColorHalo :: VegaLite
+lineColorHalo =
+  let desc = "Multi-series Line Chart with Halo. Use pivot and repeat-layer as a workaround to facet groups of lines and their halo strokes. See https://github.com/vega/vega-lite/issues/6192 for more discussion."
+
+      plot = [layer [asSpec plot1, asSpec plot2]]
+
+      encBase = encoding
+                . position X [PName "date", PmType Temporal]
+                . position Y [PRepeat Layer, PmType Quantitative, PTitle "price"]
+                
+      plot1 = [ mark Line [MStroke "white", MStrokeWidth 4]
+              , encBase []
+              ]
+      plot2 = [ mark Line []
+              , encBase
+                . stroke [MRepeatDatum Layer, MmType Nominal]
+                $ []
+              ]
+
+  in toVegaLite [ description desc
+                , stockData
+                , transform
+                  . pivot "symbol" "price" [PiGroupBy ["date"]]
+                  $ []
+                , repeat [LayerFields ["AAPL", "AMZN", "GOOG", "IBM", "MSFT"]]
+                , specification (asSpec plot)
                 ]
diff --git a/tests/Gallery/Repeat.hs b/tests/Gallery/Repeat.hs
--- a/tests/Gallery/Repeat.hs
+++ b/tests/Gallery/Repeat.hs
@@ -16,9 +16,14 @@
             , ("repeat3", repeat3)
             , ("repeat4", repeat4)
             , ("repeat5", repeat5)
+            , ("nested_concat_align", nestedConcatAlign)
             ]
 
 
+movieData :: Data
+movieData = dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
+
+
 repeat1 :: VegaLite
 repeat1 =
     let
@@ -227,6 +232,46 @@
         , spacing 15
         , bounds Flush
         , config []
-        , dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
+        , movieData
         , vConcat [ spec1, spec2 ]
         ]
+
+
+--https://vega.github.io/vega-lite/examples/nested_concat_align.html
+nestedConcatAlign :: VegaLite
+nestedConcatAlign =
+  let desc = "Nested concatenation aligned by setting axis minExtent"
+
+      plot1 = [ title "Ratings" []
+              , repeat [ColumnFields ["Rotten_Tomatoes_Rating", "IMDB_Rating"]]
+              , specification (asSpec spec)
+              ]
+              
+      plot2 = [ title "Gross" []
+              , repeat [ColumnFields ["US_Gross", "Worldwide_Gross"]]
+              , specification (asSpec spec)
+              ]
+
+      spec = [ width 150
+             , height 50
+             , mark Bar []
+             , encoding
+               . position X [ PRepeat Column
+                            , PBin [MaxBins 20]
+                            , PmType Quantitative
+                            ]
+               . position Y [ PAggregate Count
+                            , PmType Quantitative
+                            ]
+               $ []
+             ]
+
+  in toVegaLite [ description desc
+                , movieData
+                , vConcat [asSpec plot1, asSpec plot2]
+                , configure
+                  . configuration (CountTitleStyle "Count")
+                  . configuration (AxisX [TitleLimit 150])
+                  . configuration (AxisY [MinExtent 40])
+                  $ []
+                ]
diff --git a/tests/GeoTests.hs b/tests/GeoTests.hs
--- a/tests/GeoTests.hs
+++ b/tests/GeoTests.hs
@@ -41,6 +41,7 @@
             , ("scribbleMap1", scribbleMap1)
             , ("scribbleMap2", scribbleMap2)
             , ("map1d", map1d)
+            , ("geo_constant_value", geo_constant_value)
             ]
 
 
@@ -653,3 +654,41 @@
     toVegaLite
         [ width 500, height 400
         , layer [ backgroundSpec, cSpec, hSpec, vSpec ] ]
+
+
+-- geo_constant_value.vl.json
+geo_constant_value :: VegaLite
+geo_constant_value =
+  let lyr1 = [ mark Square []
+             , encoding
+               . position Longitude [PName "longitude", PmType Quantitative]
+               . position Latitude [PName "latitude", PmType Quantitative]
+               . size [MNumber 1]
+               . color [MString "gray"]
+               $ []
+             ]
+
+      lyr2 = [ mark Square []
+             , encoding
+               . position Longitude [PDatum (Number (-122.335167))]
+               . position Latitude [PName "latitude", PmType Quantitative]
+               . size [MNumber 1]
+               . color [MString "steelblue"]
+               $ []
+             ]
+
+      lyr3 = [ mark Square []
+             , encoding
+               . position Longitude [PName "longitude", PmType Quantitative]
+               . position Latitude [PDatum (Number 47.608013)]
+               . size [MNumber 1]
+               . color [MString "firebrick"]
+               $ []
+             ]
+
+  in toVegaLite [ width 500
+                , height 300
+                , dataFromUrl "https://vega.github.io/vega-lite/data/airports.csv" []
+                , projection [PrType AlbersUsa]
+                , layer (map asSpec [lyr1, lyr2, lyr3])
+                ]
diff --git a/tests/MarkTests.hs b/tests/MarkTests.hs
--- a/tests/MarkTests.hs
+++ b/tests/MarkTests.hs
@@ -20,7 +20,13 @@
 import Graphics.Vega.VegaLite
 
 testSpecs :: [(String, VegaLite)]
-testSpecs = [("blendmode", blendMode)]
+testSpecs = [ ("blendmode", blendMode)
+            , ("pieChart", pieChart)
+            , ("pieChartWithLabels", pieChartWithLabels)
+            , ("donutChart", donutChart)
+            , ("radialChart", radialChart)
+            , ("histogram_binned_no_x2", histogramBinnedNoX2)
+            ]
 
 
 -- How does blend-mode work (added in Vega-Lite 4.6.0)?
@@ -127,4 +133,119 @@
                 , blendData
                 , columns 4
                 , vlConcat layers
+                ]
+
+
+pieChart :: VegaLite
+pieChart =
+  let desc = description "A simple pie chart with embedded data."
+      dvals = dataFromColumns []
+              . dataColumn "category" (Numbers [1, 2, 3, 4, 5, 6])
+              . dataColumn "value" (Numbers [4, 6, 10, 3, 7, 8])
+              $ []
+      
+  in toVegaLite [ desc
+                , dvals
+                , mark Arc []
+                , encoding
+                  . position Theta [PName "value", PmType Quantitative]
+                  . color [MName "category", MmType Nominal]
+                  $ []
+                , viewBackground [VBNoStroke]
+                ]
+
+
+pieChartWithLabels :: VegaLite
+pieChartWithLabels =
+  let desc = description "A simple pie chart with labels."
+      dvals = dataFromColumns []
+              . dataColumn "category" (Strings ["a", "b", "c", "d", "e", "f"])
+              . dataColumn "value" (Numbers [4, 6, 10, 3, 7, 8])
+              $ []
+
+      plot = [mark Arc [MOuterRadius 80]]
+      label = [ mark Text [MRadius 90]
+              , encoding (text [TName "category", TmType Nominal] [])
+              ]
+
+  in toVegaLite [ desc
+                , dvals
+                , encoding
+                  -- can not get stack: true, but should be the same
+                  . position Theta [PName "value", PmType Quantitative, PStack StZero]
+                  . color [MName "category", MmType Nominal, MLegend []]
+                  $ []
+                , layer [asSpec plot, asSpec label]
+                , viewBackground [VBNoStroke]
+                ]
+
+
+donutChart :: VegaLite
+donutChart =
+  let desc = description "A simple donut chart with embedded data."
+      dvals = dataFromColumns []
+              . dataColumn "category" (Numbers [1, 2, 3, 4, 5, 6])
+              . dataColumn "value" (Numbers [4, 6, 10, 3, 7, 8])
+              $ []
+      
+  in toVegaLite [ desc
+                , dvals
+                , mark Arc [MInnerRadius 50]
+                , encoding
+                  . position Theta [PName "value", PmType Quantitative]
+                  . color [MName "category", MmType Nominal]
+                  $ []
+                , viewBackground [VBNoStroke]
+                ]
+
+
+radialChart :: VegaLite
+radialChart =
+  let desc = description "A simple radial chart with embedded data."
+      dvals = dataFromColumns []
+              . dataColumn "data" (Numbers [12, 23, 47, 6, 52, 19])
+              $ []
+
+      plot = [mark Arc [MInnerRadius 20, MStroke "#fff"]]
+      label = [ mark Text [MRadiusOffset 10]
+              , encoding (text [TName "data", TmType Quantitative] [])
+              ]
+
+  in toVegaLite [ desc
+                , dvals
+                , encoding
+                  -- can not get stack: true, but should be the same
+                  . position Theta [PName "data", PmType Quantitative, PStack StZero]
+                  . position R [ PName "data"
+                               , PmType Quantitative
+                               , PScale [ SType ScSqrt
+                                        , SZero True
+                                        , SRange (RPair 20 100)
+                                        ]
+                               ]
+                  . color [MName "data", MmType Nominal, MLegend []]
+                  $ []
+                , layer [asSpec plot, asSpec label]
+                , viewBackground [VBNoStroke]
+                ]
+
+
+-- https://github.com/vega/vega-lite/pull/6473
+-- as part of https://github.com/vega/vega-lite/issues/6086
+histogramBinnedNoX2 :: VegaLite
+histogramBinnedNoX2 =
+  let dvals = dataFromColumns []
+              . dataColumn "bin_start" (Numbers [8, 10, 12, 14, 16, 18, 20, 22])
+              . dataColumn "count" (Numbers [7, 29, 71, 127, 94, 54, 17, 5])
+              $ []
+
+  in toVegaLite [ dvals
+                , mark Bar []
+                , encoding
+                  . position X [ PName "bin_start"
+                               , PmType Quantitative
+                               , PBin [AlreadyBinned True, Step 2]
+                               ]
+                  . position Y [PName "count", PmType Quantitative]
+                  $ []
                 ]
diff --git a/tests/ScaleTests.hs b/tests/ScaleTests.hs
--- a/tests/ScaleTests.hs
+++ b/tests/ScaleTests.hs
@@ -19,6 +19,7 @@
             , ("scale9", scale9)
             , ("diverging1", diverging1)
             , ("diverging2", diverging2)
+            , ("axisrange", axisrange)
             ]
 
 scale1 :: VegaLite
@@ -154,80 +155,26 @@
     toVegaLite [ dataVals [], enc [], mark Circle [] ]
 
 
-scale6 :: VegaLite
-scale6 =
-    let
-        dataVals =
-            dataFromColumns []
-                . dataColumn "r" (Numbers [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ])
-
-        enc =
-            encoding
-                . size
-                    [ MName "r"
-                    , MmType Quantitative
-                    , MScale [ SRange (RNumbers [ 0, 80000 ]) ]
-                    , MLegend []
-                    ]
-    in
-    toVegaLite [ dataVals [], mark Point [], enc [] ]
-
-
-scale7 :: VegaLite
-scale7 =
-    let
-        dataVals =
-            dataFromColumns []
-                . dataColumn "r" (Numbers [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ])
-
-        enc =
-            encoding
-                . size
-                    [ MName "r"
-                    , MmType Quantitative
-                    , MScale [ SRange (RNumbers [ 0, 80000 ]), SType ScPow, SExponent 2 ]
-                    , MLegend []
-                    ]
-    in
-    toVegaLite [ dataVals [], mark Point [], enc [] ]
-
+rData :: [ScaleProperty] -> VegaLite
+rData scaleOpts =
+  let dataVals = dataFromColumns []
+                 . dataColumn "r" (Numbers [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ])
 
-scale8 :: VegaLite
-scale8 =
-    let
-        dataVals =
-            dataFromColumns []
-                . dataColumn "r" (Numbers [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ])
+      enc = encoding
+            . size [ MName "r"
+                   , MmType Quantitative
+                   , MScale (SRange (RPair 0 80000) : scaleOpts)
+                   , MLegend []
+                   ]
 
-        enc =
-            encoding
-                . size
-                    [ MName "r"
-                    , MmType Quantitative
-                    , MScale [ SRange (RNumbers [ 0, 80000 ]), SType ScPow, SExponent 1.2 ]
-                    , MLegend []
-                    ]
-    in
-    toVegaLite [ dataVals [], mark Point [], enc [] ]
+  in toVegaLite [ dataVals [], mark Point [], enc [] ]
 
 
-scale9 :: VegaLite
-scale9 =
-    let
-        dataVals =
-            dataFromColumns []
-                . dataColumn "r" (Numbers [ 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000 ])
-
-        enc =
-            encoding
-                .  size
-                    [ MName "r"
-                    , MmType Quantitative
-                    , MScale [ SRange (RNumbers [ 0, 80000 ]), SType ScLog, SBase (exp 1) ]
-                    , MLegend []
-                    ]
-    in
-    toVegaLite [ dataVals [], mark Point [], enc [] ]
+scale6, scale7, scale8, scale9 :: VegaLite
+scale6 = rData []
+scale7 = rData [SType ScPow, SExponent 2]
+scale8 = rData [SType ScPow, SExponent 1.2]
+scale9 = rData [SType ScLog, SBase (exp 1)]
 
 
 divergingData :: Data
@@ -262,3 +209,22 @@
                         , divergingEnc [ SDomainMid 0 ]
                         , mark Bar []
                         ]
+
+
+axisrange :: VegaLite
+axisrange =
+  let cars = dataFromUrl "https://vega.github.io/vega-lite/data/cars.json" []
+
+      ax axis vals = [ PName axis, PmType Quantitative, PScale [SRange vals] ]
+      xrange = RWidth 50
+      yrange = RHeight 60
+      enc = encoding
+            . position X (ax "Horsepower" xrange)
+            . position Y (ax "Miles_per_Gallon" yrange)
+            . size [ MName "Acceleration", MmType Quantitative, MBin [] ]
+            . opacity [ MName "Acceleration", MmType Quantitative, MBin [] ]
+            
+  in toVegaLite [ cars
+                , enc []
+                , mark Point [ MFilled True, MStroke "white", MStrokeWidth 0.4 ]
+                ]
diff --git a/tests/ShapeTests.hs b/tests/ShapeTests.hs
--- a/tests/ShapeTests.hs
+++ b/tests/ShapeTests.hs
@@ -46,6 +46,7 @@
             , ("rounded6", rounded6)
             , ("symbols1", symbols1)
             , ("symbols2", symbols2)
+            , ("windvector", windvector)
             ]
 
 
@@ -257,11 +258,7 @@
     let
         config =
             configure
-                . configuration (ViewStyle [ ViewNoStroke ])
-                -- I expected this to mean I could remove PAxis [] fro
-                -- the encoding, but it doesn't see to work in Vega-Lite 4.8.1
-                -- (or I mis-understand this).
-                --
+                . configuration (ViewStyle [ViewNoStroke])
                 . configuration (Axis [Disable True])
 
         dataVals =
@@ -280,9 +277,8 @@
         mpath = M.lookup "person" isotypes
         enc =
             encoding
-                -- see note in config about PAxis
-                . position X [ PName "col", PmType Ordinal, PAxis []]
-                . position Y [ PName "row", PmType Ordinal, PAxis []]
+                . position X [ PName "col", PmType Ordinal]
+                . position Y [ PName "row", PmType Ordinal]
                 . shape [ MPath (fromMaybe "circle" mpath) ]
                 . color
                     [ MSelectionCondition (SelectionName "highlight")
@@ -394,3 +390,31 @@
                          ]
                ]
         )
+
+
+windvector :: VegaLite
+windvector =
+  let dvals = dataFromUrl "https://vega.github.io/vega-lite/data/windvectors.csv" []
+
+      enc = encoding
+            . position X [PName "longitude", PmType Ordinal, PAxis []]
+            . position Y [PName "latitude", PmType Ordinal, PAxis []]
+            . color [ MName "dir"
+                    , MmType Quantitative
+                    , MScale [SDomain (DNumbers [0, 360]), SScheme "rainbow" []]
+                    , MLegend []
+                    ]
+            . angle [ MName "dir"
+                    , MmType Quantitative
+                    , MScale [SDomain (DNumbers [0, 360]), SRange (RPair 180 540)]
+                    ]
+            . size [MName "speed", MmType Quantitative]
+
+  in toVegaLite [ dvals
+                , mark Point [MShape SymWedge]
+                , enc []
+                , configure
+                  . configuration (ViewStyle [ ViewFill "black"
+                                             , ViewStep 10 ])
+                  $ []
+                ]
diff --git a/tests/Test.hs b/tests/Test.hs
--- a/tests/Test.hs
+++ b/tests/Test.hs
@@ -75,6 +75,7 @@
 import qualified Gallery.Error as GE
 import qualified Gallery.Facet as GF
 import qualified Gallery.Geo as GG
+import qualified Gallery.Histogram as GalleryHistogram
 import qualified Gallery.Interaction as GI
 import qualified Gallery.Label as GLBL
 import qualified Gallery.Layer as GLYR
@@ -152,6 +153,7 @@
   , toGTests "Error" "error" GE.testSpecs
   , toGTests "Facet" "facet" GF.testSpecs
   , toGTests "Geo" "geo" GG.testSpecs
+  , toGTests "Histogram" "histogram" GalleryHistogram.testSpecs
   , toGTests "Interaction" "interaction" GI.testSpecs
   , toGTests "Label" "label" GLBL.testSpecs
   , toGTests "Layer" "layer" GLYR.testSpecs
diff --git a/tests/ViewCompositionTests.hs b/tests/ViewCompositionTests.hs
--- a/tests/ViewCompositionTests.hs
+++ b/tests/ViewCompositionTests.hs
@@ -12,7 +12,10 @@
 
 import Prelude hiding (filter, repeat)
 
+import Data.Aeson (Value(Object))
+import Data.HashMap.Strict (empty)
 
+
 testSpecs :: [(String, VegaLite)]
 testSpecs = [ ("columns1", columns1)
             , ("columns2", columns2)
@@ -36,6 +39,9 @@
             , ("grid3", grid3)
             , ("grid4", grid4)
             , ("grid5", grid5)
+            , ("repeatinglayers", repeatinglayers)
+            , ("highlightvalue", highlightvalue)
+            , ("highlightDateTime", highlightDateTime)
             ]
 
 
@@ -200,9 +206,8 @@
 
 encByCatVal :: [EncodingSpec] -> PropertySpec
 encByCatVal = encoding
-              -- see note about removing 'PAxis []' in gridConfig
-              . position X [ PName "cat", PmType Ordinal, PAxis [] ]
-              . position Y [ PName "val", PmType Quantitative, PAxis [] ]
+              . position X [ PName "cat", PmType Ordinal ]
+              . position Y [ PName "val", PmType Quantitative ]
               . color [ MName "cat", MmType Nominal, MLegend [] ]
 
 specByCatVal :: VLSpec
@@ -222,9 +227,6 @@
                              , ViewFillOpacity 0.2
                              , ViewContinuousHeight 120 ])
   . configuration (FacetStyle fopts)
-  -- I had thought that disabling the axis would be the same as setting
-  -- PAxis [] for both axes, but it doesn't behave that way with
-  -- Vega Lite 4.8.1 (or I mis-understand this)
   . configuration (Axis [Disable True])
 
 grid1 :: VegaLite
@@ -311,3 +313,73 @@
   in carGrid Row opts
 
 
+repeatinglayers :: VegaLite
+repeatinglayers =
+  let dvals = dataFromUrl "https://vega.github.io/vega-lite/data/movies.json" []
+
+      plot = [ mark Line []
+             , encoding
+               . position X [PName "IMDB_Rating", PmType Quantitative, PBin []]
+               . position Y [ PRepeat Layer
+                            , PmType Quantitative
+                            , PAggregate Mean
+                            , PTitle "Mean of US and Worldwide Gross"
+                            ]
+               . color [MRepeatDatum Layer, MmType Nominal]
+               $ []
+             ]
+
+  in toVegaLite [ dvals
+                , repeat [LayerFields ["US_Gross", "Worldwide_Gross"]]
+                , specification (asSpec plot)
+                ]
+
+
+-- layer_line_datum_rule.vl.json
+highlightvalue :: VegaLite
+highlightvalue =
+  let dvals = dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
+      dummy = dataFromJson emptyData []
+      emptyData = Object empty
+
+      plot1 = [ dvals
+              , mark Line []
+              , encoding
+                . position X [PName "date", PmType Temporal]
+                . position Y [PName "price", PmType Quantitative]
+                . color [MName "symbol", MmType Nominal]
+                $ []
+              ]
+
+      plot2 = [ dummy
+              , mark Rule [MStrokeDash [2, 2], MSize 2]
+              , encoding (position Y [PDatum (Number 300)] [])
+              ]
+
+  in toVegaLite [ layer [asSpec plot1, asSpec plot2]
+                ]
+
+
+-- layer_line_datum_rule_datetime.vl.json
+highlightDateTime :: VegaLite
+highlightDateTime =
+  let dvals = dataFromUrl "https://vega.github.io/vega-lite/data/stocks.csv" []
+      dummy = dataFromJson emptyData []
+      emptyData = Object empty
+
+      plot1 = [ dvals
+              , mark Line []
+              , encoding
+                . position X [PName "date", PmType Temporal]
+                . position Y [PName "price", PmType Quantitative]
+                . color [MName "symbol", MmType Nominal]
+                $ []
+              ]
+
+      plot2 = [ dummy
+              , mark Rule [MStrokeDash [2, 2], MSize 2]
+              , encoding (position X [PDatum (DateTime [DTYear 2006])] [])
+              ]
+
+  in toVegaLite [ layer [asSpec plot1, asSpec plot2]
+                ]
diff --git a/tests/specs/config/headerlabels.vl b/tests/specs/config/headerlabels.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/config/headerlabels.vl
@@ -0,0 +1,40 @@
+{
+    "transform": [
+        {
+            "filter": "datum.year === 2000"
+        },
+        {
+            "as": "gender",
+            "calculate": "datum.sex === 2 ? 'Female' : 'Male'"
+        }
+    ],
+    "config": {
+        "header": {
+            "labels": false
+        }
+    },
+    "mark": "bar",
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/population.json"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "color": {
+            "field": "gender",
+            "type": "nominal"
+        },
+        "x": {
+            "field": "age",
+            "type": "ordinal"
+        },
+        "column": {
+            "field": "gender",
+            "type": "nominal"
+        },
+        "y": {
+            "field": "people",
+            "aggregate": "sum",
+            "type": "quantitative"
+        }
+    }
+}
diff --git a/tests/specs/data/argmin_spaces.vl b/tests/specs/data/argmin_spaces.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/data/argmin_spaces.vl
@@ -0,0 +1,83 @@
+{
+    "mark": "point",
+    "data": {
+        "values": [
+            {
+                "Place Rank": 1,
+                "Fighting Style": "tiger",
+                "Fighter Name": "liukang"
+            },
+            {
+                "Place Rank": 10,
+                "Fighting Style": "crane",
+                "Fighter Name": "liukang"
+            },
+            {
+                "Place Rank": 3,
+                "Fighting Style": "shaolin",
+                "Fighter Name": "liukang"
+            },
+            {
+                "Place Rank": 6,
+                "Fighting Style": "tiger",
+                "Fighter Name": "johnnycage"
+            },
+            {
+                "Place Rank": 5,
+                "Fighting Style": "crane",
+                "Fighter Name": "johnnycage"
+            },
+            {
+                "Place Rank": 4,
+                "Fighting Style": "shaolin",
+                "Fighter Name": "johnnycage"
+            },
+            {
+                "Place Rank": 8,
+                "Fighting Style": "tiger",
+                "Fighter Name": "raided"
+            },
+            {
+                "Place Rank": 12,
+                "Fighting Style": "crane",
+                "Fighter Name": "raiden"
+            },
+            {
+                "Place Rank": 2,
+                "Fighting Style": "shaolin",
+                "Fighter Name": "raiden"
+            }
+        ]
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "tooltip": [
+            {
+                "field": "Fighter Name",
+                "type": "nominal"
+            },
+            {
+                "field": "Place Rank",
+                "aggregate": "min",
+                "type": "quantitative"
+            },
+            {
+                "field": "Fighting Style",
+                "aggregate": {
+                    "argmin": "Place Rank"
+                },
+                "type": "nominal"
+            }
+        ],
+        "x": {
+            "field": "Place Rank",
+            "aggregate": "min",
+            "type": "quantitative"
+        },
+        "y": {
+            "field": "Fighter Name",
+            "type": "nominal"
+        }
+    },
+    "description": "An example showing how to use argmin in tooltips with fields with spaces"
+}
diff --git a/tests/specs/fillstroke/fillopacity.vl b/tests/specs/fillstroke/fillopacity.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/fillstroke/fillopacity.vl
@@ -0,0 +1,33 @@
+{
+    "mark": "bar",
+    "data": {
+        "values": [
+            {
+                "a": "A",
+                "b": 10
+            },
+            {
+                "a": "B",
+                "b": 20
+            }
+        ]
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "x": {
+            "field": "a",
+            "type": "ordinal",
+            "axis": {
+                "labelAngle": 0
+            }
+        },
+        "fillOpacity": {
+            "field": "b",
+            "type": "quantitative"
+        },
+        "y": {
+            "field": "b",
+            "type": "quantitative"
+        }
+    }
+}
diff --git a/tests/specs/gallery/area/lasagna.vl b/tests/specs/gallery/area/lasagna.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/area/lasagna.vl
@@ -0,0 +1,66 @@
+{
+    "transform": [
+        {
+            "filter": "datum.symbol !== 'GOOG'"
+        }
+    ],
+    "height": 100,
+    "mark": "rect",
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/stocks.csv"
+    },
+    "width": 300,
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "color": {
+            "field": "price",
+            "aggregate": "sum",
+            "title": "Price",
+            "type": "quantitative"
+        },
+        "x": {
+            "field": "date",
+            "timeUnit": "yearmonthdate",
+            "title": "Time",
+            "type": "ordinal",
+            "axis": {
+                "labelAngle": 0,
+                "labelOverlap": false,
+                "format": "%Y",
+                "labelColor": {
+                    "value": null,
+                    "condition": {
+                        "value": "black",
+                        "test": {
+                            "equal": {
+                                "date": 1,
+                                "month": 1
+                            },
+                            "field": "value",
+                            "timeUnit": "monthdate"
+                        }
+                    }
+                },
+                "tickColor": {
+                    "value": null,
+                    "condition": {
+                        "value": "black",
+                        "test": {
+                            "equal": {
+                                "date": 1,
+                                "month": 1
+                            },
+                            "field": "value",
+                            "timeUnit": "monthdate"
+                        }
+                    }
+                }
+            }
+        },
+        "y": {
+            "field": "symbol",
+            "title": null,
+            "type": "nominal"
+        }
+    }
+}
diff --git a/tests/specs/gallery/bar/baraxisspacesaving.vl b/tests/specs/gallery/bar/baraxisspacesaving.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/bar/baraxisspacesaving.vl
@@ -0,0 +1,46 @@
+{
+    "height": {
+        "step": 50
+    },
+    "mark": {
+        "cornerRadiusEnd": 2,
+        "yOffset": 5,
+        "type": "bar"
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/cars.json"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "x": {
+            "aggregate": "count",
+            "type": "quantitative",
+            "axis": {
+                "grid": false
+            }
+        },
+        "y": {
+            "field": "Origin",
+            "scale": {
+                "padding": 0
+            },
+            "type": "nominal",
+            "axis": {
+                "titleAlign": "left",
+                "bandPosition": 0,
+                "titleX": 5,
+                "domain": false,
+                "labelOffset": -15,
+                "titleY": -5,
+                "labelPadding": -5,
+                "labelBaseline": "middle",
+                "grid": true,
+                "labelAlign": "left",
+                "ticks": false,
+                "titleAngle": 0
+            },
+            "band": 0.5
+        }
+    },
+    "description": "Bar Chart with a spacing-saving y-axis"
+}
diff --git a/tests/specs/gallery/bar/layer_bar_labels_grey.vl b/tests/specs/gallery/bar/layer_bar_labels_grey.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/bar/layer_bar_labels_grey.vl
@@ -0,0 +1,56 @@
+{
+    "height": {
+        "step": 16
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/movies.json"
+    },
+    "width": 200,
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "mark": {
+                "color": "#ddd",
+                "type": "bar"
+            },
+            "encoding": {
+                "x": {
+                    "field": "IMDB_Rating",
+                    "scale": {
+                        "domain": [
+                            0,
+                            10
+                        ]
+                    },
+                    "aggregate": "mean",
+                    "title": "Mean IMDB Ratings",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": {
+                "align": "left",
+                "x": 5,
+                "type": "text"
+            },
+            "encoding": {
+                "text": {
+                    "field": "Major_Genre",
+                    "type": "nominal"
+                },
+                "detail": {
+                    "aggregate": "count",
+                    "type": "quantitative"
+                }
+            }
+        }
+    ],
+    "encoding": {
+        "y": {
+            "field": "Major_Genre",
+            "type": "nominal",
+            "axis": null
+        }
+    }
+}
diff --git a/tests/specs/gallery/facet/facetgridbar.vl b/tests/specs/gallery/facet/facetgridbar.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/facet/facetgridbar.vl
@@ -0,0 +1,213 @@
+{
+    "height": {
+        "step": 8
+    },
+    "mark": "bar",
+    "data": {
+        "values": [
+            {
+                "p": "0.14",
+                "a": "a1",
+                "b": "b1",
+                "c": "x"
+            },
+            {
+                "p": "0.60",
+                "a": "a1",
+                "b": "b1",
+                "c": "y"
+            },
+            {
+                "p": "0.03",
+                "a": "a1",
+                "b": "b1",
+                "c": "z"
+            },
+            {
+                "p": "0.80",
+                "a": "a1",
+                "b": "b2",
+                "c": "x"
+            },
+            {
+                "p": "0.38",
+                "a": "a1",
+                "b": "b2",
+                "c": "y"
+            },
+            {
+                "p": "0.55",
+                "a": "a1",
+                "b": "b2",
+                "c": "z"
+            },
+            {
+                "p": "0.11",
+                "a": "a1",
+                "b": "b3",
+                "c": "x"
+            },
+            {
+                "p": "0.58",
+                "a": "a1",
+                "b": "b3",
+                "c": "y"
+            },
+            {
+                "p": "0.79",
+                "a": "a1",
+                "b": "b3",
+                "c": "z"
+            },
+            {
+                "p": "0.83",
+                "a": "a2",
+                "b": "b1",
+                "c": "x"
+            },
+            {
+                "p": "0.87",
+                "a": "a2",
+                "b": "b1",
+                "c": "y"
+            },
+            {
+                "p": "0.67",
+                "a": "a2",
+                "b": "b1",
+                "c": "z"
+            },
+            {
+                "p": "0.97",
+                "a": "a2",
+                "b": "b2",
+                "c": "x"
+            },
+            {
+                "p": "0.84",
+                "a": "a2",
+                "b": "b2",
+                "c": "y"
+            },
+            {
+                "p": "0.90",
+                "a": "a2",
+                "b": "b2",
+                "c": "z"
+            },
+            {
+                "p": "0.74",
+                "a": "a2",
+                "b": "b3",
+                "c": "x"
+            },
+            {
+                "p": "0.64",
+                "a": "a2",
+                "b": "b3",
+                "c": "y"
+            },
+            {
+                "p": "0.19",
+                "a": "a2",
+                "b": "b3",
+                "c": "z"
+            },
+            {
+                "p": "0.57",
+                "a": "a3",
+                "b": "b1",
+                "c": "x"
+            },
+            {
+                "p": "0.35",
+                "a": "a3",
+                "b": "b1",
+                "c": "y"
+            },
+            {
+                "p": "0.49",
+                "a": "a3",
+                "b": "b1",
+                "c": "z"
+            },
+            {
+                "p": "0.91",
+                "a": "a3",
+                "b": "b2",
+                "c": "x"
+            },
+            {
+                "p": "0.38",
+                "a": "a3",
+                "b": "b2",
+                "c": "y"
+            },
+            {
+                "p": "0.91",
+                "a": "a3",
+                "b": "b2",
+                "c": "z"
+            },
+            {
+                "p": "0.99",
+                "a": "a3",
+                "b": "b3",
+                "c": "x"
+            },
+            {
+                "p": "0.80",
+                "a": "a3",
+                "b": "b3",
+                "c": "y"
+            },
+            {
+                "p": "0.37",
+                "a": "a3",
+                "b": "b3",
+                "c": "z"
+            }
+        ]
+    },
+    "width": 60,
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "color": {
+            "field": "c",
+            "title": "settings",
+            "type": "nominal",
+            "legend": {
+                "orient": "bottom",
+                "titleOrient": "left"
+            }
+        },
+        "row": {
+            "field": "a",
+            "header": {
+                "labelAngle": 0
+            },
+            "title": "Factor A",
+            "type": "nominal"
+        },
+        "x": {
+            "field": "p",
+            "title": null,
+            "type": "quantitative",
+            "axis": {
+                "format": "%"
+            }
+        },
+        "column": {
+            "field": "b",
+            "title": "Factor B",
+            "type": "nominal"
+        },
+        "y": {
+            "field": "c",
+            "type": "nominal",
+            "axis": null
+        }
+    },
+    "description": "A simple grid of bar charts to compare performance data.",
+    "spacing": 5
+}
diff --git a/tests/specs/gallery/histogram/histogram_rel_freq.vl b/tests/specs/gallery/histogram/histogram_rel_freq.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/histogram/histogram_rel_freq.vl
@@ -0,0 +1,68 @@
+{
+    "transform": [
+        {
+            "as": "bin_Horsepwoer",
+            "field": "Horsepower",
+            "bin": {
+                "binned": true
+            }
+        },
+        {
+            "groupby": [
+                "bin_Horsepwoer",
+                "bin_Horsepwoer_end"
+            ],
+            "aggregate": [
+                {
+                    "op": "count",
+                    "as": "Count"
+                }
+            ]
+        },
+        {
+            "joinaggregate": [
+                {
+                    "op": "sum",
+                    "as": "TotalCount",
+                    "field": "Count"
+                }
+            ]
+        },
+        {
+            "as": "PercentOfTotal",
+            "calculate": "datum.Count/datum.TotalCount"
+        }
+    ],
+    "mark": {
+        "tooltip": {
+            "content": "encoding"
+        },
+        "type": "bar"
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/cars.json"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "x2": {
+            "field": "bin_Horsepwoer_end"
+        },
+        "x": {
+            "field": "bin_Horsepwoer",
+            "bin": {
+                "binned": true
+            },
+            "title": "Horsepower",
+            "type": "quantitative"
+        },
+        "y": {
+            "field": "PercentOfTotal",
+            "title": "Relative Frequency",
+            "type": "quantitative",
+            "axis": {
+                "format": ".1~%"
+            }
+        }
+    },
+    "description": "Relative frequency histogram. The data is binned with first transform. The number of values per bin and the total number are calculated in the second and third transform to calculate the relative frequency in the last transformation step."
+}
diff --git a/tests/specs/gallery/interaction/interactivelinehover.vl b/tests/specs/gallery/interaction/interactivelinehover.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/interaction/interactivelinehover.vl
@@ -0,0 +1,111 @@
+{
+    "transform": [
+        {
+            "filter": "datum.symbol!=='IBM'"
+        }
+    ],
+    "config": {
+        "view": {
+            "stroke": null
+        }
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/stocks.csv"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "layer": [
+                {
+                    "mark": {
+                        "strokeWidth": 8,
+                        "stroke": "transparent",
+                        "type": "line"
+                    },
+                    "selection": {
+                        "hover": {
+                            "init": {
+                                "symbol": "AAPL"
+                            },
+                            "empty": "none",
+                            "type": "single",
+                            "on": "mouseover",
+                            "fields": [
+                                "symbol"
+                            ]
+                        }
+                    },
+                    "description": "transparent layer to make it easier to trigger selection"
+                },
+                {
+                    "mark": "line"
+                }
+            ],
+            "encoding": {
+                "x": {
+                    "field": "date",
+                    "title": "date",
+                    "type": "temporal"
+                },
+                "y": {
+                    "field": "price",
+                    "title": "price",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "layer": [
+                {
+                    "mark": "circle"
+                },
+                {
+                    "mark": {
+                        "dx": 4,
+                        "align": "left",
+                        "type": "text"
+                    },
+                    "encoding": {
+                        "text": {
+                            "field": "symbol",
+                            "type": "nominal"
+                        }
+                    }
+                }
+            ],
+            "encoding": {
+                "x": {
+                    "field": "date",
+                    "aggregate": "max",
+                    "type": "temporal"
+                },
+                "y": {
+                    "field": "price",
+                    "aggregate": {
+                        "argmax": "date"
+                    },
+                    "type": "quantitative"
+                }
+            }
+        }
+    ],
+    "encoding": {
+        "color": {
+            "value": "grey",
+            "condition": {
+                "field": "symbol",
+                "selection": "hover",
+                "type": "nominal",
+                "legend": null
+            }
+        },
+        "opacity": {
+            "value": 0.2,
+            "condition": {
+                "value": 1,
+                "selection": "hover"
+            }
+        }
+    },
+    "description": "Multi-series line chart with labels and interactive highlight on hover.  We also set the selection's initial value to provide a better screenshot"
+}
diff --git a/tests/specs/gallery/label/label4.vl b/tests/specs/gallery/label/label4.vl
--- a/tests/specs/gallery/label/label4.vl
+++ b/tests/specs/gallery/label/label4.vl
@@ -100,16 +100,14 @@
                         },
                         "x": {
                             "field": "Day",
-                            "type": "ordinal",
-                            "axis": {
-                                "labelAngle": 0
-                            }
+                            "type": "ordinal"
                         },
                         "y2": {
                             "field": "Value"
                         },
                         "y": {
                             "field": "baseline",
+                            "title": "PM2.5 Value",
                             "type": "quantitative"
                         }
                     }
@@ -118,49 +116,30 @@
         },
         {
             "data": {
-                "values": [
-                    {
-                        "ThresholdValue": 300,
-                        "Threshold": "hazardous"
-                    }
-                ]
+                "values": {}
             },
             "layer": [
                 {
-                    "mark": "rule",
-                    "encoding": {
-                        "y": {
-                            "field": "ThresholdValue",
-                            "type": "quantitative"
-                        }
-                    }
+                    "mark": "rule"
                 },
                 {
                     "mark": {
                         "dx": -2,
-                        "dy": -4,
+                        "dy": -2,
+                        "text": "hazardous",
                         "align": "right",
-                        "type": "text"
-                    },
-                    "encoding": {
-                        "text": {
-                            "field": "Threshold",
-                            "type": "ordinal"
-                        },
-                        "x": {
-                            "value": "width"
-                        },
-                        "y": {
-                            "field": "ThresholdValue",
-                            "type": "quantitative",
-                            "axis": {
-                                "title": "PM2.5 Value"
-                            }
-                        }
+                        "x": "width",
+                        "type": "text",
+                        "baseline": "bottom"
                     }
                 }
-            ]
+            ],
+            "encoding": {
+                "y": {
+                    "datum": 300
+                }
+            }
         }
     ],
-    "description": "Bar chart that highlights values beyond a threshold. The PM2.5 value of Beijing observed 15 days, highlighting the days when PM2.5 level is hazardous to human health. Data source https://chartaccent.github.io/chartaccent.html"
+    "description": "The PM2.5 value of Beijing observed 15 days, highlighting the days when PM2.5 level is hazardous to human health. Data source https://chartaccent.github.io/chartaccent.html"
 }
diff --git a/tests/specs/gallery/layer/layer7.vl b/tests/specs/gallery/layer/layer7.vl
--- a/tests/specs/gallery/layer/layer7.vl
+++ b/tests/specs/gallery/layer/layer7.vl
@@ -16,7 +16,7 @@
     ],
     "height": 300,
     "data": {
-        "url": "data/seattle-weather.csv"
+        "url": "https://vega.github.io/vega-lite/data/seattle-weather.csv"
     },
     "width": 400,
     "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
diff --git a/tests/specs/gallery/layer/layer_bar_fruit.vl b/tests/specs/gallery/layer/layer_bar_fruit.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/layer/layer_bar_fruit.vl
@@ -0,0 +1,93 @@
+{
+    "data": {
+        "values": [
+            {
+                "count": 21,
+                "name": "🍊"
+            },
+            {
+                "count": 13,
+                "name": "🍇"
+            },
+            {
+                "count": 8,
+                "name": "🍏"
+            },
+            {
+                "count": 5,
+                "name": "🍌"
+            },
+            {
+                "count": 3,
+                "name": "🍐"
+            },
+            {
+                "count": 2,
+                "name": "🍋"
+            },
+            {
+                "count": 1,
+                "name": "🍎"
+            },
+            {
+                "count": 1,
+                "name": "🍉"
+            }
+        ]
+    },
+    "width": 400,
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "mark": "bar",
+            "encoding": {
+                "color": {
+                    "field": "count",
+                    "title": "Number of fruit",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": {
+                "aria": false,
+                "align": "right",
+                "xOffset": -4,
+                "type": "text"
+            },
+            "encoding": {
+                "color": {
+                    "value": "black",
+                    "condition": {
+                        "value": "white",
+                        "test": {
+                            "field": "count",
+                            "gt": 10
+                        }
+                    }
+                },
+                "text": {
+                    "field": "count",
+                    "type": "quantitative"
+                }
+            }
+        }
+    ],
+    "encoding": {
+        "x": {
+            "field": "count",
+            "title": null,
+            "type": "quantitative"
+        },
+        "y": {
+            "field": "name",
+            "sort": {
+                "encoding": "x",
+                "order": "descending"
+            },
+            "title": null,
+            "type": "ordinal"
+        }
+    },
+    "description": "Vega-Lite version of bar chart from https://observablehq.com/@d3/learn-d3-scales."
+}
diff --git a/tests/specs/gallery/layer/layertimeunitrect.vl b/tests/specs/gallery/layer/layertimeunitrect.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/layer/layertimeunitrect.vl
@@ -0,0 +1,55 @@
+{
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "mark": "bar",
+            "data": {
+                "url": "https://vega.github.io/vega-lite/data/seattle-weather.csv"
+            },
+            "encoding": {
+                "x": {
+                    "field": "date",
+                    "timeUnit": "month",
+                    "title": "month",
+                    "type": "temporal",
+                    "axis": {
+                        "labelExpr": "datum.label[0]",
+                        "labelAlign": "left"
+                    }
+                },
+                "y": {
+                    "field": "precipitation",
+                    "aggregate": "mean",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": {
+                "color": "grey",
+                "opacity": 0.5,
+                "type": "rect"
+            },
+            "data": {
+                "values": [
+                    {
+                        "date_end": "July 15, 2010",
+                        "date": "May 1, 2010"
+                    }
+                ]
+            },
+            "encoding": {
+                "x2": {
+                    "field": "date_end",
+                    "timeUnit": "month"
+                },
+                "x": {
+                    "field": "date",
+                    "timeUnit": "month",
+                    "type": "temporal"
+                }
+            }
+        }
+    ],
+    "description": "Drawing rect bin from the beginning of May to end of July"
+}
diff --git a/tests/specs/gallery/line/linecolorhalo.vl b/tests/specs/gallery/line/linecolorhalo.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/line/linecolorhalo.vl
@@ -0,0 +1,71 @@
+{
+    "transform": [
+        {
+            "groupby": [
+                "date"
+            ],
+            "value": "price",
+            "pivot": "symbol"
+        }
+    ],
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/stocks.csv"
+    },
+    "repeat": {
+        "layer": [
+            "AAPL",
+            "AMZN",
+            "GOOG",
+            "IBM",
+            "MSFT"
+        ]
+    },
+    "spec": {
+        "layer": [
+            {
+                "mark": {
+                    "strokeWidth": 4,
+                    "stroke": "white",
+                    "type": "line"
+                },
+                "encoding": {
+                    "x": {
+                        "field": "date",
+                        "type": "temporal"
+                    },
+                    "y": {
+                        "field": {
+                            "repeat": "layer"
+                        },
+                        "title": "price",
+                        "type": "quantitative"
+                    }
+                }
+            },
+            {
+                "mark": "line",
+                "encoding": {
+                    "stroke": {
+                        "type": "nominal",
+                        "datum": {
+                            "repeat": "layer"
+                        }
+                    },
+                    "x": {
+                        "field": "date",
+                        "type": "temporal"
+                    },
+                    "y": {
+                        "field": {
+                            "repeat": "layer"
+                        },
+                        "title": "price",
+                        "type": "quantitative"
+                    }
+                }
+            }
+        ]
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "description": "Multi-series Line Chart with Halo. Use pivot and repeat-layer as a workaround to facet groups of lines and their halo strokes. See https://github.com/vega/vega-lite/issues/6192 for more discussion."
+}
diff --git a/tests/specs/gallery/repeat/nested_concat_align.vl b/tests/specs/gallery/repeat/nested_concat_align.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/gallery/repeat/nested_concat_align.vl
@@ -0,0 +1,76 @@
+{
+    "config": {
+        "countTitle": "Count",
+        "axisY": {
+            "minExtent": 40
+        },
+        "axisX": {
+            "titleLimit": 150
+        }
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/movies.json"
+    },
+    "vconcat": [
+        {
+            "repeat": {
+                "column": [
+                    "Rotten_Tomatoes_Rating",
+                    "IMDB_Rating"
+                ]
+            },
+            "spec": {
+                "height": 50,
+                "mark": "bar",
+                "width": 150,
+                "encoding": {
+                    "x": {
+                        "field": {
+                            "repeat": "column"
+                        },
+                        "bin": {
+                            "maxbins": 20
+                        },
+                        "type": "quantitative"
+                    },
+                    "y": {
+                        "aggregate": "count",
+                        "type": "quantitative"
+                    }
+                }
+            },
+            "title": "Ratings"
+        },
+        {
+            "repeat": {
+                "column": [
+                    "US_Gross",
+                    "Worldwide_Gross"
+                ]
+            },
+            "spec": {
+                "height": 50,
+                "mark": "bar",
+                "width": 150,
+                "encoding": {
+                    "x": {
+                        "field": {
+                            "repeat": "column"
+                        },
+                        "bin": {
+                            "maxbins": 20
+                        },
+                        "type": "quantitative"
+                    },
+                    "y": {
+                        "aggregate": "count",
+                        "type": "quantitative"
+                    }
+                }
+            },
+            "title": "Gross"
+        }
+    ],
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "description": "Nested concatenation aligned by setting axis minExtent"
+}
diff --git a/tests/specs/geo/geo_constant_value.vl b/tests/specs/geo/geo_constant_value.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/geo/geo_constant_value.vl
@@ -0,0 +1,68 @@
+{
+    "height": 300,
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/airports.csv"
+    },
+    "width": 500,
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "projection": {
+        "type": "albersUsa"
+    },
+    "layer": [
+        {
+            "mark": "square",
+            "encoding": {
+                "color": {
+                    "value": "gray"
+                },
+                "size": {
+                    "value": 1
+                },
+                "latitude": {
+                    "field": "latitude",
+                    "type": "quantitative"
+                },
+                "longitude": {
+                    "field": "longitude",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": "square",
+            "encoding": {
+                "color": {
+                    "value": "steelblue"
+                },
+                "size": {
+                    "value": 1
+                },
+                "latitude": {
+                    "field": "latitude",
+                    "type": "quantitative"
+                },
+                "longitude": {
+                    "datum": -122.335167
+                }
+            }
+        },
+        {
+            "mark": "square",
+            "encoding": {
+                "color": {
+                    "value": "firebrick"
+                },
+                "size": {
+                    "value": 1
+                },
+                "latitude": {
+                    "datum": 47.608013
+                },
+                "longitude": {
+                    "field": "longitude",
+                    "type": "quantitative"
+                }
+            }
+        }
+    ]
+}
diff --git a/tests/specs/scale/axisrange.vl b/tests/specs/scale/axisrange.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/scale/axisrange.vl
@@ -0,0 +1,44 @@
+{
+    "mark": {
+        "strokeWidth": 0.4,
+        "stroke": "white",
+        "type": "point",
+        "filled": true
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/cars.json"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "size": {
+            "field": "Acceleration",
+            "bin": true,
+            "type": "quantitative"
+        },
+        "opacity": {
+            "field": "Acceleration",
+            "bin": true,
+            "type": "quantitative"
+        },
+        "x": {
+            "field": "Horsepower",
+            "scale": {
+                "range": [
+                    50,
+                    "width"
+                ]
+            },
+            "type": "quantitative"
+        },
+        "y": {
+            "field": "Miles_per_Gallon",
+            "scale": {
+                "range": [
+                    "height",
+                    60
+                ]
+            },
+            "type": "quantitative"
+        }
+    }
+}
diff --git a/tests/specs/shape/isotype1.vl b/tests/specs/shape/isotype1.vl
--- a/tests/specs/shape/isotype1.vl
+++ b/tests/specs/shape/isotype1.vl
@@ -349,13 +349,11 @@
         },
         "x": {
             "field": "col",
-            "type": "ordinal",
-            "axis": null
+            "type": "ordinal"
         },
         "y": {
             "field": "row",
-            "type": "ordinal",
-            "axis": null
+            "type": "ordinal"
         }
     }
 }
diff --git a/tests/specs/shape/windvector.vl b/tests/specs/shape/windvector.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/shape/windvector.vl
@@ -0,0 +1,58 @@
+{
+    "config": {
+        "view": {
+            "fill": "black",
+            "step": 10
+        }
+    },
+    "mark": {
+        "shape": "wedge",
+        "type": "point"
+    },
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/windvectors.csv"
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "encoding": {
+        "color": {
+            "field": "dir",
+            "scale": {
+                "domain": [
+                    0,
+                    360
+                ],
+                "scheme": "rainbow"
+            },
+            "type": "quantitative",
+            "legend": null
+        },
+        "size": {
+            "field": "speed",
+            "type": "quantitative"
+        },
+        "angle": {
+            "field": "dir",
+            "scale": {
+                "domain": [
+                    0,
+                    360
+                ],
+                "range": [
+                    180,
+                    540
+                ]
+            },
+            "type": "quantitative"
+        },
+        "x": {
+            "field": "longitude",
+            "type": "ordinal",
+            "axis": null
+        },
+        "y": {
+            "field": "latitude",
+            "type": "ordinal",
+            "axis": null
+        }
+    }
+}
diff --git a/tests/specs/viewcomposition/grid1.vl b/tests/specs/viewcomposition/grid1.vl
--- a/tests/specs/viewcomposition/grid1.vl
+++ b/tests/specs/viewcomposition/grid1.vl
@@ -394,13 +394,11 @@
             },
             "x": {
                 "field": "cat",
-                "type": "ordinal",
-                "axis": null
+                "type": "ordinal"
             },
             "y": {
                 "field": "val",
-                "type": "quantitative",
-                "axis": null
+                "type": "quantitative"
             }
         }
     },
diff --git a/tests/specs/viewcomposition/grid2.vl b/tests/specs/viewcomposition/grid2.vl
--- a/tests/specs/viewcomposition/grid2.vl
+++ b/tests/specs/viewcomposition/grid2.vl
@@ -400,13 +400,11 @@
             },
             "x": {
                 "field": "cat",
-                "type": "ordinal",
-                "axis": null
+                "type": "ordinal"
             },
             "y": {
                 "field": "val",
-                "type": "quantitative",
-                "axis": null
+                "type": "quantitative"
             }
         }
     },
diff --git a/tests/specs/viewcomposition/grid3.vl b/tests/specs/viewcomposition/grid3.vl
--- a/tests/specs/viewcomposition/grid3.vl
+++ b/tests/specs/viewcomposition/grid3.vl
@@ -399,13 +399,11 @@
             },
             "x": {
                 "field": "cat",
-                "type": "ordinal",
-                "axis": null
+                "type": "ordinal"
             },
             "y": {
                 "field": "val",
-                "type": "quantitative",
-                "axis": null
+                "type": "quantitative"
             }
         }
     },
diff --git a/tests/specs/viewcomposition/highlightDateTime.vl b/tests/specs/viewcomposition/highlightDateTime.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/viewcomposition/highlightDateTime.vl
@@ -0,0 +1,45 @@
+{
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "mark": "line",
+            "data": {
+                "url": "https://vega.github.io/vega-lite/data/stocks.csv"
+            },
+            "encoding": {
+                "color": {
+                    "field": "symbol",
+                    "type": "nominal"
+                },
+                "x": {
+                    "field": "date",
+                    "type": "temporal"
+                },
+                "y": {
+                    "field": "price",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": {
+                "size": 2,
+                "strokeDash": [
+                    2,
+                    2
+                ],
+                "type": "rule"
+            },
+            "data": {
+                "values": {}
+            },
+            "encoding": {
+                "x": {
+                    "datum": {
+                        "year": 2006
+                    }
+                }
+            }
+        }
+    ]
+}
diff --git a/tests/specs/viewcomposition/highlightvalue.vl b/tests/specs/viewcomposition/highlightvalue.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/viewcomposition/highlightvalue.vl
@@ -0,0 +1,43 @@
+{
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
+    "layer": [
+        {
+            "mark": "line",
+            "data": {
+                "url": "https://vega.github.io/vega-lite/data/stocks.csv"
+            },
+            "encoding": {
+                "color": {
+                    "field": "symbol",
+                    "type": "nominal"
+                },
+                "x": {
+                    "field": "date",
+                    "type": "temporal"
+                },
+                "y": {
+                    "field": "price",
+                    "type": "quantitative"
+                }
+            }
+        },
+        {
+            "mark": {
+                "size": 2,
+                "strokeDash": [
+                    2,
+                    2
+                ],
+                "type": "rule"
+            },
+            "data": {
+                "values": {}
+            },
+            "encoding": {
+                "y": {
+                    "datum": 300
+                }
+            }
+        }
+    ]
+}
diff --git a/tests/specs/viewcomposition/repeatinglayers.vl b/tests/specs/viewcomposition/repeatinglayers.vl
new file mode 100644
--- /dev/null
+++ b/tests/specs/viewcomposition/repeatinglayers.vl
@@ -0,0 +1,36 @@
+{
+    "data": {
+        "url": "https://vega.github.io/vega-lite/data/movies.json"
+    },
+    "repeat": {
+        "layer": [
+            "US_Gross",
+            "Worldwide_Gross"
+        ]
+    },
+    "spec": {
+        "mark": "line",
+        "encoding": {
+            "color": {
+                "type": "nominal",
+                "datum": {
+                    "repeat": "layer"
+                }
+            },
+            "x": {
+                "field": "IMDB_Rating",
+                "bin": true,
+                "type": "quantitative"
+            },
+            "y": {
+                "field": {
+                    "repeat": "layer"
+                },
+                "aggregate": "mean",
+                "title": "Mean of US and Worldwide Gross",
+                "type": "quantitative"
+            }
+        }
+    },
+    "$schema": "https://vega.github.io/schema/vega-lite/v4.json"
+}
