---
title: 'forge 2026.9.8: a JetBrains preview and models on stdin'
url: https://www.grahambrooks.com/post/forge-2026-9-8-jetbrains-preview/
date: 2026-09-26T18:20:21-06:00
author: Graham Brooks
description: forge 2026.9.8 adds a live diagram preview plugin for JetBrains IDEs and lets build, check and export read a model from stdin, so unsaved editor buffers can be rendered.
tags:
- diagrams
- developer-tools
- rust
- architecture
- Continuous Delivery
---

# 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](https://www.grahambrooks.com/post/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.

## A live preview inside JetBrains IDEs

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 `!include`d 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…**). It isn't on the JetBrains Marketplace: there's no listing for its id, `com.grahambrooks.forge`, and no workflow publishes it.

## Models on stdin

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:

```bash
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.

## Housekeeping

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. None of this changes how forge behaves for you.

## What isn't in this release

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. Neither is in v2026.9.8: both come after the tag. 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.

## Install or upgrade

The README gives these routes. Homebrew:

```bash
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:

```bash
cargo install --locked forge-dsl
```

Or a prebuilt tarball from [GitHub Releases](https://github.com/grahambrooks/forge/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. forge-dsl 2026.9.8 is on crates.io, and the Homebrew formula was updated to it on 19 September, the day of the release, so `brew upgrade` picks it up. 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.
