diff --git a/qim3d/io/loading.py b/qim3d/io/loading.py
index 1b986b7a3a9a943be8a28b4fa8cbcc9d4f464dc8..2b33aef5bca2e6ec8b967ca4d90c66be6c366520 100644
--- a/qim3d/io/loading.py
+++ b/qim3d/io/loading.py
@@ -602,6 +602,27 @@ class DataLoader:
             return vol, dicom_list
         else:
             return vol
+        
+
+    def load_zarr(self, path: str):
+        """ Loads a Zarr array from disk.
+
+        Args:
+            path (str): The path to the Zarr array on disk.
+
+        Returns:
+            dask.array | numpy.ndarray: The dask array loaded from disk.
+                if 'self.virtual_stack' is True, returns a dask array object, else returns a numpy.ndarray object.
+        """
+
+        # Opens the Zarr array
+        vol = da.from_zarr(path)
+
+        # If virtual stack is disabled, return the computed array (np.ndarray)
+        if not self.virtual_stack:
+            vol = vol.compute()
+
+        return vol
 
     def check_file_size(self, filename: str):
         """
@@ -674,6 +695,8 @@ class DataLoader:
                 return self.load_vol(path)
             elif path.endswith((".dcm", ".DCM")):
                 return self.load_dicom(path)
+            elif path.endswith(".zarr"):
+                return self.load_zarr(path)
             else:
                 try:
                     return self.load_pil(path)