Skip to main content

meshio++

I/O for mesh files.

PyPi Version npm Version PyPI pyversions DOI

C++ Python C Fortran WebAssembly TypeScript

GitHub stars PyPi downloads

gh-actions codecov Code style: black

There are various mesh formats available for representing unstructured meshes. meshio++ can read and write all of the following and smoothly converts between them:

Abaqus (.inp), ANSYS msh (.msh), Ansys/APDL coded database (.cdb, .inp), AVS-UCD (.avs), CGNS (.cgns), DOLFIN XML (.xml), COMSOL (.mphtxt), Exodus (.e, .exo), EnSight Gold (geometry, .case/.geo), FLAC3D (.f3grid), FLUX (mesh .pf3, field .dex), FreeFem++ (.msh), H5M (.h5m), HMF (.hmf, experimental, meshio++-specific), I-deas Universal / UNV (.unv), ANSYS Fluent interpolation (.ip), Kratos/MDPA (.mdpa), Medit (.mesh, .meshb), MED/Salome (.med), Modulef (mesh .mfm, field .mff), Nastran (bulk data, .bdf, .fem, .nas), Netgen (.vol, .vol.gz), Neuroglancer precomputed format, Gmsh (format versions 2.2, 4.0, and 4.1, .msh), OBJ (.obj), OFF (.off), OpenFOAM polyMesh (.foam, read-only), PERMAS (.post, .post.gz, .dato, .dato.gz), PLY (.ply), STL (.stl), Tecplot .dat, TetGen .node/.ele, Triangle .node/.ele/.poly, SVG (output only; 2D direct, 3D via skin projection) (.svg), TikZ (LaTeX output only; 2D direct, 3D via skin projection) (.tikz), SU2 (.su2), UGRID (.ugrid), VTK (.vtk), VTP (.vtp), VTU (.vtu), WKT (TIN) (.wkt), XDMF (.xdmf, .xmf).

meshio++ ships a C++20 core (built with pybind11 + scikit-build-core) that reads and writes most formats with zero-copy numpy at the I/O boundary, plus optional HDF5/netCDF acceleration and a selectable parallel backend (AUTO by default — prefers OpenMP, then STL+TBB, then sequential; override with -DMESHIOPLUSPLUS_PARALLEL_BACKEND=...). Every format has a pure-Python fallback, so behaviour and file compatibility are identical whether or not the native libraries are present. For a standalone C++ build use build/configure.sh (Linux/macOS) or build/configure.bat (Windows). Full docs (install, data model, per-format options, CLI) live at the documentation site (sources under doc/).

Install with

pip install meshioplusplus[all]

([all] pulls in all optional dependencies. By default, meshio++ only uses numpy.) You can then use the command-line tool

meshioplusplus convert    input.msh output.vtk   # convert between two formats

meshioplusplus info       input.xdmf             # show some info about the mesh

meshioplusplus compress   input.vtu              # compress the mesh file
meshioplusplus decompress input.vtu              # decompress the mesh file

meshioplusplus binary     input.msh              # convert to binary format
meshioplusplus ascii      input.msh              # convert to ASCII format

meshioplusplus merge      a.vtu b.vtu out.vtu    # merge meshes (optional --weld)

meshioplusplus transform  in.vtu out.vtu --translate 1,2,3   # affine transform
meshioplusplus clean      in.vtu out.vtu --weld              # weld / prune / de-dup
meshioplusplus crop       in.vtu out.vtu --bbox 0,0,0,1,1,1  # subset by region
meshioplusplus split      in.vtu 'out_{key}.vtu' --by type   # split by criterion
meshioplusplus stats      mesh.vtu                           # geometric statistics
meshioplusplus convert-cells in.msh out.vtu --mode simplexify  # hexes -> tetra
meshioplusplus refine     in.vtu out.vtu --levels 2          # uniform subdivision
meshioplusplus partition  in.vtu 'out_{part}.vtu' --nparts 4 # N balanced parts
meshioplusplus smooth     in.vtu out.vtu --iterations 20     # relax node positions

meshioplusplus data info  mesh.vtu                           # summarize data arrays
meshioplusplus data calc  in.vtu out.vtu --point "s = norm(v)"   # derive a field
meshioplusplus data to-cell  in.vtu out.vtu --keys T         # point -> cell average
meshioplusplus data normalize in.vtu out.vtu --cell damage --to 0,1

with any of the supported formats.

The same verbs are available as a standalone C++ binary that needs no Python: grab a ready-to-run, statically-linked build for Linux/macOS/Windows from the GitHub Releases page, or build it yourself with build/configure.sh --cli --build (or -DMESHIOPLUSPLUS_BUILD_CLI=ON). It links only the C++ core, so point/cell sets (and convert -s/-d) — which live only in the Python Mesh — are unavailable there; use the Python CLI for those.

In Python, simply do

import meshioplusplus

mesh = meshioplusplus.read(
    filename,  # string, os.PathLike, or a buffer/open file
    # file_format="stl",  # optional if filename is a path; inferred from extension
    # see meshioplusplus convert --help for all possible formats
)
# mesh.points, mesh.cells, mesh.cells_dict, ...

# mesh.vtk.read() is also possible

to read a mesh. To write, do

import meshioplusplus

# two triangles and one quad
points = [
    [0.0, 0.0],
    [1.0, 0.0],
    [0.0, 1.0],
    [1.0, 1.0],
    [2.0, 0.0],
    [2.0, 1.0],
]
cells = [
    ("triangle", [[0, 1, 2], [1, 3, 2]]),
    ("quad", [[1, 4, 5, 3]]),
]

mesh = meshioplusplus.Mesh(
    points,
    cells,
    # Optionally provide extra data on points, cells, etc.
    point_data={"T": [0.3, -1.2, 0.5, 0.7, 0.0, -3.0]},
    # Each item in cell data must match the cells array
    cell_data={"a": [[0.1, 0.2], [0.4]]},
)
mesh.write(
    "foo.vtk",  # str, os.PathLike, or buffer/open file
    # file_format="vtk",  # optional if first argument is a path; inferred from extension
)

# Alternative with the same options
meshioplusplus.write_points_cells("foo.vtk", points, cells)

For both input and output, you can optionally specify the exact file_format (in case you would like to enforce ASCII over binary VTK, for example).

Skin extraction

meshioplusplus.extract_skin derives the boundary surface of a 3D volume mesh (the Kratos SkinDetectionProcess face-hashing algorithm — faces occurring exactly once are boundary; points are compacted, point_data follows):

vol = meshioplusplus.read("part.msh")     # tetra/hexa/wedge/pyramid mesh
skin = meshioplusplus.extract_skin(vol)   # triangle/quad/... surface mesh

The STL and PLY writers do this automatically for volume meshes (pass skin=False for the legacy drop-volume-cells behavior), and the SVG/TikZ writers render 3D meshes by projecting the skin through an orthographic camera (azimuth/elevation/roll in degrees, default the classic CAD isometric view) with painter's-algorithm depth ordering — that is exactly how the Stanford-bunny logo above is drawn.

Publication-quality vector figures

The SVG and TikZ writers can colour each face by a data array, turning them into figures you can drop straight into a paper — resolution-independent, and with no extra dependency: the colormaps are built into the core.

annotated = meshioplusplus.attach_quality(mesh)
meshioplusplus.write(
    "quality.svg", annotated,
    color_by="quality:scaled_jacobian",   # or any point_data / cell_data name
    cmap="viridis",                       # viridis / coolwarm / turbo
    colorbar=True,
)
a bracket coloured by scaled Jacobian

The bundled bracket coloured by element quality — the same figure tools/gen_doc_images.py regenerates.

Point data colours a face by the mean of its corner values, cell data by its owning cell's value — for a volume mesh, tracked through the extracted skin's parent-cell provenance, so a per-cell material or metric lands on the right facet. Multi-component arrays reduce to a component or to their magnitude; vmin/vmax set the range (default: the drawn faces' finite range), and non-finite values take nan_color. From the command line:

meshioplusplus convert mesh.vtu figure.svg --color-by temperature --colorbar

Colouring is available from Python, from C++ directly, and from both CLIs; the flat C/Fortran/WebAssembly bindings reach these writers through the shared registry and always emit the default styling.

Surface extraction

meshioplusplus.extract_surface is the general form of skin extraction: it picks the dimension automatically (a volume mesh → boundary faces, a 2D surface mesh → boundary edges) and can record each facet's parent cell id (record_parent_ids=True). See the surface extraction docs (doc/extract_surface.md).

surf = meshioplusplus.extract_surface(vol)                  # faces (or edges for a 2D mesh)
edges = meshioplusplus.extract_surface(sheet, record_parent_ids=True)

Mesh quality

meshioplusplus.compute_quality scores every cell on a set of geometric quality metrics (area/volume, scaled Jacobian, aspect ratio, skewness, interior/dihedral angles, warpage) and flags inverted/degenerate cells; attach_quality writes them back as cell_data. See doc/mesh_quality.md.

report = meshioplusplus.compute_quality(mesh)
print(report["num_inverted"], "inverted cells")
annotated = meshioplusplus.attach_quality(mesh)   # metrics as cell_data

Reordering / renumbering

meshioplusplus.reorder renumbers nodes and elements to reduce sparse-matrix bandwidth (Reverse Cuthill–McKee) or improve cache locality (Morton / Hilbert space-filling curves). It is a pure permutation — geometry and all data preserved — and returns the applied node/cell permutations so external arrays can be remapped. compute_bandwidth measures the before/after connectivity bandwidth. See doc/reorder.md.

out = meshioplusplus.reorder(mesh, method="rcm")            # "morton" / "hilbert" too
out, node_perm, cell_perms = meshioplusplus.reorder(mesh, return_permutation=True)
print(meshioplusplus.compute_bandwidth(mesh), "->", meshioplusplus.compute_bandwidth(out))

Comparison (diff)

meshioplusplus.diff compares two meshes and reports whether they are equivalent within a tolerance (abs_err <= atol + rtol*|expected|), with a structured breakdown (points, cells, data, named sets) and an overall verdict (identical / equal within tolerance / different); meshes_equal is the boolean wrapper for test suites. An optional unordered=True mode matches nodes by spatial proximity, so a shuffled node order still compares equal. See doc/diff.md.

assert meshioplusplus.meshes_equal(a, b, atol=1e-8)         # ideal in a regression test
report = meshioplusplus.diff(a, b, unordered=True)          # tolerant to shuffled node order
print(report["verdict"])

The meshioplusplus diff a.vtu b.vtu CLI verb sets a nonzero exit code when meshes differ, for direct use in CI / Makefiles.

Merge / combine

meshioplusplus.merge combines two or more meshes into one: it concatenates points (offsetting connectivity so indices stay valid), merges cell blocks by type, concatenates data (per a configurable data_policy), and tags each cell's origin. With weld=True it fuses coincident nodes across inputs within atol using a spatial hash (never O(N²)) — the standard way to stitch adjacent blocks into a watertight mesh. Overlapping set / field-data names are namespaced by source id. See doc/merge.md.

combined = meshioplusplus.merge([a, b, c])                 # concatenate
welded = meshioplusplus.merge([left, right], weld=True, atol=1e-8)  # fuse the shared interface

Editing (transform / clean / crop / split) and statistics

A bundle of dependency-free mesh-editing utilities:

  • meshioplusplus.transform — apply an affine transform (translate / scale / rotate / 4×4 matrix / unit-scale) to the points; connectivity and data are carried through. See doc/transform.md.
  • meshioplusplus.clean — weld coincident points (spatial hash), drop degenerate and duplicate cells, and remove orphaned points, in one toggleable pass. See doc/clean.md.
  • meshioplusplus.crop — extract the part of a mesh inside a bounding box or half-space, pruning unused points (mode="all"/"any"). See doc/crop.md.
  • meshioplusplus.split — partition a mesh into several by cell type, connected component (flood-fill), or region (cell_sets / integer tag). See doc/split.md.
  • meshioplusplus.compute_stats — geometric statistics (bounding box, centroid, per-type counts, area, signed/unsigned volume, inverted cells) — the geometric complement to info. See doc/stats.md.
out = meshioplusplus.transform(mesh, rotate=("z", 90))
out = meshioplusplus.clean(mesh, weld=True, atol=1e-8)
sub = meshioplusplus.crop(mesh, bbox=[0, 0, 0, 1, 1, 1])
pieces = meshioplusplus.split(mesh, by="type")             # {"triangle": ..., ...}
s = meshioplusplus.compute_stats(mesh)                     # dict of measures

Cell conversion (linearize / simplexify / elevate)

meshioplusplus.convert_cells converts a mesh's element representation — which cell types it is built from — while leaving the object it describes intact. See doc/convert_cells.md.

  • mode="linearize" — every higher-order cell becomes its linear base (tetra10tetra, hexahedron27hexahedron), keeping the corner connectivity verbatim and pruning the nodes that become unreferenced.
  • mode="simplexify" — every cell is decomposed into simplices of the same topological dimension (quad → 2 triangle, hexahedron → 6 tetra, wedge → 3, pyramid → 2, an n-gon into an (n−2)-triangle fan). No points are added, each parent's cell_data is replicated to its children, and every emitted simplex is positively oriented with volume conserved.
  • mode="elevate" — every linear cell is promoted to its serendipity quadratic counterpart (triangletriangle6, hexahedronhexahedron20), adding one node per unique edge at the edge midpoint with point_data set to the endpoint mean.
linear = meshioplusplus.convert_cells(mesh, mode="linearize")
tets = meshioplusplus.convert_cells(mesh, mode="simplexify")   # hexes -> tetra
quadratic = meshioplusplus.convert_cells(mesh, mode="elevate")

Each mode is idempotent on cells it does not apply to, so it is safe on a mixed-order mesh, and output is byte-identical across mesh backends and thread counts.

Refinement

meshioplusplus.refine subdivides every cell into congruent children of the same cell type, increasing a mesh's resolution: line → 2, triangle → 4, quad → 4, tetra → 8, wedge → 8, hexahedron → 8, with levels=n applying the templates n times. See doc/refine.md.

New nodes sit at the midpoints of the parent's edges, quad faces and (hexahedron only) body, and carry the mean of that entity's corner values for every point_data array — so a linear field is interpolated exactly. Mid-edge and quad-face-centre nodes are shared between every cell touching the entity, so the refined mesh has no hanging nodes; each parent's cell_data row is replicated to its children.

fine = meshioplusplus.refine(mesh)                      # one level
finer = meshioplusplus.refine(mesh, levels=2)           # 64x the cells in 3D
tagged = meshioplusplus.refine(mesh, record_parent_ids=True)

Children inherit the parent's orientation (zero newly-inverted cells for a well-oriented input), and volume is conserved — exactly for tetra always, and for wedge/hexahedron when the parent is affine. Higher-order cells, pyramid, and ragged blocks have no same-type subdivision and raise by name.

Partitioning

meshioplusplus.partition decomposes a mesh into exactly N balanced pieces for domain decomposition — the count-driven complement to the criterion-driven split. See doc/partition.md.

  • SFC (the default fallback, always available, dependency-free): cells are cut into contiguous ranges along a Hilbert space-filling curve of their centroids — equal-weight part sizes differ by at most one cell, weights=<cell_data> balances a per-cell cost instead, and the assignment is deterministic and byte-identical across mesh backends and thread counts.
  • KaHIP (the optional quality path): the shared-face dual graph goes through KaHIP's serial kaffpa(), which actively minimizes the edge cut. Configure imbalance (default 3%), mode (fast/eco/strong, default eco — eco/strong carry the quality) and seed. KaHIP is MIT-licensed like meshio++ itself, so enabling it changes nothing about licensing; it is bring-your-own (-DMESHIOPLUSPLUS_WITH_KAHIP=ON + KAHIP_ROOT, Conan with_kahip, vcpkg feature kahip — next to the HDF5/zstd-style optional deps), links only the serial interface (no MPI), and pip install meshioplusplus[kahip] gives pure-Python installs the same quality path via the MIT kahip wheel. Requesting it where absent fails by name — never a silent downgrade.
pieces = meshioplusplus.partition(mesh, 4)                    # list of 4 meshes
labels = meshioplusplus.partition_labels(mesh, 4)             # per-block Int64 part ids
quality = meshioplusplus.partition(mesh, 16, method="kahip", mode="strong")

Pieces keep the input's block structure 1:1, so they recombine into the input: every cell lands in exactly one piece (ghost_layers is reserved for halo growth and raises for now).

Smoothing

meshioplusplus.smooth relaxes point coordinates toward their edge-neighbour centroids to improve element shape, leaving topology and every data value alone: only the points move. See doc/smooth.md.

Both operators are driven by the same centroid displacement. Laplacian (x <- x + lambda*L(x)) smooths strongly per pass but shrinks — over 40 iterations on a jittered 8×8 quad grid it contracts the bounding box by 57%. Taubin (the default) follows each +lambda pass with a larger-magnitude -mu pass that deliberately un-shrinks, leaving the same grid 3.6% smaller. Neighbours are the nodes joined by an actual cell edge, not the element clique, so a structured hex block is a fixed point rather than being bevelled toward a sphere. Boundary nodes, feature nodes (incident boundary facet normals differing by more than feature_angle), an optional frozen mask, and the nodes of blocks whose edge topology is unknown are all pinned by default, and the inversion guard rejects any move that would turn a valid cell inverted.

relaxed = meshioplusplus.smooth(mesh)                          # 10 Taubin iterations
harder = meshioplusplus.smooth(mesh, iterations=40)            # shrink-free even so
lap = meshioplusplus.smooth(mesh, method="laplacian", lambda_=0.4)  # note the underscore
out, report = meshioplusplus.smooth(mesh, return_report=True)  # nodes moved, max displacement

lambda_ carries a trailing underscore because lambda is a Python keyword, and a negative value means "this method's own default" (0.5 Laplacian, 0.33 Taubin). Point and cell counts, connectivity, cell_data, field_data, point_data values and the points array's dtype all come through unchanged, and output is byte-identical across mesh backends and thread counts.

These operations are exposed across every binding surface (Python, C API, Fortran, WASM) and as the CLI verbs meshioplusplus quality, meshioplusplus extract-surface, meshioplusplus reorder, meshioplusplus diff, meshioplusplus merge, meshioplusplus transform, meshioplusplus clean, meshioplusplus crop, meshioplusplus split, meshioplusplus stats, meshioplusplus convert-cells, meshioplusplus refine, meshioplusplus partition, and meshioplusplus smooth.

Data operations (rename / average / calc / condition / summarize)

A second bundle operates on the data arrays a mesh carries (point_data / cell_data / field_data) rather than on its geometry, which none of them ever modifies:

  • meshioplusplus.data_rename / data_drop / data_keep — rewrite which arrays a mesh carries and under what names; values, dtypes and shapes are copied verbatim. See doc/data_manage.md.
  • meshioplusplus.point_data_to_cell_data / cell_data_to_point_data — move data between locations by averaging, optionally weighted by cell area/volume. See doc/data_average.md.
  • meshioplusplus.data_calc — derive a new array from an elementwise expression (+ - * /, parentheses, abs/sqrt/min/max/norm) evaluated by a hand-written parser — no external parser library, no arbitrary-code path. See doc/data_calc.md.
  • meshioplusplus.data_condition — clamp, normalize to a target range, or standardize to zero mean / unit standard deviation, per component or by row magnitude. See doc/data_condition.md.
  • meshioplusplus.data_info — a read-only per-array summary (dtype, shape, components, min/max/mean, NaN/inf counts) — the data-side complement to info and compute_stats. See doc/data_info.md.
out = meshioplusplus.data_calc(mesh, "norm(velocity)", location="point", output="speed")
out = meshioplusplus.point_data_to_cell_data(out, keys=["speed"], suffix="_c")
out = meshioplusplus.data_condition(out, "cell", ["speed_c"], mode="normalize")
out = meshioplusplus.data_rename(out, "point", "T", "temperature")
arrays = meshioplusplus.data_info(out)                     # list of per-array dicts

These are likewise exposed across every binding surface, and as the nine CLI verbs under the meshioplusplus data group (info, rename, drop, keep, to-cell, to-point, calc, clamp, normalize). See doc/data_operations.md.

Time series

The XDMF format supports time series with a shared mesh. You can write times series data using meshio++ with

with meshioplusplus.xdmf.TimeSeriesWriter(filename) as writer:
    writer.write_points_cells(points, cells)
    for t in [0.0, 0.1, 0.21]:
        writer.write_data(t, point_data={"phi": data})

and read it with

with meshioplusplus.xdmf.TimeSeriesReader(filename) as reader:
    points, cells = reader.read_points_cells()
    for k in range(reader.num_steps):
        t, point_data, cell_data = reader.read_data(k)

Interactive viewer

Try it in your browser

the meshio++ browser viewer

The browser viewer — reading, rendering and converting entirely client-side.

One call, two backends:

import meshioplusplus

mesh = meshioplusplus.read("part.msh")
meshioplusplus.view(mesh)                      # pick a backend automatically
meshioplusplus.view(mesh, backend="polyscope") # a native desktop window
meshioplusplus.view(mesh, backend="browser")   # vtk.js, in a browser or notebook

The desktop backend is Polyscope, an optional Python-only extra (pip install meshioplusplus[viewer]). It draws solids you can slice into, colours by any point or cell array, and renders headless screenshots for CI and docs:

meshioplusplus.screenshot(mesh, "part.png", color_by="temperature")
the example bracket in Polyscope, coloured by scaled Jacobian

The bundled example.msh bracket coloured by element quality — this image is generated by screenshot() itself.

The browser backend needs nothing extra. The same app is hosted as a live demo: drag in any supported format, colour by point or cell data, and convert and download to another format — all client-side, with no server and no upload. Since it runs the WebAssembly build, every format meshio++ reads works there too.

From the command line:

meshioplusplus view part.msh
meshioplusplus screenshot part.msh part.png --size 1600 1200

See the viewer docs for how volume meshes are handled and what each backend can and cannot do.

ParaView plugin

gmsh paraview *A Gmsh file opened with ParaView.*

If you have downloaded a binary version of ParaView, you may proceed as follows.

  • Install meshio++ for the Python major version that ParaView uses (check pvpython --version)
  • Open ParaView
  • Find the file paraview-meshioplusplus-plugin.py of your meshio++ installation (on Linux: ~/.local/share/paraview-5.9/plugins/) and load it under Tools / Manage Plugins / Load New
  • Optional: Activate Auto Load

You can now open all meshio++-supported files in ParaView.

Benchmarks

How much does the C++ core help? The benchmark/ folder times read/write conversions against the original pure-Python meshio on the formats both support (same in-memory mesh, same machine). The headline input is the bundled example.msh — a real Gmsh bracket (~52k nodes, ~293k cells).

meshio vs meshio++ speedup on example.msh

meshio++'s biggest wins are the parallel and text paths: VTU binary+zlib ~16× write (the zlib blocks run across cores via an OpenMP backend with dynamic scheduling — hybrid P+E-core CPUs load-balance too), VTU ASCII ~7× write / ~5× read, and mixed-topology XDMF read ~10×. The binary and HDF5 formats that used to be slower — VTK/Gmsh binary, UGRID, and MED — are now at or above parity after an optimisation pass (bulk-buffered binary I/O, single-instruction bswap endianness conversion, a real parallel backend, an Eigen-backed MED transpose, zero-copy cell reconstruction that moves the connectivity buffer straight into the mesh, and uninitialised reader buffers + thread-parallel block copies so nothing is written twice); binary reads now match or beat numpy's fromfile — Gmsh ~1.7×, single-type VTK ~1.45×, and even mixed-topology VTK ~1.1×. Output stays byte-identical throughout.

The speedup is per-element: text/parallel formats climb out of the small-mesh regime and plateau (large meshes realise the full speedup):

speedup vs mesh size

Full methodology and a reproducible notebook are on the Benchmarks doc page (source: benchmark/01_benchmark.ipynb).

Reading only what you need

import meshioplusplus

mesh = meshioplusplus.read("big.vtu", points_only=True)   # geometry, no data arrays
mesh = meshioplusplus.read("big.vtu", arrays=["u", "p"])  # only these arrays
meta = meshioplusplus.read_metadata("big.vtu")            # counts/names, no heavy arrays

VTU, VTP, XDMF and Gmsh skip the unwanted array bodies outright; other formats are read in full and filtered, and meta["fell_back_to_full_read"] says which happened. Large files can also be memory-mapped (automatic above 16 MiB), which roughly halves peak memory during a read. See selective reads and memory-mapped reading.

VTK XML output can additionally use lz4 (ParaView-readable) or zstd (a meshio++ extension) instead of zlib, when built with -DMESHIOPLUSPLUS_WITH_LZ4=ON / -DMESHIOPLUSPLUS_WITH_ZSTD=ON. zlib remains the default. See compression codecs.

Installation

meshio++ is available from the Python Package Index, so simply run

pip install meshioplusplus

to install.

Additional dependencies (netcdf4, h5py) are required for some of the output formats and can be pulled in by

pip install meshioplusplus[all]

For JavaScript / browser use, the C++ core also ships as a WebAssembly npm package covering 29 of the formats above:

npm install @meshioplusplus/wasm

See the WebAssembly / JavaScript doc page for usage and the format-support table.

C / Fortran API

For HPC codes written in C or Fortran, the C++ core also builds as an installable shared library (libmeshioplusplus, pure-C99 header, pkg-config + find_package support) with a modern OO Fortran 2008 module on top:

./build/configure.sh --fortran --tests --build     # --c-api for the C API alone
cmake --install build/cpp-release --prefix /opt/meshioplusplus
mio_mesh* m = mio_read("in.msh", NULL);
printf("%lld points\n", (long long)mio_mesh_num_points(m));
mio_write("out.vtu", m, NULL);
mio_mesh_free(m);
use meshioplusplus
type(mio_mesh) :: m
call m%read("in.msh")
call m%write("out.vtu")
call m%free()

The C API is also packaged for Conan (root conanfile.py) and vcpkg (overlay port under ports/meshioplusplus/), both driving the same install/find_package path:

conan create . -o meshioplusplus/*:with_hdf5=True
vcpkg install meshioplusplus --overlay-ports=ports

Full mesh access (build meshes from raw arrays, zero-copy readback) is covered on the C API and Fortran doc pages.

Single-header C++

The whole C++ core is also amalgamated into one self-contained, STB-style header — single_include/meshioplusplus/meshioplusplus.hpp — with pugixml bundled and no external dependencies by default. Drop it in, no CMake or linking required:

// in exactly ONE .cpp:
#define MESHIOPLUSPLUS_IMPLEMENTATION
#include "meshioplusplus/meshioplusplus.hpp"
// elsewhere: just #include it (declarations only)
g++ -std=c++20 -I single_include main.cpp

It is generated by ./tools/amalgamate.sh and kept in sync by CI. See the single-header doc page (optional HDF5/netCDF/zlib formats via MESHIOPLUSPLUS_HAS_* macros).

C++ mesh backends

Standalone C++ builds (no Python) can swap the in-memory mesh structure at compile time via MESHIOPLUSPLUS_MESH_BACKEND — every format works identically under each backend:

  • MESHIO (default; the Python extension and PyPI wheels always use it) — mirrors the Python meshio.Mesh;
  • NATIVE — the fastest pure-C++ structure (canonical Float64/Int64 storage, cell-type enum, CSR ragged blocks); the WebAssembly build uses it;
  • KRATOS — a Kratos Multiphysics-style ModelPart (Nodes/Elements/Conditions/SubModelParts) plus a header-only templated bridge that populates a real Kratos::ModelPart with no Kratos build dependency.
./build/configure.sh --mesh-backend NATIVE --tests --build

See the C++ mesh backends doc page.

Testing

To run the meshio++ unit tests, check out this repository, install it with the test extras, and type

pytest tests/

License

meshio++ is published under the MIT license.

Acknowledgements

meshio++ is a fork of meshio by Nico Schlömer and its contributors (MIT). meshio is where the Mesh data model, the cell-type naming, and the great majority of the format readers and writers come from; this fork adds a C++20 core, an operations layer, and the C/Fortran/WebAssembly bindings on top of that foundation. The original copyright is retained in LICENSE.

Some code and test fixtures also come from Simvia's meshlane fork of meshio (MIT), credited per-change in CITATION.cff and CHANGELOG.md.

The C++ core is dependency-free by design. Everything below is either optional, bundled, or confined to one binding or tool.

Runtime dependencies (Python)

Project Used for License
NumPy the array type the whole data model is built on BSD-3-Clause
Rich CLI output formatting MIT

Optional dependencies

Project Extra Used for License
Polyscope [viewer] the desktop viewer and screenshot() MIT
h5py [all] the Python fallback for CGNS, H5M, MED, XDMF BSD-3-Clause
netCDF4 [all] the Python fallback for Exodus MIT
KaHIP [kahip] / CMake the quality graph-partitioning backend MIT
zstandard, lz4 [codecs] the Python fallback for the optional VTK block codecs BSD-3-Clause / BSD-2-Clause

Bundled and build-time

Project Used for License
pugixml XML parsing in the C++ core (vendored in cpp/third_party/) MIT
Eigen the MED Fortran↔C transpose (git submodule, optional) MPL-2.0
pybind11 the Python bindings BSD-3-Clause
scikit-build-core the CMake-driven build backend Apache-2.0
Emscripten the WebAssembly build MIT / NCSA
GoogleTest the C++ test suite BSD-3-Clause
zlib, Zstandard, LZ4 optional compression codecs zlib / BSD-3-Clause / BSD-2-Clause
HDF5, netCDF optional native paths for HDF5/netCDF-backed formats BSD-3-Clause / MIT-like

Browser viewer (isolated under viewer/)

Project Used for License
vtk.js all rendering, colour maps and the scalar bar BSD-3-Clause
Vite the app build MIT
vite-plugin-singlefile the self-contained wheel-bundled build MIT
Playwright the end-to-end tests and the documentation screenshots Apache-2.0

Also

Kratos Multiphysics (BSD-3-Clause) is the source of the skin-detection algorithm, the EnSight writer logic, the KaHIP partitioning approach and the FindKaHIP.cmake module, all these 3 implementation are from the original author of this project as well. Also thanks to its ModelPart design informs the KRATOS mesh backend. VTK and Verdict (both BSD-3-Clause) define the mesh-quality formulas. The documentation is built with VitePress (MIT) and Doxygen (GPL-2.0, used as a tool only). The logo renders the Stanford Bunny ("Stanford Bunny — Digitized!" by MakerBot, CC-BY).

Thank you to all of them.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

meshioplusplus-7.12.0.tar.gz (12.1 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

meshioplusplus-7.12.0-cp312-cp312-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.12Windows x86-64

meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ ARM64

meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.12macOS 13.0+ x86-64

meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.12macOS 13.0+ ARM64

meshioplusplus-7.12.0-cp311-cp311-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.11Windows x86-64

meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ ARM64

meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.11macOS 13.0+ x86-64

meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.11macOS 13.0+ ARM64

meshioplusplus-7.12.0-cp310-cp310-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.10Windows x86-64

meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ ARM64

meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.10macOS 13.0+ x86-64

meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.10macOS 13.0+ ARM64

meshioplusplus-7.12.0-cp39-cp39-win_amd64.whl (2.3 MB view details)

Uploaded CPython 3.9Windows x86-64

meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_aarch64.whl (3.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ ARM64

meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_x86_64.whl (2.1 MB view details)

Uploaded CPython 3.9macOS 13.0+ x86-64

meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_arm64.whl (2.0 MB view details)

Uploaded CPython 3.9macOS 13.0+ ARM64

File details

Details for the file meshioplusplus-7.12.0.tar.gz.

File metadata

  • Download URL: meshioplusplus-7.12.0.tar.gz
  • Upload date:
  • Size: 12.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for meshioplusplus-7.12.0.tar.gz
Algorithm Hash digest
SHA256 2ad8a1e2af9ade9ad79b79db48c55c4799440f878d73cd86dce8d04a852798bc
MD5 6f6a4dddf949041126c67efef442086a
BLAKE2b-256 a80a73ea850068ff2d9cbe56427d6dfd9e456cdd56a2f114f7914888df558d8a

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0.tar.gz:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 aecca08cdc39c29da03e37df76fd9bf3b71da0611e9319d732dd7709880207ef
MD5 c6fbeba10043f1aea5560b3ea6bf97ba
BLAKE2b-256 8beb07e07a915624af0b4eb13aa3dfca56aadf68fdb10926a9b67fed1037e428

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp312-cp312-win_amd64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 394c1247f47c88369a503f148c79080235731569bcf789d2fa1477717cf66db6
MD5 884466128960a35d3372b371945ad579
BLAKE2b-256 d4abdfc5112df9d75ef2e0f59d19547b1f251a52531f1e117d14a81c1bac1aa0

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 fbe5db0647192383a402c9ba4ed9af1573cebd4a1eb95e37e5eec71543272048
MD5 aba91afa6d60a7c9a17000c1c973b6ed
BLAKE2b-256 9123ce86d589188edd144e44e09f78d773d0b62c2d3187c0119ab694a01ee4f1

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp312-cp312-manylinux_2_34_aarch64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 cd207a2c82654f2d375c4ffd23e164c72fb7119079cfa79ab1d3c0fd3b034958
MD5 47643f48544870a71d700af151084a65
BLAKE2b-256 5a98779d0895d769199b961eb0a3288f65608a90df96b41177ba6829a9526742

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 0adf8b2c5959987313f3b22b5b36b4027360e66598c42dd72a98f42697cd3365
MD5 c87264c3d1e07670139eb440b2f952c8
BLAKE2b-256 7ef3ecee2a2ae8bb8b298741c06f34da92eea52f8d691d4d8edc2b67c5abd89f

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp312-cp312-macosx_13_0_arm64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 4a7bd09c5c14afb7c82970716883cbbab290c9e98c791ff3bd8820515a998d72
MD5 9e407b01972012bc855dccd95ba88bae
BLAKE2b-256 5d4500f7bc5a0f379d3b342e3f1bedcef4f30d76bb81d05ff20ade6cff9c1083

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp311-cp311-win_amd64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 d07f0645f06632d392ac1e3ae0b661729f13c8bbab3474a45ce4b234ef0ee523
MD5 28f07c3e5cbc5de16853aad7b6c08cbf
BLAKE2b-256 77bee290a449a31cce38536275da2adbe28346bd129fd398f059b2427aa86c33

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 43383135f771d99c5df5516548adbe62d01b671465a1bcad829a919df8472fc9
MD5 2f35e3ca147d5e7f2d992607d18072c1
BLAKE2b-256 2f4f88419adf07e9bc215dbb5f95c753f452550ac9892c40af2c14a1a27a4944

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp311-cp311-manylinux_2_34_aarch64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 d98d77dd234d6025c8d31a8321c66244543013a04065e92093486c23eddc762c
MD5 893a767c541a986f6b2eb044dad8abcd
BLAKE2b-256 bbab7b488780e1bb097951ac0532813f5657871880a8e579c001a6f89975489b

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 2a3f173c332984e910e9cbaa2b4a5e2aac81aa2d09480c7704861ca7432925ed
MD5 2768877642e922325f42e160021d3c1a
BLAKE2b-256 d1054caa8e2c7bc704006f1e2bad88571c4f14bf48deb3f630bc4a426040f613

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp311-cp311-macosx_13_0_arm64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 4c9db170c14412a1ad79bf1bcbff3da6a798f04e87701ae851484f4323725f5b
MD5 e8065a5c3dd1387899ef13bc669e03fb
BLAKE2b-256 1ae41405c1bd6c724753251af46a52cb41675b746afc76ac6852377dfe05c4ed

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp310-cp310-win_amd64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 476de405df162ca30dac9f0b2d6be094d4971817dae455423ed47d86c204de5e
MD5 1afc3b017151489f6e760ff5c966f569
BLAKE2b-256 ad577de89ce7f62f5570865c0acf4038b9e22b2f2bb96455f682066da379d2b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 4744546c3d620806cd4d62b89aa71ec930ec2c26cab8c808d750e255465b3e28
MD5 6483d27b80ecd6e10fdf2bb86bf202e4
BLAKE2b-256 5fa7c9933b037ce00294e12821266fd425c2cd2ff9b480d880ff8d2ecf38932f

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp310-cp310-manylinux_2_34_aarch64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 c9bae01a5b4c0e0b61b339249ba04a0b6659fb4df63b1a4bbdff581b879f65a0
MD5 b63735c8b46c0753ea1741813396d433
BLAKE2b-256 92e5a35cafeafc54667fa2b29440b8a01a8ce9d724e88f95cf08288f152149af

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 59dc9ab6431f64b07cd8b1aacf3bd0e5bb42c26396501753b969f1504d57b91e
MD5 8a86358f37b950e40c1d0318d4774319
BLAKE2b-256 32f7e8a3cc875027ba7be5acba2f842e869a22a7af9a6fab3ad6d74286542346

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp310-cp310-macosx_13_0_arm64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp39-cp39-win_amd64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 93a5629f48e971656bea692cc4d2c64c32e5254f22845343d612aeac01e82b82
MD5 8f6caf7a18d3f955df0a3ea536779e07
BLAKE2b-256 bacdd4ef6e920245af08bf61019fce479b2da2e0d6cf629d1dc4ecbab885cebe

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp39-cp39-win_amd64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 b7d18a101c9b83cfe276e62a248828ed364a943dac01c66a8ba4002f5f7d9dc3
MD5 70114185af4f1b5555e29a5b9702e472
BLAKE2b-256 6c48c0423bc8dac4bc4d21e7b024c342a3ae65e425b9469d7664c8602470ea33

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_aarch64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_aarch64.whl
Algorithm Hash digest
SHA256 3b08b8c76dc0cfddaec683d885d1ebfdda2bbbc94d1ba6a38a82fe1d45383894
MD5 59aebc653361710a71060aa2c633d2ce
BLAKE2b-256 9f15fcd3842f84f6da39080572409f348f616757b990b88a60bf594516597203

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp39-cp39-manylinux_2_34_aarch64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_x86_64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_x86_64.whl
Algorithm Hash digest
SHA256 49191f2ec1c64a15a9c000730bb96ee0e666c59c644fae21ffdbcfba023e36c9
MD5 0124c3d692fa01147350ef515cfee6b9
BLAKE2b-256 0bd1c480f2fecb7e4d85d12323c3fb007bed718b60cc8b5ad2e274d7d061298a

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_x86_64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_arm64.whl.

File metadata

File hashes

Hashes for meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_arm64.whl
Algorithm Hash digest
SHA256 cf9c4d64119b9c264b0ba145d46073500f6ac11e802227c1af6526ab061d893f
MD5 9187cb77b3eee354b9b3defa16093b22
BLAKE2b-256 3b706827f7c654b726285e8f25c965530c9be724d498d5647cfaa847dabff242

See more details on using hashes here.

Provenance

The following attestation bundles were made for meshioplusplus-7.12.0-cp39-cp39-macosx_13_0_arm64.whl:

Publisher: wheels.yml on loumalouomega/meshioplusplus

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

10.17.0

21 files

10.14.0

21 files

10.9.0

21 files

10.6.0

21 files

10.0.0

21 files

9.27.0

21 files

9.25.0

21 files

9.22.0

21 files

9.14.0

21 files

9.12.0

21 files

9.11.0

21 files

9.10.0

21 files

9.9.0

21 files

9.8.0

21 files

9.7.0

21 files

9.6.0

21 files

9.4.1

21 files

9.4.0

21 files

9.3.0

21 files

9.2.0

21 files

9.1.0

21 files

9.0.0

21 files

8.7.0

21 files

8.5.0

21 files

8.4.0

21 files

8.3.0

21 files

8.0.0

21 files

7.16.0

21 files

7.15.0

21 files

7.14.0

21 files

7.13.0

21 files

This release

7.12.0 This release

21 files

7.10.0

21 files

7.7.0

21 files

7.6.0

21 files

7.5.0

21 files

7.4.0

21 files

7.3.0

21 files

7.2.1

21 files

7.2.0

21 files

7.1.0

21 files

7.0.0

21 files

6.9.0

17 files

6.8.0

17 files

6.7.0

17 files

6.6.3

17 files

6.6.1

17 files

6.6.0

17 files

6.5.0

17 files

6.4.0

17 files

6.3.2

17 files

6.3.1

17 files

6.3.0

17 files

6.2.0

17 files

6.1.0

17 files

6.0.5

17 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page