Describe system architectures as text, get diagrams as SVG, PNG, PDF, and more. Version-controlled, diffable, no GUI needed.
DFD generates Data Flow Diagrams from a simple text-based DSL, rendered via Graphviz. It supports the SA/SD and SA/RT methodologies (Structured Analysis / Structured Design, with real-time extensions) as described by Edward Yourdon.
The diagram above is generated from this input:
process Acquire Acquire data
process Compute
control Control
entity Device
store Config Configuration
channel API
* ::> Control clock
Control <:: * enable
Control <:: * disable
Control ::>? Acquire sampling
Device ->> Acquire continuous raw data
Acquire --> Compute raw records
Config <-> Compute parameters
Compute --> API records
| Feature | Description |
|---|---|
| SA/RT support | Signals, control processes, and channels for real-time and embedded systems |
| Context diagrams | Generate a top-level SA/SD context diagram (style context) |
| Frames and grouping | Visually group related items |
| Filters | Render focused subsets of a large master diagram (neighborhood, only/without) |
| Dependency checking | Verify that all referenced includes and items are consistent |
| Includes and reuse | Split large diagrams across files, share common item definitions via include |
| Markdown embedding | Embed diagrams directly in Markdown files and generate all images in one pass (--markdown mode) |
| Layout control | Horizontal or vertical orientation, placement constraints between items, relaxed constraints on connections |
| Styling | Background color, graph title suppression, inline Graphviz attributes, reusable attribute aliases |
| Multiple output formats | SVG, PNG, PDF, JPG, EPS, and any other format supported by your Graphviz installation (run dot -Thelp for the full list), plus raw DOT source |
pip install data-flow-diagramCreate a file hello.dfd:
entity User
process App
store DB
User --> App request
App --> DB query
DB --> App result
App --> User response
Generate the diagram:
data-flow-diagram hello.dfd -o hello.svg --no-graph-titleYou should obtain:
Or pipe directly from stdin:
echo 'entity User
process App
User --> App request' | data-flow-diagram -o quick.svg --no-graph-titleRequires Python 3.11+ and Graphviz.
Linux (Debian/Ubuntu):
sudo apt install graphviz
pip install data-flow-diagrammacOS (Homebrew):
brew install graphviz python3
pip install data-flow-diagramIf you get a ModuleNotFoundError: No module named 'reportlab.graphics._renderPM'
error at runtime, reinstall reportlab:
pip install --upgrade --force-reinstall reportlabRequires GNU Make (pre-installed on most Linux distributions; on macOS, install
the Xcode Command Line Tools if not already present: xcode-select --install).
git clone https://github.com/pbauermeister/dfd.git
cd dfd
make all # creates venv, installs deps, formats, lints, tests, builds docsmake all auto-detects your OS and installs the required system packages
(Debian apt or macOS brew). Run make help for all available targets.
Full syntax reference, examples, and advanced features:
- 1. Methodology and scope
- 2. Syntax
- 3. Details with examples
- 4. Markdown snippets
- 5. Including
- 6. Dependencies
- 7. Filters
- 8. Influencing the layout
data-flow-diagram -h says:
usage: data-flow-diagram [-h] [--output-file OUTPUT_FILE] [--markdown]
[--format FORMAT]
[--background-color BACKGROUND_COLOR]
[--no-graph-title] [--no-check-dependencies]
[--debug] [--version]
[INPUT_FILE]
Command-line DFD diagram generator. Converts a textual description into a
graphic file.
positional arguments:
INPUT_FILE DFD input file; if omitted, stdin is used
options:
-h, --help show this help message and exit
--output-file OUTPUT_FILE, -o OUTPUT_FILE
output file name; pass '-' to use stdout; if omitted,
use INPUT_FILE base name with '.svg' extension, or
stdout
--markdown, -m consider snippets between opening marker: ```data-
flow-diagram OUTFILE, and closing marker: ``` allowing
to generate all diagrams contained in an INPUT_FILE
that is a markdown file
--format FORMAT, -f FORMAT
output format: gif, jpg, tiff, bmp, pnm, eps, pdf, svg
(any supported by Graphviz), or dot (raw Graphviz DOT
text); default is svg
--background-color BACKGROUND_COLOR, -b BACKGROUND_COLOR
background color name (including 'none' for
transparent) in web color notation; see
https://developer.mozilla.org/en-
US/docs/Web/CSS/color_value for a list of valid names;
default is white
--no-graph-title suppress graph title
--no-check-dependencies
suppress dependencies checking
--debug emit debug messages
--version, -V print the version and exit
See https://github.com/pbauermeister/dfd for information, syntax and examples.
- Source code: github.com/pbauermeister/dfd
- Package: pypi.org/project/data-flow-diagram
- Changelog: CHANGES.md
- License: GPLv3