Build and deploy powerful simulation web apps at scale.
The Solution Application Framework is a Python-based toolkit for creating production-ready simulation web applications. It gives method developers and engineers the building blocks to turn complex, multi-domain Ansys simulation workflows into guided, shareable web apps β without needing to become full-stack software engineers.
Whether you're packaging enterprise simulation expertise into a repeatable workflow or democratizing advanced physics modeling for non-expert users, SAF provides the architecture, tooling, and integrations to get you there.
| π | Templated, Production-Ready Apps | Hit the ground running with app templates that come batteries-included: project structure, dependency management, database setup, containerization, observability, and more. Spend less time on scaffolding and more time on what matters β your simulation logic. |
| π» | Desktop-Ready | Deliver desktop-class experiences with built-in support for code encryption and obfuscation, standalone executable installers, and fully offline installation β protecting your IP while keeping deployment frictionless. |
| π | Native Ansys Ecosystem Integration | Out-of-the-box integration with Ansys products and Shared Technology Components, PyAnsys SDKs, job submission via HPC Platform Services (HPS), and enterprise data management via Ansys Minerva and the Data Repository STC. Leverage the full power of the Ansys ecosystem from within your app. |
| ποΈ | Open Architecture | Built on a modern microservices architecture, SAF imposes no lock-in. Use any frontend framework β React, Angular, Dash, or your own. Connect to third-party software via REST APIs. Every app is generated from well-defined templates, ensuring a consistent and extensible architecture from day one. |
| βοΈ | Flexible Deployment | Write your app once and deploy it anywhere β desktop, on-premises, or cloud β without changing a single line of source code. SAF abstracts away the infrastructure so you can focus on the simulation logic. |
| Category | Component | Description |
|---|---|---|
| Runtime Engine | GLOW Engine | The central application runtime |
| Product Integration | Product Manager | Provides managers for interacting with Ansys products |
| Product Configuration | Provides configurations and wrappers for launching Ansys products | |
| Developer Experience | CLI | Command line interface to manage solution applications |
| Solutions Manager | VS Code extension to ease the developer's experience | |
| Testing | Provides fixtures to test a solution application | |
| Templates | Step templates for solution customization | |
| UI components | Super Components for Dash | Pre-assembled, high-level UI components for simulation web apps |
| Infrastructure | BDM Python API | Set of Python abstract base classes and models that comprise the interface between application code and services implementing BDM. |
| BDM Shared Volume | Provides a blob management service. | |
| IAM OIDC | Provides oauth2 and openid connect features. | |
| Desktop | Desktop Orchestrator | Orchestrates the startup of the services in desktop. |
| Desktop Installer | Generates a distributable desktop installer of a solution application. |
In order to clone this repository you need to enable long paths on git:
git config --global core.longpaths true
git clone https://github.com/ansys/saf.gitYou probably also need to enable long paths on Windows: see
Root-level tasks (pre-commit, documentation) use uv. Install it once globally:
pip install uvPackage-level tasks (dependency management, tests, code style) use Poetry. Install it once globally. See the official installation instructions.
The following commands run from the repository root and use uv.
uv venv .venv --python 3.12
.venv\Scripts\activate
uv pip install pre-commit==4.6.0
uv run pre-commit run --all-filesThis monorepo intentionally uses two pre-commit scopes:
- Root pre-commit (
/.pre-commit-config.yaml) for repository-wide governance. - Package pre-commit (
/packages/*/.pre-commit-config.yaml) for package-specific quality gates.
- Root hooks validate files that are shared across the whole repository (for example, GitHub workflows, YAML formatting, secrets, and license policy).
- Package hooks validate Python quality/security with each package's own tool configuration and dependencies.
- Putting every package hook at root would make one large, slow, and brittle environment for 12 independent packages.
| Scope | Purpose | Typical hooks |
|---|---|---|
| Root | Repository policy and governance | gitleaks, zizmor, trailing-whitespace, yamlfmt, add-license-headers |
| Package | Package runtime/code quality | ruff-check, ruff-format, pyright, bandit, poetry-check, package-scoped codespell/blacken-docs |
- Run root pre-commit when you modify root-level files (for example
.github/**, root docs, shared configs). - Run package pre-commit when you modify code/config in a package under
packages/<component>/. - Before opening a PR that touches both scopes, run both root and affected package checks.
Root scope: use the same command sequence shown in "Run pre-commit checks" above.
Package scope:
cd packages/<component>
poetry install --all-extras
poetry run pre-commit run --all-filesIf a package environment does not include pre-commit, install it in that package venv:
cd packages/<component>
poetry install --all-extras
poetry run python -m pip install pre-commit
poetry run pre-commit run --all-files- Local automation: install Git hooks so checks run before commit.
# From repository root
uv run pre-commit install- CI automation: root and package pre-commit checks are enforced by workflows; CI remains the source of truth.
- Recommended practice: still run local checks first to reduce CI turnaround time.
uv sync --group doc
uv run sphinx-build doc/source doc/build/htmlIndividual components live under packages/<component>/. Use Poetry to work on them.
cd packages/<component>
poetry install --all-extrascd packages/<component>
poetry run pytestNot all packages include pre-commit in their pyproject.toml. The dependency group varies by package:
| Group | Packages |
|---|---|
style |
glow-engine, saf-testing, dash-super-components |
dev |
saf-cli, saf-desktop-orchestrator, saf-product-manager, saf-product-configuration |
| (not included) | bdm-python-api, bdm-python-shared-volume, saf-iam-oidc, saf-desktop-installer, saf-templates |
For packages that include pre-commit:
cd packages/<component>
# Install the group that contains pre-commit (style or dev, see table above)
poetry install --with <style|dev> --all-extras
poetry run pre-commit run --all-filesFor packages that do not include pre-commit, install it in the venv first:
cd packages/<component>
poetry install --all-extras
poetry run python -m pip install pre-commit
poetry run pre-commit run --all-files