diff --git a/Clients/ParaView/Testing/Data/Baseline/NetCDFUGRID.png.sha512 b/Clients/ParaView/Testing/Data/Baseline/NetCDFUGRID.png.sha512
new file mode 100644
index 00000000000..41fe086e523
--- /dev/null
+++ b/Clients/ParaView/Testing/Data/Baseline/NetCDFUGRID.png.sha512
@@ -0,0 +1 @@
+9402b70c4380fe79683a5a01b65862b541c5c0b14b12b5fdbccadab3839e219b057406c90384ed7644640ab971bc47df4961720c2930f8219f6e0e6564919015
diff --git a/Clients/ParaView/Testing/XML/CMakeLists.txt b/Clients/ParaView/Testing/XML/CMakeLists.txt
index a0a56d6e243..4b4d35ed424 100644
--- a/Clients/ParaView/Testing/XML/CMakeLists.txt
+++ b/Clients/ParaView/Testing/XML/CMakeLists.txt
@@ -192,6 +192,7 @@ ExternalData_Expand_Arguments(ParaViewData _
"DATA{${paraview_test_data_directory_input}/Data/YoungsMaterialInterface/youngs.vtm}"
"DATA{${paraview_test_data_directory_input}/Data/YoungsMaterialInterface/youngs/youngs_0.vtu}"
"DATA{${paraview_test_data_directory_input}/Data/YoungsMaterialInterface/youngs/youngs_1.vtu}"
+ "DATA{${paraview_test_data_directory_input}/Data/ugrid.nc}"
# Baselines
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/AAXAxis.png}"
@@ -441,6 +442,7 @@ ExternalData_Expand_Arguments(ParaViewData _
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/MultiBlockInspectorWithoutSelectOnClickSetting.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NestedViews.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NestedViews_1.png}"
+ "DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NetCDFUGRID.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NonlinearSubdivision0Display.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NonlinearSubdivision0Display_1.png}"
"DATA{${CMAKE_CURRENT_SOURCE_DIR}/../Data/Baseline/NonlinearSubdivision1Display.png}"
@@ -883,6 +885,7 @@ SET(TESTS_WITH_BASELINES
EmptyInitialCompositeReader.xml # Issue #21293
MergeVectorComponents.xml
MoleculeScalarBar.xml
+ NetCDFUGRID.xml
ParticleTracerGlyph.xml
PassArrays.xml
PerlinNoise.xml
diff --git a/Clients/ParaView/Testing/XML/NetCDFUGRID.xml b/Clients/ParaView/Testing/XML/NetCDFUGRID.xml
new file mode 100644
index 00000000000..566d8029276
--- /dev/null
+++ b/Clients/ParaView/Testing/XML/NetCDFUGRID.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Documentation/release/dev/netcdf-ugrid-reader.md b/Documentation/release/dev/netcdf-ugrid-reader.md
new file mode 100644
index 00000000000..858b0bebd1f
--- /dev/null
+++ b/Documentation/release/dev/netcdf-ugrid-reader.md
@@ -0,0 +1,6 @@
+## NetCDF UGRID Reader
+
+ParaView now provides a new reader to load NetCDF files that follow the [UGRID conventions](https://ugrid-conventions.github.io/ugrid-conventions/).
+
+Only 2D meshes are supported and you can extract points, cells and data arrays associated to them.
+You can also replace values denoted as "fill values" with NaN.
diff --git a/Remoting/Application/Resources/readers_ionetcdf.xml b/Remoting/Application/Resources/readers_ionetcdf.xml
index 5b68afbf40e..84d2b0669b2 100644
--- a/Remoting/Application/Resources/readers_ionetcdf.xml
+++ b/Remoting/Application/Resources/readers_ionetcdf.xml
@@ -353,6 +353,84 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+ This property lists which cell-centered arrays to
+ read.
+
+
+
+
+
+
+
+
+
+
+ This property lists which point-centered arrays to
+ read.
+
+
+
+ If on, any float or double variable read that has a
+ _FillValue attribute will have that fill value replaced with a
+ not-a-number (NaN) value. The advantage of setting these to NaN values
+ is that, if implemented properly by the system and careful math
+ operations are used, they can implicitly be ignored by calculations
+ like finding the range of the values. That said, this option should be
+ used with caution as VTK does not fully support NaN values and
+ therefore odd calculations may occur.
+
+
+
+
+
+
+
+
+
@@ -562,6 +640,58 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ The list of files to be read by the
+ reader.
+
+
+
+ Available timestep values.
+
+
+
+
+
+
+