Skip to main content

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.

After the first package-index release, install with python -m pip install ANYmesher. Until then, use the editable development 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.

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

Download files

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

Source Distribution

anymesher-0.3.1.tar.gz (278.2 kB view details)

Uploaded Source

Built Distributions

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

anymesher-0.3.1-cp314-cp314-win_amd64.whl (459.8 kB view details)

Uploaded CPython 3.14Windows x86-64

anymesher-0.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (796.3 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.3.1-cp314-cp314-macosx_11_0_arm64.whl (267.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

anymesher-0.3.1-cp313-cp313-win_amd64.whl (452.0 kB view details)

Uploaded CPython 3.13Windows x86-64

anymesher-0.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (796.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.3.1-cp313-cp313-macosx_11_0_arm64.whl (267.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

anymesher-0.3.1-cp312-cp312-win_amd64.whl (452.0 kB view details)

Uploaded CPython 3.12Windows x86-64

anymesher-0.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (796.1 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.3.1-cp312-cp312-macosx_11_0_arm64.whl (267.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

anymesher-0.3.1-cp311-cp311-win_amd64.whl (451.9 kB view details)

Uploaded CPython 3.11Windows x86-64

anymesher-0.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (796.5 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

anymesher-0.3.1-cp311-cp311-macosx_11_0_arm64.whl (265.8 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

Details for the file anymesher-0.3.1.tar.gz.

File metadata

  • Download URL: anymesher-0.3.1.tar.gz
  • Upload date:
  • Size: 278.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.3.1.tar.gz
Algorithm Hash digest
SHA256 bcb9104acbc8e3f64fffc0912de03c03ff902658e4bb9a1ae2c475db56788568
MD5 cd6d32e76d589e597e2c61b95ec0acb9
BLAKE2b-256 a01989e627ca3241888e6b3ad82c304599ea2712d0e8d63583d9db138f9fb71f

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1.tar.gz:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.1-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 459.8 kB
  • Tags: CPython 3.14, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.3.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 33b8277534dde9cda1f09f2afba1190962bb0e90cf31af113de2fa4d105b33e2
MD5 da49e038f076dccbf3c003c0cf051a87
BLAKE2b-256 2b64e1cf7a9ce313ea0f05984221716234fe53c5bd697eddb6b2fc4b04536703

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp314-cp314-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ad8fd2f578fbd9a891a77911927c694a47f3f129f64d8549044ebd273b44144
MD5 03574aefbb0167fcc15a754bd8dd8af4
BLAKE2b-256 fbcd103f484dc9791078fb648c824ad4ea45dd4d580fee5664c540fceac300f9

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1f746fa3073c18634b49c89288fd0fd68065dd3611b5491b58130f542f500bb3
MD5 24036a18fe7534579112eefa287efc84
BLAKE2b-256 f3717bb7195b22d562f74dfc6f8d9d4e1571bfff6b436aa50f8c2a0b7d6adcdf

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp314-cp314-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.1-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 452.0 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.3.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 a7fa4696402eb12e4b44481f4790bb1b5ba8dd218b6530ce97f438c9203bd522
MD5 29ceb4b692f61dd2e5f08caa4e41bade
BLAKE2b-256 3c605470f48cd23011b21ad6e9c0af78587a12c28cf044553dc4b55628939fb1

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp313-cp313-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2c8ac7dc8a8f3a546cd3ec49b1319a9ecf8268787f2f71edb355ccff5ce1de32
MD5 4cb5e166614d477fb705b573fcb64004
BLAKE2b-256 fd8571d6f3123806e3fc491b74e1311b1c413bea8815d22b07d7daebd3ba89c4

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0cee4086152f70f5da8f9dfe2c302e3093a2cf37aa50a0d4a0577b54b9db355c
MD5 48f097099aab23c38be2aab77e68a7b8
BLAKE2b-256 3ff254c096e30f1353a10e7692eb2b59524ebd5af1f9da56e77dc2ae8857b211

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp313-cp313-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.1-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 452.0 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.3.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 11b91fafa661e0db849f98b95d2803f80945a02a8fbfe13d076e052beefcefa7
MD5 5b16293acb4d4f3ab9345a2120dffd9c
BLAKE2b-256 2715a50ca9c3c46c86561401736e008dacbb82a92bfb0e043feb50da828cccad

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0a70330763518bd9532dc4195240a8e88951197dea3dfa7f7aa300e867ee3c02
MD5 30db521b2a463f82942e8bf471f79cc6
BLAKE2b-256 9f7eebf185567eea0097565dd41e2567ba5f46115f49837191e58466d2b84f91

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 96529c3c8c86a0c591ad62b701793e5934932599ddf0cc6471734f1976ab70a0
MD5 fdbd738f902a6f2d4d9c3ab1b64a5b4e
BLAKE2b-256 160198791ae00aba921c5a3a3f95b443efcd10e216526d1cd940e07615cfcabe

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.1-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 451.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for anymesher-0.3.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c14bf8230e0472f6c6ab3181b380887abf0b323af21a7038a1248be562a2f268
MD5 94d253c3f39917e6c2c338469edabafd
BLAKE2b-256 d8205abd41d359ad00af9b82913b4207a5819ed1a7f823d943f8131b6abee7ac

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e8c1b38c85a6527ef21a01ffd5551799a1d4c724db1da024d467984c327c23c9
MD5 38624faac27632aba8fb1c8ef3d28bbb
BLAKE2b-256 0a36925d4fbd8d249d8edf167366e68aa165bf56fea54e7c89ffcb88f5d9ffaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

File details

Details for the file anymesher-0.3.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eace54d1cabefef60eb3807c881303a499352e05e0df1f595d864d80ecb82b77
MD5 be3b6743253b26016723855ba270a556
BLAKE2b-256 4d74239a61eac8cdcae192b39b9d1894620a1aec13080fd7e4871161864eea22

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.1-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on audunarn/ANYmesh

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

Release history Release notifications | RSS feed

This release

0.3.1 This release

13 files

0.3.0

13 files

0.2.5

13 files

0.2.3

13 files

0.2.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page