ANYmesher
Structured meshing for shell and beam finite-element models described by ANYgeometry: edge seeding and local refinement, a built-in mapped (transfinite Coons) mesher, mapped-face decomposition, optional Gmsh meshing, geometry-to-mesh associations, quality metrics, a tkinter mesher and a command-line interface.
Install the released package with python -m pip install ANYmesher. For local
development, use the editable setup below.
The repository is ANYmesh, but anymesh was already taken on PyPI, so the
distribution is ANYmesher and the import package is anymesher.
Quick start
A stiffened panel needs no geometry model:
import anymesher as am
panel = am.StiffenedPanel(
length=4.0, width=3.0, plate_thickness=0.012,
num_stiffeners=2, stiffener_spacing=1.0,
stiffener_height=0.30, stiffener_web_thickness=0.010,
stiffener_flange_width=0.150, stiffener_flange_thickness=0.015,
)
mesh = am.stiffened_panel_mesh(panel, am.PanelMeshConfig(
shell_num_divisions_x=8, shell_num_divisions_y=6, beam_num_divisions=8,
))
mesh.num_nodes, len(mesh.quads), len(mesh.beams), len(mesh.couplings)
am.panel_edge_nodes(mesh)["x0"] # the nodes on the x = 0 edge
am.verify_mesh_quality(mesh).max_aspect_ratio
Anything less regular goes through the shared geometry model:
import anygeometry as ag
model = ag.GeometryModel()
points = model.add_points([(0, 0, 0), (2, 0, 0), (2, 1, 0), (0, 1, 0)])
face = model.add_face(model.add_polyline(points, close=True))
am.punch_circular_hole(model, face, (1.0, 0.5, 0.0), 0.2)
mesh = am.generate_mesh(model, target_size=0.05, order="quadratic")
mesh.nodes_on(ag.EntityRef("edge", 3)) # still addressable after re-meshing
anymesher.geometry remains as a temporary compatibility import. Its classes
are the exact ANYgeometry classes, not converted copies, but new code should
import geometry directly from anygeometry.
Command line
anymesher panel --length 4 --width 3 --thickness 0.012 --height 0.3 --web-thickness 0.01 --divisions-x 8 --divisions-y 6
panel, plate, beam, quality and backends, each with --json.
--output writes the mesh as JSON.
Provider-neutral automation
anymesher automation --geometry model.json starts a JSON Lines session for
LLMs and agent frameworks. The core accepts strict structured tools only; it has
no model SDK, prompt parser, credentials, network access, or arbitrary shell or
filesystem command. Discover the exact schemas with mesh_capabilities, plan a
revision-bound batch with plan_mesh, inspect the detached candidate, and
publish it exactly once with apply_mesh.
Qualified commands configure meshing, select geometry scope, pin edge divisions, manage named refinements, generate, undo, and redo. Direct node/element mutation is intentionally unavailable because it would invalidate topology associations and deterministic numbering. Geometry edits remain in ANYgeometry's own automation protocol.
anymesher-gui opens the mesher: enter a panel, plate or beam, watch it re-mesh
as you type, read the quality report, and save the result. It is deliberately not
a geometry editor — building a BRep interactively is an application's job, and
ANYfem already does it.
Applications can put that form behind their own mesh button. Passing a callback
adds a Use mesh button and returns the neutral Mesh directly:
from anymesher.gui import open_mesher
window, mesher = open_mesher(root, on_apply=project.replace_mesh)
The host remains responsible for deciding whether a generic neutral mesh is appropriate for its structural model.
What a mesh is here
generate_mesh returns nodes, quadrilaterals, triangles, beams, coupling
records, and the association back to the geometry: which node came from which
vertex, which nodes lie along which edge, which elements belong to which face.
The association is the point. It is what lets a load or a restraint be named against geometry and survive a re-mesh, and what makes results addressable by the thing the user drew rather than by node number. Primitives fill the same fields against synthetic entity IDs, so a consumer needs one lookup path either way.
Backends
| mapped (built in) | gmsh ([gmsh] extra) |
|
|---|---|---|
| Structure | structured grid per face | unstructured |
grid_of_face |
filled | empty |
| Conformity | by construction | by gmsh |
| Elements | quads only | quads, with triangles where recombination cannot pair them |
| Curved faces | meshed exactly | refused — planar faces only |
| Eccentric beams | supported | not supported |
am.generate_mesh(model, backend="gmsh", target_size=0.1)
The two are not interchangeable in what they guarantee, and the differences are
recorded rather than smoothed over: an unstructured mesh has no (i, j) index, so
that field is left empty instead of filled with something plausible.
Planar boundaries may contain ANYgeometry straight lines, circular arcs or
Bezier splines; Gmsh receives each as its corresponding exact curve primitive.
Hybrid strategy: Automatic, Mapped, or Native
generate_hybrid_mesh_result is the production shell/beam route. The
strategy argument is explicit and is independent of the lower-level
triangulator selector:
strategy |
Behaviour |
|---|---|
"auto" |
Use mapped blocks where qualified; use native faces for the remainder. With structured_options, try the global structured plan first and use the recorded native fallback only when its actual mesh fails quality_v2. |
"mapped" |
Require every selected face to become a qualified mapped block. Any unsupported partition or quality violation blocks the mesh. |
"native" |
Require the unstructured face route. It cannot be combined with structured_options. |
result = am.generate_hybrid_mesh_result(
model,
target_size=0.1,
strategy="auto", # Automatic
structured_options={}, # enable global structured planning
)
mapped = am.generate_hybrid_mesh(
model,
target_size=0.1,
strategy="mapped", # fail closed unless all faces map
structured_options={},
)
native = am.generate_hybrid_mesh(
model,
target_size=0.1,
strategy="native",
native_backend="auto", # compiled triangulator, else Python
)
Every call creates a detached structural closure. On that working copy,
ANYmesher uses ANYgeometry's exact public intersection query/plan/apply
workflow to connect crossing plates, beam ends and crossings, and beam/shell
intersections. The editable source model is unchanged; published mesh
associations are remapped to its original entity handles. Passing
structural_preparation=False disables automatic relationship creation but
still uses a detached clone.
Positive-area coplanar plate overlaps are never assigned to one plate implicitly. Meshing blocks with a diagnostic directing the user to the previewable, undoable Fragment Overlaps geometry command.
plan_structured_layout and apply_structured_layout are public detached
preview/application APIs. commit_structured_layout is feature-gated: it is
available only when the installed ANYgeometry exposes the exact
FeatureHistory.adopt_frozen contract. The qualified base dependency remains
ANYgeometry 0.2.2, so ordinary mesh generation never depends on that optional
feature-history operation.
Native triangulation
Mapped/native face selection is separate from the triangulator used after a face
has selected the native strategy. In 0.2.1, omitted native_backend and planar
backend arguments default to "auto": an explicitly registered boundary is
preferred, then the built-in compiled boundary, with the deterministic Python
reference used only when native capability is absent.
Use "python" to require the compatibility/reference implementation and
"native" to require compiled capability without fallback. Import or execution
failure from a present but corrupt extension is reported; it is never treated as
ordinary absence. ANYfem format 6 persists this selector explicitly, while its
format 1-5 migration writes "python" so old projects retain their behavior.
Design notes
One shared geometry authority. ANYmesher never converts a geometry model.
It consumes the same GeometryModel and EntityRef objects that applications
use for selections and attributes, then records associations to their stable IDs.
Conformity by construction. Node generation order is fixed: one node per used
vertex, then n - 1 interior nodes per edge in the edge's own direction, then face
interior nodes from the Coons blend. Neighbouring faces look their boundary nodes
up from the same registries, so they share the very same nodes. The alternative —
meshing faces independently and merging coincident nodes within a tolerance —
fails quietly on nearly-coincident geometry and produces a mesh that looks
connected and is not.
Coupling records, not constraints. When a stiffener stands off the plating, the mesher records per beam node: the shell element it projects into, the shape weights at that point, and the eccentricity vector. That is a statement about geometry. Deciding it becomes six multi-point constraints is the consuming solver's business. Interpolating through the shape functions is what removes the older requirement that a beam node lie on a shell node row, so the mesh no longer has to be aligned to the stiffeners for the coupling to be exact.
Numbering is a contract. A consumer stores results per node and element ID, so a renumbering that is mathematically irrelevant still invalidates its baselines. The primitives number shell nodes from 1, beam nodes from 10000, beam elements from 20000 and couplings from 30000; the mapped mesher numbers by registry order. Both are documented where they are implemented and asserted by test.
See docs/ARCHITECTURE.md for the layering, and MIGRATION.md for what was extracted from where.
Scope
Out of scope: geometry ownership, elements, materials, assembly and solution.
General splitting, trimming, projection, transforms and intersections belong to
ANYgeometry. check_mappable, triangle_to_quads and the four-patch butterfly
hole decomposition stay here because they exist specifically for mapped quads.
The production generate_hybrid_mesh workflow uses ANYgeometry's qualified
intersection operations on an immutable working closure; it does not introduce
a second geometry kernel or weld nodes by proximity. The older
generate_mesh_with_intersections name remains only as a deprecated migration
seam for historical models and is never selected automatically.
The legacy anymesher.split_face_at, split_face_between and strip_face
imports likewise retain their mapped-partition semantics; new neutral geometry
code should import the general edit operations from anygeometry.
Writing a mesh to a .fem
or .inp file belongs to ANYfileio, which
depends on this package — so the arrow cannot point back. The JSON in
anymesher.serialize is the mesh container written out as itself, not an
interchange format.
License
Opt-in native-v2 planar meshing
ANYmesher 0.5.0 adds provider-neutral, immutable controls for a bounded planar Frontal-Delaunay route while retaining the legacy native defaults:
from anymesher import MetricFieldSpec, NativeMeshingOptions, generate_mesh
mesh = generate_mesh(
geometry,
backend="native",
target_size=0.2,
native_options=NativeMeshingOptions(
point_placement="frontal_delaunay",
metric_mode="isotropic_spatial",
metric_field=MetricFieldSpec.uniform(0.2),
),
)
Metric specifications are strict serializable data. Runtime callbacks are explicitly experimental and cannot be serialized or passed through automation.
Starting with version 0.4.0, ANYmesher source code is licensed under the
Mozilla Public License 2.0. See LICENSE for the full terms and NOTICE for
the prospective relicensing statement. Earlier published versions remain
available under the license terms that applied to those versions.
Original project documentation under docs/ is licensed under Creative
Commons Attribution 4.0 as described in docs/LICENSE.md. Dependency and
optional-tool licenses are recorded in THIRD_PARTY_NOTICES.md.
Units
SI throughout, lengths in m. There is no conversion layer. The mesher window accepts mm because that is how plate and profile dimensions are quoted, and converts at the widget.
Development
python -m pip install --no-deps -e C:\Github\ANYgeometry
python -m pip install -e "C:\Github\ANYmesh[dev,gmsh]"
python -m pytest
To open the mesher straight from a checkout — including an IDE's Run button, with
nothing installed — run run_gui.py at the repository root.
python run_gui.py
Metadata
Release files for ANYmesher 0.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| anymesher-0.5.0.tar.gz | 563.3 kB | Details |
Built distributions (wheels)
Total release size: 15.1 MB
Release files / anymesher-0.5.0.tar.gz
| Download URL | anymesher-0.5.0.tar.gz |
|---|---|
| Size | 563.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8b7487ed53bed0904ce63c7193dbe7f20976286cc32779fed7f3a9abd1b4143f
|
|
BLAKE2b-256 checksum How to use checksums |
867e80d12b90d00f069c43959687b8ef5adb10bffdbc3c46071f8c0cd86d9416
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp314-cp314-win_amd64.whl
| Download URL | anymesher-0.5.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 731.8 kB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
1cad53bc5e8a9f523be8e65704d59596349a27a6e4266f4c6bbdd92a81a378bf
|
|
BLAKE2b-256 checksum How to use checksums |
297acc5dccdc8f129ba0502eb37ee45583961c95922772200c46c9d6284f3a87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | anymesher-0.5.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.14 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
bb13d0fa9b82b4fbf8db51e31d0d91ff6fa58c306876106a06fe98aeff0ce8a6
|
|
BLAKE2b-256 checksum How to use checksums |
03598a20a49063b6bed8bcccf0e249d4b48e7b6f5c0b98a106516a4230cd1587
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | anymesher-0.5.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 560.7 kB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f7ed3f3a108b9069818ed1443b8673b64825962d29f29b4b65c2c17983c91b7c
|
|
BLAKE2b-256 checksum How to use checksums |
cbe88dc0c0b3c5cb21656d0a874441049e543924a704c9396d093d4cb9e70bb9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp313-cp313-win_amd64.whl
| Download URL | anymesher-0.5.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 723.5 kB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
33abadb82e334e961870ba2e8abffcbe55c6129731d34f24447f3ad6c58a81ff
|
|
BLAKE2b-256 checksum How to use checksums |
86df485c1cefc7de4079058a9c29819eb0dd2c3291ee6571c38bcd7453f1ff29
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | anymesher-0.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.13 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
31ec5d87cf57c1fdc1eb7e938ae3da384ca315c75cb9f240b545e1d649ffe316
|
|
BLAKE2b-256 checksum How to use checksums |
49a4c9cbb02094d33b979c3cd2f014714fef0597ad4298068e1d99952dee95fe
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | anymesher-0.5.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 560.6 kB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
f55da174e90d3f9229fc6bc9c497450558756bde56423c8ab9db86b1d7b1de77
|
|
BLAKE2b-256 checksum How to use checksums |
7404371637122fa55ba61c3065e49948e30b5c2476106d4912c88c02d87f4686
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp312-cp312-win_amd64.whl
| Download URL | anymesher-0.5.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 723.5 kB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
0436aa43873800d6b733cb9b099dc6c88998e31a5a038f9f1382b91a53bb91d7
|
|
BLAKE2b-256 checksum How to use checksums |
0447751776bf01fcde295bc8552887c155be7b156349802fbaf6034e54cccc21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | anymesher-0.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.12 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7946fbfcdf2c47e4a990322976187760a931b96e0ef24b486707e7fa34f723a3
|
|
BLAKE2b-256 checksum How to use checksums |
ea352d213110aade772e84dd755cfec85a5f074b6f4096c8c2deff6dba7d3d39
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | anymesher-0.5.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 560.6 kB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9c25e38d2d090bf5768bb6d9ebe1288a08fc4931219e3fd7b2e2661aa03ac98d
|
|
BLAKE2b-256 checksum How to use checksums |
7fdf46b69844e56443538cb7543c53c62c42d6a777670b49a2954b84a2a96e99
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp311-cp311-win_amd64.whl
| Download URL | anymesher-0.5.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 723.7 kB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
152f8a5882ca47e257be301478199e4f517dc030a73a43f28a8e7791329bb200
|
|
BLAKE2b-256 checksum How to use checksums |
fc652f527377c1b7af201ec034116849cc2c0972a856858e6888c2ead05d15d7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
| Download URL | anymesher-0.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 2.4 MB |
| Tags | CPython 3.11 Linux glibc 2.24+ x86-64 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
f15081168e5c3cca4b0dfd486b3ca2ace91f521ba1f690f8523acf8fa4771f09
|
|
BLAKE2b-256 checksum How to use checksums |
cc004c33be6678c5f0fa11cb9db27421a6014856fe13dd50b38a34d926226697
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency logRelease files / anymesher-0.5.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | anymesher-0.5.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 557.6 kB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
0806ae7b1ee4bf4ef44f44844d80896e3f28c8c2a34f8a78169ec07c708f1990
|
|
BLAKE2b-256 checksum How to use checksums |
1ad2d0a1427fb3d1c70b5b2afaef08b50e5af74361a8b18a2d3b21436b5a223a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 16, 2026.
Transparency log