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.0.tar.gz (276.8 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.0-cp314-cp314-win_amd64.whl (458.8 kB view details)

Uploaded CPython 3.14Windows x86-64

anymesher-0.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (795.3 kB view details)

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

anymesher-0.3.0-cp314-cp314-macosx_11_0_arm64.whl (266.5 kB view details)

Uploaded CPython 3.14macOS 11.0+ ARM64

anymesher-0.3.0-cp313-cp313-win_amd64.whl (450.9 kB view details)

Uploaded CPython 3.13Windows x86-64

anymesher-0.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (795.1 kB view details)

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

anymesher-0.3.0-cp313-cp313-macosx_11_0_arm64.whl (266.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

anymesher-0.3.0-cp312-cp312-win_amd64.whl (450.9 kB view details)

Uploaded CPython 3.12Windows x86-64

anymesher-0.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (795.1 kB view details)

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

anymesher-0.3.0-cp312-cp312-macosx_11_0_arm64.whl (266.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

anymesher-0.3.0-cp311-cp311-win_amd64.whl (450.9 kB view details)

Uploaded CPython 3.11Windows x86-64

anymesher-0.3.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (795.5 kB view details)

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

anymesher-0.3.0-cp311-cp311-macosx_11_0_arm64.whl (264.7 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: anymesher-0.3.0.tar.gz
  • Upload date:
  • Size: 276.8 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.0.tar.gz
Algorithm Hash digest
SHA256 223484e8835e1ba202fb12c11381d5e480b7455e0d6da444e73ee2438595feab
MD5 6696bb7b9e7cd6d342a51f82c05943e9
BLAKE2b-256 2a214f7f69880641e27a07f905cc412f06f125bdd447a7bd130814f7fe6bd64f

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0.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.0-cp314-cp314-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.0-cp314-cp314-win_amd64.whl
  • Upload date:
  • Size: 458.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.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 34bd8c8e0399939aaf51de210b98f034ec68b5c1d33b9036bb256d84db7e8027
MD5 62ce85bfdb2b1b5ae63ae7db83a3c75c
BLAKE2b-256 60627cf7323d3127f913e0a53f6cf576dcf7d7ac2929b2ecfbaaee448ea130db

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 2ebb48d9ac6ad7417f97859b73002476a6d8c1078f03eb896f663c71f03be62c
MD5 a8707140093586a4409afd466d0b26af
BLAKE2b-256 1387118f83eddb65a7633410016219fc23401184382e17e7a09e39ac44a14cb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp314-cp314-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c4b580ed19c690f2e14706046009b361de941f5f1c76dbc1a98d665922aa907
MD5 434ba8ee12594dc3c0e55d2fac35089b
BLAKE2b-256 32bac56f99e49c9e7de7b40fd95d7ae631ff8f6b633ba7f2ade78c9518eecb10

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.0-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 450.9 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.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 90385a2e9f14a4ef2b8ef5036fbd607c802676ebb8e756605c488b6a0aae68a9
MD5 19467681acf336a52a13adc45256eb89
BLAKE2b-256 be4f098074ab04425b2a2706863015dd045412c87715eb555da079a681c180bf

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a005cd52313ecf1e05fbc798b8de1d0dd044a6da85a9ea43131554959345c64e
MD5 5a1fcb6be94942b683ce545492e740ec
BLAKE2b-256 81c501699d1d3ac843277bb764a560bb4f0da76b27a6b6592f4a20f3f0b3fcf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4c97f1b1bee9424bf4ed44e175197c783b23bb95b6a446c545954927e886c9ed
MD5 3876f0e4b7876d9bff329258efdaaeaa
BLAKE2b-256 b205b9e86f446dede787b85c741a50158f2a6dc71c52d02ab150a58ca0b4f66f

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 450.9 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.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 47119c0e85738b707820d89786f8ce003aeaf368c97738c06e7f704692e36ac6
MD5 0c0ba9708da4e61c98fd6c35e4f6fe38
BLAKE2b-256 def11eeea6af43343b0201ce349098ef453bcf6be2b9f50e8216a1234ef14259

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 00579d675133e7c4ab7b29b0565c5b07798b0c8d13cbdfa76d9f2436d54e024c
MD5 9e65850fc8e233797bec5de15918074f
BLAKE2b-256 0d98cf0e34fb951eaf2b868022cfb0f5bce142398e31c37b6b603ed281ba1173

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f37d23e0898b3fab517ed3eaa51aa2bd1da25908a3e1a59619c21816528231f1
MD5 3ba8f57a71e06a89070b7cf210002b44
BLAKE2b-256 daa16fc884eca8329cae03c61960b4b39f5edc4ea9d5dcbab4fc060d158cc41e

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: anymesher-0.3.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 450.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.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1d6409b92b0d8782e86b7d0c0a3997140fc4db51f9af6cdd9506bee2c65198c4
MD5 57cb447a24cee5b11915aebc046fb60c
BLAKE2b-256 110a4365ab34588f8fe0b847b0b4c109e1cb0b2a46c5473b8194999ebb0408fc

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 dd10a90f9d6f89a6aa505a737b1e1ec02c1c4b0286ff8906629de886b6e23b50
MD5 33c920f879a46e73b54730d667f0d45b
BLAKE2b-256 cc67860b861ad79c34b85e44ea6656f9862512a6a0890ecb6fb5c87184806245

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for anymesher-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b682c3efc59da5aa4fb2bfb1010317f0a28d0d3ff5c6a1d371bee4fb05c382f1
MD5 edf7a61c1001445cdebd190454050c3b
BLAKE2b-256 22fdd9fa7f085fffeb633e8a94661a79029f7c5b42df5b11af92f0f55f19727b

See more details on using hashes here.

Provenance

The following attestation bundles were made for anymesher-0.3.0-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

0.3.1

13 files

This release

0.3.0 This release

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