Connector plugins that turn CFD/CAE solver output (OpenFOAM, VTK, Fluent, STAR-CCM+, CGNS, LS-DYNA, ...) into Frontier datasets. Write your own in an afternoon.
Years of solver output sit in case directories nobody can train on. A connector reads one tool's native output and yields solver-neutral samples (mesh, fields with named dimensions, time steps, units, solver metadata) that are written as a Frontier dataset: chunked Zarr that a training loop, a viewer or a catalog can read without the solver installed.
pip install frontier-connectors
python -m frontier_connectors list # what is installed, what needs an extra
python -m frontier_connectors detect path/to/case
python -m frontier_connectors describe path/to/case
python -m frontier_connectors convert path/to/case --to datasets/my-cases
crates/frontier-connector-openfoam/: Rust cratefrontier-connector-openfoamcrates/frontier-connector-vtk/: Rust cratefrontier-connector-vtkcrates/frontier-connectors/: Rust cratefrontier-connectorspackages/connectors/arrays/: Python packagefrontier-connector-arrayspackages/connectors/catalyst/: Python packagefrontier-connector-catalystpackages/connectors/cgns/: Python packagefrontier-connector-cgnspackages/connectors/code-saturne/: Python packagefrontier-connector-code-saturnepackages/connectors/ensight/: Python packagefrontier-connector-ensightpackages/connectors/exporter-catalyst/: Python packagefrontier-exporter-catalystpackages/connectors/geometry/: Python packagefrontier-connector-geometrypackages/connectors/meshio/: Python packagefrontier-connector-meshiopackages/connectors/nek5000/: Python packagefrontier-connector-nek5000packages/connectors/openfoam/: Python packagefrontier-connector-openfoampackages/connectors/oss/: Python packagefrontier-connectors-osspackages/connectors/palabos/: Python packagefrontier-connector-palabospackages/connectors/pyfr/: Python packagefrontier-connector-pyfrpackages/connectors/tabular/: Python packagefrontier-connector-tabularpackages/connectors/vtk/: Python packagefrontier-connector-vtkpackages/frontier-connectors/: Python packagefrontier-connectors
The Python package is where formats are read. The Rust crates define the same contract for
the native pipeline and keep detect fast enough to walk an archive of millions of files.
A connector is a class with three methods, registered through a Python entry point. It lives in your package and your repository; nothing here needs to change for Frontier (the open-source tools and the commercial platform alike) to discover it.
# my_solver_connector/__init__.py
from pathlib import Path
from frontier_connectors import BaseConnector, Detection, RawSample, SourceDescription
class MySolverConnector(BaseConnector):
id = "my-solver"
name = "MySolver results"
formats = ["mysolver-h5"]
vendor = "Example Corp"
license = "Apache-2.0" # licence of THIS connector
extensions = [".msr"]
def detect(
self, path: Path
) -> Detection | None: ... # cheap: look at names and magic bytes, never parse
def describe(
self, path: Path
) -> SourceDescription: ... # zones, fields, time steps, units, solver settings
def read(self, path, *, zones=None, fields=None, times=None):
yield RawSample(...) # one sample at a time; never load an archive eagerly# pyproject.toml of your package
[project.entry-points."frontier.connectors"]
my-solver = "my_solver_connector:MySolverConnector"pip install your package next to frontier-connectors and it appears in
python -m frontier_connectors list, in the frontier CLI, and in the dataset builder of
the Frontier platform. frontier_connectors.testing has a conformance suite to run against
your connector in CI.
- No vendor licence at import time. Importing a connector, listing it and calling
detectmust work on a machine without the solver. Readers that need vendor software ship an exporter script that runs inside the vendor tool and a reader for what the script writes. - Lazy.
readis a generator; a 10^8-cell transient case is streamed step by step. - Honest metadata.
licensestates the licence of the connector,requiresthe optional packages it needs,maturityhow far it has been tested. - No proprietary bytes in the repository. Tests use synthetic files or small public samples with a stated source.
Connectors target a data-model version (frontier_core::DATA_MODEL_VERSION, mirrored in
the Python package). Frontier loads a plugin when its data-model version matches and
reports the mismatch otherwise; the version changes only with a major release of the
dataset format, announced one minor release ahead.
| Repository | What it is |
|---|---|
| frontier-format | Frontier data model and dataset format: the frontier-dataset specification, the plugin contract, and reference readers/writers in Rust and Python. |
| frontier-connectors (this repository) | Connector plugins that turn CFD/CAE solver output (OpenFOAM, VTK, Fluent, STAR-CCM+, CGNS, LS-DYNA, ...) into Frontier datasets. Write your own in an afternoon. |
| frontier-sdk | Frontier Python SDK: offline-first experiment tracking for physics ML, the native Rust core, and the NVIDIA PhysicsNeMo bridge. |
| frontier-physicsnemo | NVIDIA PhysicsNeMo plugin for Frontier: logging, model registry, checkpoint compatibility and dataset adapters. Installable independently of the platform. |
| frontier-hub | Curated hub of public physics-AI datasets and benchmarks: catalog, fetchers and converters to the Frontier dataset format. |
| frontier-editor | Editor core and GPU text view for physics-ML configs, recipes and logs: rope document, undo tree, hunks with per-hunk approval, tree-sitter syntax, JSON-Schema diagnostics, provenance events, and a wgpu renderer that draws into the host's render pass. |
| frontier-viz | GPU-accelerated (wgpu) rendering core for meshes, fields and neural-network topology: native, browser (WebGPU) and headless. |
| foldstate | Statecharts as data with an event log: a pure, deterministic kernel (state, event) -> (state, effects), replay, fork, restore and explanations. no_std + alloc, runs natively and in WebAssembly. Not specific to Frontier. |
| frontier-zed | Frontier for Zed: JSON schemas, snippets and the Frontier MCP context server for physics-ML training configs, RunSpecs, data-prep recipes, pipelines, hub entries and plugin manifests. A Zed extension (extension.toml plus a small wasm32-wasip2 crate), installable as a dev extension today and submitted to the Zed extension registry later. |
Orchestration across SLURM/Kubernetes/cloud, the canvas application, V&V reporting and enterprise governance are part of the commercial Frontier platform, which uses these same open components.
New formats are the most valuable contribution: see CONTRIBUTING.md and open a Connector request issue first. Licensed under Apache-2.0.