FoDE — Foam Dictionary Editor (pronounced "foh-dee")
A GUI editor for OpenFOAM dictionary files, built with Python and PySide6.
FoDE is a graphical editor for OpenFOAM case dictionary files. It lets you browse, edit, and manage dictionaries through a structured tree view or a plain-text editor — whichever suits the task. It is aimed at engineers and researchers who run OpenFOAM simulations and want a more convenient way to set up and modify case files.
Python 3.10 or newer is required.
git clone https://github.com/snaka-dev/foam-dictionary-editor
cd foam-dictionary-editor
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt # installs PySide6 (Qt for Python)An internet connection is recommended on first launch — xterm.js (the terminal emulator) is downloaded automatically to ui/xterm/. Without it, the terminal falls back to the simple QProcess-based widget. Restart the app with internet access to retry, or place the files manually:
| File | URL |
|---|---|
xterm.js |
https://cdn.jsdelivr.net/npm/@xterm/xterm@6.0.0/lib/xterm.js |
xterm.css |
https://cdn.jsdelivr.net/npm/@xterm/xterm@6.0.0/css/xterm.css |
xterm-addon-fit.js |
https://cdn.jsdelivr.net/npm/@xterm/addon-fit@0.11.0/lib/addon-fit.js |
Optional — BlockMesh 3-D viewer (Linux/macOS): install pyvista and pyvistaqt to enable the interactive 3-D geometry panel for blockMeshDict (also overlays topoSetDict, snappyHexMeshDict, and setFieldsDict geometry when those files are open):
pip install pyvista pyvistaqtWithout these packages the BlockMesh tab shows an install prompt and the 3-D viewer is disabled.
-
Launch
python3 main.py # standard (terminal + BlockMesh) python3 main.py --variant no-terminal # no terminal tab (Windows-friendly) python3 main.py --variant no-terminal-blockmesh # no terminal + BlockMesh 3-D panel
The chosen variant is saved to
app_config.jsonon exit and used automatically on the next launch. -
Open a case — choose one:
- Your own case: Case > Open Case → select your case directory
- Drag and drop: drag a case directory from your file manager onto any part of the application window
- Start from a tutorial: Case > Duplicate from Case Library → browse
$FOAM_TUTORIALS→ copy to your working directory - Use a bundled example: open any case from the
tutorials/directory in the repository root (see Example Cases)
-
Select a file from the left panel (e.g.
system/controlDict,0/U) -
Edit values in the Tree view or the raw Text editor at the bottom
-
Check and adjust boundary conditions in the Boundary tab — a table showing all patches and field variables at a glance; click any cell to open its file in the editor and jump to the patch entry
-
Save —
Ctrl+S(current file) orCtrl+Shift+S(all modified files) -
(Optional) Run your solver from the Terminal tab — the terminal opens in the case directory, so you can run
blockMesh,interFoam, or any other OpenFOAM command directly
Each heading links to the full documentation in USER_GUIDE.md.
- Lists common dictionary files automatically (
controlDict,fvSchemes,fvSolution,blockMeshDict,snappyHexMeshDict, and more) plus everything under0/and0.orig/and the case-rootAll*scripts (Allrun,Allclean, … — editable as plain text); detects multiRegion case structures - Add extra files or whole directories (scanned flat or recursively) to the file list — useful for custom field directories, restart time steps, or deep subdirectories
- Create, duplicate, back up, or delete files from the file panel; reload the case from disk at any time
- File list auto-refreshes after changes made outside the app (e.g. via the Terminal); a
constant/polyMeshindicator shows the cell count, marked stale whenblockMeshDicthas changed since the mesh was generated - Save the current state as a new case, or duplicate an existing one
- Structured tree view and a raw text editor, synced in both directions
- OpenFOAM syntax highlighting (toggleable; the keyword list can be regenerated from your own installation) and code folding
- Add, duplicate, comment out, or delete tree entries via right-click
- All boundary conditions across all field variables in one table — no switching between field files
- Edit, create, delete, copy, and paste patch entries directly in the table; add, delete, or rename a patch across all field files in one step
- Click a cell to jump to the patch entry in the editor; copy the whole table as Markdown or CSV
- Built-in descriptions and valid choices for common settings (
controlDict,fvSchemes,fvSolution,blockMeshDict,snappyHexMeshDict) - Extend with your own schema modules (plain Python files)
BlockMesh 3-D viewer (requires pyvista / pyvistaqt)
- Interactive 3-D preview of
blockMeshDictgeometry — vertices, blocks, and boundary faces colour-coded by patch type — with$variableand#evalreferences resolved automatically - Overlays
topoSetDictaction geometry,snappyHexMeshDictgeometry {}shapes (classified as surface / region / geometry-only), andsetFieldsDictregions (labelled with theirfieldValues), each with per-shape visibility toggles; shapes larger than the block mesh are clipped in the view and marked "✂ clipped" - Vertices table beside the 3-D view: edit a coordinate and see the change instantly; a Preview mode explores variable-based vertices without touching the file
- Load STL/OBJ overlays, and export topoSet/snappyHexMesh/setFields shapes as STL files
- ⊞ side-by-side mode shows the 3-D view next to the tree while editing
blockMeshDict,topoSetDict,snappyHexMeshDict, orsetFieldsDict
- Full PTY xterm.js terminal (Linux/macOS) with a simple QProcess-based fallback, switchable at runtime; automatically changes to the case directory when a case is opened
- Omitted entirely in the
no-terminalvariants (Windows-friendly)
- Run
blockMesh,snappyHexMesh,topoSet,setFields, orcheckMeshin the terminal with one click (output saved tolog.*), or restore0/from0.orig - Run the case's
Allrun/Allcleanscripts, or clean the case back to a pristine state withfoamCleanTutorials - Launch
foamMonitorto plot residuals with gnuplot while the solver runs - Open the generated mesh in ParaView
- View a condensed summary of a
log.*file instead of scrolling through thousands of raw lines - Find OpenFOAM examples: search an installation's
tutorials/andetc/caseDicts/templates for real usage of a keyword, preview hits, load one into the compare view, or duplicate a tutorial case as the starting point for your own
- Compare the open case against any reference case: colour-coded diff overlay in the tree,
≠Nmarkers in the file list, and a changed-files-only filter - Side-by-side reference tree with right-click Use this value to adopt individual settings
UI language
- Settings > Language — switch between English and 日本語 (takes effect after restart); add more languages by dropping a translation file into
i18n/
- Help > Resources... — official OpenFOAM documentation links, plus a personal My Links list
For detailed documentation of every panel, menu, and workflow, see USER_GUIDE.md. For project structure, dev setup, and testing, see DEVELOPER.md. For annotated screenshots of the app, see docs/SCREENSHOTS.md.
The tutorials/ directory in the repository root contains ready-to-open OpenFOAM cases:
| Directory | Solver | Purpose |
|---|---|---|
tutorials/cavity/cavity/ |
icoFoam |
Single-region end-to-end workflow walkthrough |
tutorials/cavity/cavityGrade/ |
icoFoam |
Non-uniform grading (simpleGrading) |
tutorials/cavity/cavityClipped/ |
icoFoam |
Clipped geometry; mapFieldsDict |
tutorials/snappyMultiRegionHeater/ |
chtMultiRegionFoam |
Multi-region case for the boundary view and region file listing |
tutorials/damBreak/ |
interFoam |
Two-phase flow; tests setFieldsDict and 0.orig/ |
tutorials/oneBlocks/ |
icoFoam |
3-D single-block; blockMeshDict editing and 3-D mesh viewer |
tutorials/oneBlocks-vars/ |
icoFoam |
As oneBlocks with variable substitution and compact face notation |
tutorials/nineBlocks/ |
icoFoam |
3×3 multi-block; regex boundary patches |
tutorials/nineBlocks-vars/ |
icoFoam |
As nineBlocks with variable substitution and compact face notation |
The cavity/ cases, snappyMultiRegionHeater, and damBreak are from the OpenFOAM v2512 standard tutorial set. The oneBlocks* and nineBlocks* cases are custom blockMeshDict cases derived from cavity for FoDE testing.
License: these case files are licensed under the GPL-3.0 (not the AGPL-3.0 that covers FoDE source code). See tutorials/README.md for full provenance and license details.
Citation is not required, but if FoDE has been useful in your research, a citation is welcome and helps support continued development:
Shinji Nakagawa, Foam Dictionary Editor: A GUI-based open-source tool for OpenFOAM case configuration, SoftwareX, Volume 35, 2026, 102852, ISSN 2352-7110, https://doi.org/10.1016/j.softx.2026.102852 (ScienceDirect)
Copyright (C) 2025-2026 Shinji NAKAGAWA. Released under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later).
This offering is not approved or endorsed by OpenCFD Limited, producer and distributor of the OpenFOAM software via www.openfoam.com, and owner of the OPENFOAM® and OpenCFD® trade marks.
- PySide6 (Qt for Python) — GUI framework (LGPL v3)
- pyVista / VTK — 3-D viewer for
blockMeshDict,topoSetDict, andsnappyHexMeshDictgeometry (BSD-3-Clause, optional) - xterm.js — Terminal emulator used in the Terminal panel (MIT). Downloaded automatically from jsDelivr on first launch and cached in
ui/xterm/ - pytest / pytest-qt — Test framework (development only)
Special thanks to the OpenFOAM Foundation and OpenCFD / ESI Group and all contributors for developing and maintaining OpenFOAM as free, open-source CFD software.
