--- a/cpp/demo/interpolation-io/main.cpp
+++ b/cpp/demo/interpolation-io/main.cpp
@@ -7,6 +7,7 @@
 // # Interpolation and IO
 
 #include <basix/finite-element.h>
+#include <bit>
 #include <cmath>
 #include <concepts>
 #include <dolfinx/common/log.h>
@@ -64,12 +65,16 @@
       });
 
 #ifdef HAS_ADIOS2
-  // Write the function to a VTX file for visualisation, e.g. using
-  // ParaView
-  io::VTXWriter<U> outfile(mesh->comm(), filename.replace_extension("bp"), {u},
-                           "BP4");
-  outfile.write(0.0);
-  outfile.close();
+  // Adios2 is not well tested on big-endian systems, so skip them
+  if constexpr (std::endian::native != std::endian::big)
+  {
+    // Write the function to a VTX file for visualisation, e.g. using
+    // ParaView
+    io::VTXWriter<U> outfile(mesh->comm(), filename.replace_extension("bp"), {u},
+			     "BP4");
+    outfile.write(0.0);
+    outfile.close();
+  }
 #endif
 }
 
@@ -181,10 +186,14 @@
 // (jump in the normal component between cells) and the x1 component
 // will appear continuous (continuous tangent component between cells).
 #ifdef HAS_ADIOS2
-  io::VTXWriter<U> outfile(mesh->comm(), filename.replace_extension("bp"),
-                           {u_l}, "BP4");
-  outfile.write(0.0);
-  outfile.close();
+  // Adios2 is not well tested on big-endian systems, so skip them
+  if constexpr (std::endian::native != std::endian::big)
+  {
+    io::VTXWriter<U> outfile(mesh->comm(), filename.replace_extension("bp"),
+			     {u_l}, "BP4");
+    outfile.write(0.0);
+    outfile.close();
+  }
 #endif
 }
 
--- a/cpp/demo/interpolation_different_meshes/main.cpp
+++ b/cpp/demo/interpolation_different_meshes/main.cpp
@@ -10,6 +10,7 @@
 #include <dolfinx/fem/dolfinx_fem.h>
 #include <dolfinx/io/ADIOS2Writers.h>
 #include <dolfinx/mesh/generation.h>
+#include <bit>
 #include <memory>
 
 using namespace dolfinx;
@@ -82,10 +83,14 @@
     u_hex->interpolate(*u_tet, cells, interpolation_data);
 
 #ifdef HAS_ADIOS2
-    io::VTXWriter<double> write_tet(mesh_tet->comm(), "u_tet.bp", {u_tet});
-    write_tet.write(0.0);
-    io::VTXWriter<double> write_hex(mesh_hex->comm(), "u_hex.bp", {u_hex});
-    write_hex.write(0.0);
+    // Adios2 is not well tested on big-endian systems, so skip them
+    if constexpr (std::endian::native != std::endian::big)
+    {
+      io::VTXWriter<double> write_tet(mesh_tet->comm(), "u_tet.bp", {u_tet});
+      write_tet.write(0.0);
+      io::VTXWriter<double> write_hex(mesh_hex->comm(), "u_hex.bp", {u_hex});
+      write_hex.write(0.0);
+    }
 #endif
   }
   MPI_Finalize();
--- a/cpp/demo/poisson/main.cpp
+++ b/cpp/demo/poisson/main.cpp
@@ -81,6 +81,7 @@
 
 #include "poisson.h"
 #include <basix/finite-element.h>
+#include <bit>
 #include <cmath>
 #include <dolfinx.h>
 #include <dolfinx/fem/Constant.h>
@@ -250,9 +251,13 @@
     file.write<T>({*u}, 0.0);
 
 #ifdef HAS_ADIOS2
-    // Save solution in VTX format
-    io::VTXWriter<U> vtx(MPI_COMM_WORLD, "u.bp", {u}, "bp4");
-    vtx.write(0);
+    // Adios2 is not well tested on big-endian systems, so skip them
+    if constexpr (std::endian::native != std::endian::big)
+    {
+      // Save solution in VTX format
+      io::VTXWriter<U> vtx(MPI_COMM_WORLD, "u.bp", {u}, "bp4");
+      vtx.write(0);
+    }
 #endif
   }
 
--- a/python/demo/demo_interpolation-io.py
+++ b/python/demo/demo_interpolation-io.py
@@ -22,6 +22,7 @@
 
 # +
 import numpy as np
+from sys import byteorder
 
 from dolfinx import default_scalar_type, plot
 from dolfinx.fem import Function, functionspace
@@ -65,10 +66,12 @@
 # discontinuous and the $x_1$-component should appear continuous.
 
 try:
-    from dolfinx.io import VTXWriter
+    # adios2 is not well tested on big-endian systems, so skip them
+    if byteorder != 'big':
+        from dolfinx.io import VTXWriter
 
-    with VTXWriter(msh.comm, "output_nedelec.bp", u0, "bp4") as f:
-        f.write(0.0)
+        with VTXWriter(msh.comm, "output_nedelec.bp", u0, "bp4") as f:
+            f.write(0.0)
 except ImportError:
     print("ADIOS2 required for VTX output")
 
