forge 2026.9.8: a JetBrains preview and models on stdin

This is a short release note, not an argument. If you use IntelliJ, RustRover, GoLand or WebStorm and you’ve been curious about forge, this is the release that gives you a preview pane.

forge is a Rust command-line tool for describing a software architecture in one .forge file (structure, processes, deployment and data) and turning that file into SVG diagrams, a static documentation site, lint results, or answers for an AI agent over MCP. It ships as a single binary with no JVM, Node or Python runtime. I wrote about where it came from in a Rust-native architecture toolchain. This post covers what changed between v2026.9.7 and v2026.9.8, tagged on 19 September 2026: seven commits, 36 files, +2,041 / −348 lines.

Nearly all of that is one feature and the plumbing it needed.

The headline is a new plugin, Forge Preview, in editors/jetbrains/ in the repo. It targets IntelliJ IDEA, RustRover, GoLand, WebStorm and the other IntelliJ-based IDEs, version 2025.2 and later. Open a .forge file and it appears in a split editor: source on the left, the rendered diagram on the right.

The toolbar has a picker for every view the model defines, a refresh button and zoom controls. Ctrl/⌘ plus the mouse wheel zooms too. Per the plugin’s README it re-renders 400 ms after you stop typing, and it also re-renders when any other .forge file changes, so edits to an !included file show up. If the model has an error, the message appears above the last good diagram, so a half-typed edit doesn’t blank the pane. The SVG palette follows the IDE theme rather than the OS theme.

The design choice I care about is that the plugin never parses the DSL. It shells out to the forge CLI: forge export --format json to get the view keys and titles, then forge build --out <temp dir> to render each view as SVG, shown in an embedded JCEF browser. What you see in the pane is what forge build would write to disk, not a second implementation that drifts.

The plugin finds the binary on PATH, then in ~/.cargo/bin, /opt/homebrew/bin and /usr/local/bin. There’s a setting under Settings | Tools | Forge Preview to point at a specific one, and to choose outline or filled style. One thing worth knowing: Foundry, the Solidity toolchain, also installs a binary called forge. If that one comes first on your PATH, set the full path in settings.

The plugin’s README describes installing a local build from a ZIP (Settings | Plugins | ⚙ | Install Plugin from Disk…). I can’t find a marketplace listing in the repo, so I’m not claiming one. [unverified: whether the plugin is published anywhere other than as a build from the repo]

The preview needs to render text you haven’t saved. That required a change to the CLI itself, which is the part that matters if you never open a JetBrains IDE.

forge build, forge check and forge export now accept --source - to read the model from stdin. Relative !include paths resolve from the working directory. The integration test in forge/tests/stdin_source.rs covers two cases: forge build --source - --out <dir> fed examples/payments.forge produces SystemContext.svg, and forge export --source - --format json resolves an !include people.forge from the directory it’s run in.

So any editor, script or pre-commit hook that has a buffer in memory can pipe it in:

cat architecture.forge | forge check --source -

That’s the shape of the command as the flag help and tests describe it; I haven’t run it against this release. The plugin’s README says a saved file is rendered from disk and unsaved edits go through --source -, and that this needs forge 2026.9.8 or later. With an older binary, the preview asks you to save or upgrade. That’s the practical reason to upgrade: the plugin works on older forge only for saved files.

Two dependency bumps, clap to 4.6.7 and toml to 1.1.6, plus a lock file refresh. CI now builds and tests the JetBrains plugin, and the release workflow moved to release-kit v2. [unverified: what release-kit v2 changes for release consumers; the commit touches CI files only and I haven’t read what it does] None of this changes how forge behaves for you.

The commits after the release commit on main include a fix for the preview failing to open on IDE 2026.2, where JCEF stopped being part of the IDE core, and a change to keep the preview off diff tabs and VCS revisions. Going by the commit order in the project history, neither is in v2026.9.8. [unverified: that those commits are not in the v2026.9.8 tag; I inferred it from the order of commits in project-history.txt] If you run a 2026.2 IDE, the plugin’s README documents that failure, so read it before building the plugin.

Also unchanged: the README still says Intel Macs have no prebuilt binary. Build from source there.

The README gives these routes. Homebrew:

brew tap grahambrooks/forge https://github.com/grahambrooks/forge
brew install grahambrooks/forge/forge

The formula lives in the forge repo rather than a separate homebrew-forge tap, so the tap URL is required.

From crates.io, where the crate is forge-dsl and it installs a forge binary:

cargo install --locked forge-dsl

Or a prebuilt tarball from GitHub Releases for Linux (x86_64 and aarch64) and macOS on Apple Silicon. The README has a small script that picks the latest tag and your target.

The README doesn’t have a separate upgrade section, so I won’t invent one. Running the install command again is the obvious route. [unverified: that cargo install --locked forge-dsl and the Homebrew commands upgrade an existing install to 2026.9.8, and that 2026.9.8 is published on crates.io and in the Homebrew formula] Check with forge --version afterwards.

For the plugin, build it from editors/jetbrains/ with ./gradlew buildPlugin, which writes build/distributions/forge-preview-<version>.zip, then install the ZIP from disk. It needs JDK 21, which Gradle picks up through toolchains.

If you only use the CLI, this release changes one thing for you: --source -. If you use a JetBrains IDE, it’s the first release where you get diagrams next to the text.