This release is a pre-release and may not be stable for production use.
rfx
A differentiable 3-D electromagnetic simulator for RF and microwave engineering, built in JAX.
See waves propagate, measure a component's response, and differentiate a design objective. Start with the visual manual and examples. The website identifies its source version; select the release matching your installation.
| You want to… | Start here |
|---|---|
| See results computed with the current code | Showcase · visual archive |
| Run a first model | First run · runnable examples |
| Look up an argument or result | API reference |
| Use rfx with a coding assistant | Machine-readable documentation |
| Check whether a result is supported | Support matrix · S-parameter limits · known limitations |
Release status: 2.0 release candidate
2.0.0rc1 is the first release candidate of rfx 2.0. What 2.0 changes for a user:
- An input a solver path does not implement is refused, never dropped. If
run(),forward()or an S-parameter calculator routes your model to a path that does not solve a declared input (a conformal wall, subpixel smoothing, a lumped element, a port, a dispersive material, a solver or precision request), it raises before the first time step and names the input. It does not run a different model silently. - Validation cases are judged against a stated accuracy bar on a converged mesh: magnitudes within 2 dB, resonances and cutoffs within 1 %, electrical length within 1 % of the reference. This is the bar the project tests against, not a guarantee for every model. What is supported, and within which limits, is in the support matrix; what is currently wrong is in known limitations.
- Python 3.11 or newer, with JAX 0.10. Python 3.10 users stay on 1.8.x.
- Multi-device (distributed) execution is not part of 2.0's supported set; it is planned for 2.1.
Install
pip install rfx-fdtd # latest stable release
pip install --pre rfx-fdtd # 2.0 release candidate
For GPU execution, use a compatible JAX/CUDA installation:
pip install "jax[cuda12]" rfx-fdtd
For the development version, clone this repository and run pip install -e ".[dev]".
The installation guide covers optional packages.
First run
A pulse in a small closed PEC box checks your installation. It records one field probe; it does not measure a device's S-parameters, resonance accuracy, or Q. This code is generated from hello_world.py, the same runnable example tested by CI.
from rfx import GaussianPulse, Simulation
sim = Simulation(
freq_max=10e9,
domain=(0.02, 0.02, 0.02),
dx=2e-3,
boundary="pec",
)
sim.add_source(
(0.01, 0.01, 0.01),
"ez",
waveform=GaussianPulse(f0=5e9, bandwidth=0.8),
amplitude_kind="current",
)
sim.add_probe((0.014, 0.01, 0.01), "ez")
preflight = sim.preflight()
print(preflight.format())
preflight.raise_for_failure()
n_steps = 120
result = sim.run(n_steps=n_steps, compute_s_params=False)
print(result.time_series.shape)
All lengths are metres and frequencies are hertz. Read the preflight findings. Continue with building and measuring a model.
Accuracy and development
Support depends on the structure, mesh, boundary and observable. A successful run or an agreeing automatic/finite-difference gradient is not a convergence study. The accuracy guide explains the checks; benchmarks link results to their scope.
Contributor workflow and repository navigation live in Working on rfx and the repo map. Release changes are in CHANGELOG.md.
Citation
@article{kim_rfx_tmtt_2026,
author = {Byungkwan Kim},
title = {rfx: An End-to-End Differentiable 3-D FDTD Simulator for RF and Microwave Engineering},
journal = {IEEE Transactions on Microwave Theory and Techniques},
year = {2026},
pages = {1--15},
doi = {10.1109/TMTT.2026.3729863}
}
The software itself:
@software{kim_rfx_2026,
author = {Byungkwan Kim},
title = {rfx: JAX-based differentiable 3D FDTD simulator for RF engineering},
institution = {REMI Lab, Chungnam National University},
year = {2026},
url = {https://github.com/bk-squared/rfx}
}
MIT License — see LICENSE. Developed at the Radar & ElectroMagnetic Intelligence Laboratory.
Metadata
Release files for rfx-fdtd 2.0.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| rfx_fdtd-2.0.0rc1.tar.gz | 1.7 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| rfx_fdtd-2.0.0rc1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 3.6 MB
Release files / rfx_fdtd-2.0.0rc1.tar.gz
| Download URL | rfx_fdtd-2.0.0rc1.tar.gz |
|---|---|
| Size | 1.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
84bdafdd68777b593b1486174c188056cbd2988e19a20e0e78119646a5c918d8
|
|
BLAKE2b-256 checksum How to use checksums |
ec6ccfe516b467c8e931e636c2b6613f8f0c608008375bfc55770d494c421084
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / rfx_fdtd-2.0.0rc1-py3-none-any.whl
| Download URL | rfx_fdtd-2.0.0rc1-py3-none-any.whl |
|---|---|
| Size | 1.8 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
aab30012f9214fba27b35f85a46239653baea1f0f5e17bd36993169119c28b73
|
|
BLAKE2b-256 checksum How to use checksums |
0c25638c219d34f1b054252e66fa6462e16a82efc1c79a20f71649d4c50f1063
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for rfx-fdtd 2.0.0rc1
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.