diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # Changelog
 
+## [0.4.2.1] - 2024-08-21
+
+### Added
+
+* `optionalFieldOrNullWithDefault`
+* `optionalFieldOrNullWithDefaultWith`
+* `optionalFieldOrNullWithDefault'`
+* `optionalFieldOrNullWithDefaultWith'`
+
 ## [0.4.2.0] - 2024-08-06
 
 ### Added
diff --git a/autodocodec.cabal b/autodocodec.cabal
--- a/autodocodec.cabal
+++ b/autodocodec.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           autodocodec
-version:        0.4.2.0
+version:        0.4.2.1
 synopsis:       Self-documenting encoder and decoder
 homepage:       https://github.com/NorfairKing/autodocodec#readme
 bug-reports:    https://github.com/NorfairKing/autodocodec/issues
diff --git a/src/Autodocodec.hs b/src/Autodocodec.hs
--- a/src/Autodocodec.hs
+++ b/src/Autodocodec.hs
@@ -48,6 +48,8 @@
     optionalFieldWith,
     optionalFieldOrNullWith,
     optionalFieldWithDefaultWith,
+    optionalFieldOrNullWithDefault,
+    optionalFieldOrNullWithDefaultWith,
     optionalFieldWithOmittedDefault,
     optionalFieldWithOmittedDefaultWith,
     optionalFieldOrNullWithOmittedDefault,
@@ -62,6 +64,8 @@
     optionalFieldWith',
     optionalFieldOrNullWith',
     optionalFieldWithDefaultWith',
+    optionalFieldOrNullWithDefault',
+    optionalFieldOrNullWithDefaultWith',
     optionalFieldWithOmittedDefault',
     optionalFieldWithOmittedDefaultWith',
     optionalFieldOrNullWithOmittedDefault',
diff --git a/src/Autodocodec/Class.hs b/src/Autodocodec/Class.hs
--- a/src/Autodocodec/Class.hs
+++ b/src/Autodocodec/Class.hs
@@ -289,6 +289,28 @@
   ObjectCodec output output
 optionalFieldWithDefault' key defaultValue = optionalFieldWithDefaultWith' key codec defaultValue
 
+-- | Like 'optionalFieldOrNull', but also interpret @null@ as the default value.
+optionalFieldOrNullWithDefault ::
+  (Eq output, HasCodec output) =>
+  -- | Key
+  Text ->
+  -- | Default value
+  output ->
+  -- | Documentation
+  Text ->
+  ObjectCodec output output
+optionalFieldOrNullWithDefault key defaultValue doc = optionalFieldOrNullWithDefaultWith key codec defaultValue doc
+
+-- | Like 'optionalFieldOrNullWithDefault', but without documentation
+optionalFieldOrNullWithDefault' ::
+  (Eq output, HasCodec output) =>
+  -- | Key
+  Text ->
+  -- | Default value
+  output ->
+  ObjectCodec output output
+optionalFieldOrNullWithDefault' key defaultValue = optionalFieldOrNullWithDefaultWith' key codec defaultValue
+
 -- | An optional, or null, field
 --
 -- During decoding, the field may be in the object. 'Nothing' will be parsed if it is not.
diff --git a/src/Autodocodec/Codec.hs b/src/Autodocodec/Codec.hs
--- a/src/Autodocodec/Codec.hs
+++ b/src/Autodocodec/Codec.hs
@@ -1062,6 +1062,43 @@
   ObjectCodec output output
 optionalFieldWithDefaultWith' key c defaultValue = OptionalKeyWithDefaultCodec key c defaultValue Nothing
 
+-- | Like 'optionalFieldWithDefaultWith', but also interpret @null@ as the
+-- default value.
+optionalFieldOrNullWithDefaultWith ::
+  (Eq output) =>
+  -- | Key
+  Text ->
+  -- | Codec for the value
+  JSONCodec output ->
+  -- | Default value
+  output ->
+  -- | Documentation
+  Text ->
+  ObjectCodec output output
+optionalFieldOrNullWithDefaultWith key c defaultValue doc = dimapCodec f g $ optionalFieldWithDefaultWith key (maybeCodec c) (Just defaultValue) doc
+  where
+    f = \case
+      Just v -> v
+      Nothing -> defaultValue
+    g v = if v == defaultValue then Nothing else Just v
+
+-- | Like 'optionalFieldOrNullWithDefaultWith', but without documentation.
+optionalFieldOrNullWithDefaultWith' ::
+  (Eq output) =>
+  -- | Key
+  Text ->
+  -- | Codec for the value
+  JSONCodec output ->
+  -- | Default value
+  output ->
+  ObjectCodec output output
+optionalFieldOrNullWithDefaultWith' key c defaultValue = dimapCodec f g $ optionalFieldWithDefaultWith' key (maybeCodec c) (Just defaultValue)
+  where
+    f = \case
+      Just v -> v
+      Nothing -> defaultValue
+    g v = if v == defaultValue then Nothing else Just v
+
 -- | An optional field with default value that can be omitted when encoding
 --
 -- During decoding, the field may be in the object. The default value will be parsed otherwise.
