LazowskiAnton · Extensions

BuildSmith

What your build did and why it took that long. After every build, the status bar shows its time and the change against the previous one; the Build Timeline window shows every project on a timeline — which ran in parallel, which waited, and the critical path that decided the total.

Free · Visual Studio 2022 and 2026 · 14 UI languages · no telemetry

Why BuildSmith

The Build Timeline window: the build result and its time against the previous build, one bar per project in the order they started, the critical path outlined in orange

Where the time went

The Output window says that the build took 1 min 48 s. The timeline says which projects took it, which of them ran side by side, and which chain of projects the whole build had to wait for.

Compared with a like build

A Debug build on main is compared with the previous Debug build on main — not with a Rebuild, a Release build or another branch. So ▲ 4.1 s means something.

Quiet

No window opens by itself, nothing pops up: one line in the status bar after the build. When recording is off, BuildSmith really sleeps — it does not even listen to build events.

Free, without strings attached

No subscriptions, no "pro" version, no data collection, no messages in the Output window or at startup. The history stays on your computer. The only thing we will ever ask — after you have used it for a while — is a rating on the Marketplace. Works on Visual Studio 2022 and 2026, x64 and ARM64.

Features

The build at a glance

Open Build › Build Timeline (also in View › Other Windows and on the SmithWorks toolbar). The window shows the last build — or any build from the history — with a summary at the top and one bar per project below.

The Build Timeline window: the header with the result, time and change, then the projects on a timeline with the critical path outlined, up-to-date projects hatched and a tooltip

The time in the status bar

After every build, the status bar of Visual Studio shows its time and the change against the previous comparable build: ⏱ 1 min 48 s (▲ 4.1 s) — ▲ slower, ▼ faster. It is the only thing BuildSmith shows on its own, and it can be turned off in the settings.

Comparable means the same kind of build (Build or Rebuild), the same configuration, the same platform and the same Git branch. If there is no such build yet, only the time is shown.

The header

The top of the window sums up the shown build:

On screenMeaning
✓ 1 min 48 s  ▲ 4.1 s vs previousThe result (succeeded or failed), the total time, and a badge with the change against the previous comparable build; its tooltip says how long that build took and when.
14 projects · 9 built · 5 up to date · 1 failedHow many projects took part, how many were really built, how many were skipped as up to date, and how many failed.
critical path 1 min 31 s · Debug · Any CPU · mainThe length of the critical path, then the configuration, the platform and the Git branch of the build.
The build pickerAny recorded build of the solution: the timeline switches to it.
🏷 ⏻ ⚙🏷 labels the shown build, ⏻ turns recording on or off, ⚙ opens the settings.

The bars

On screenMeaning
Blue barA project that was built, one row per project in the order they started: the bar begins where the project really began after the build started and is as long as it took. Bars that overlap ran in parallel, so you see how parallel the build really was.
Orange outlineThe critical path: the chain of projects, each waiting for the previous one, that decided the total time. Making one of them faster makes the build faster; the other projects ran alongside.
Hatched stubUp to date: skipped, nothing in it changed.
Red barThe project failed to build.
▲ 2.4 sNext to each bar: its time and, when it is notable, the change against the same project in the previous comparable build.

Hover a bar for the details: how long the project took, from when to when after the build started, the change against the previous build, and whether it was on the critical path.

The window can stay open while you work: it moves to every new build by itself. The tabs Timeline, Compare and History are at the top.

Never up to date

Some projects are built on every build, even when nothing in them changed. Each time it costs a few seconds, and nobody notices. BuildSmith does: above the timeline of an incremental build, a strip says how many such projects there are and what they cost per build. It folds open into the list of projects; their rows on the timeline get the ⟳ mark.

A strip above the timeline: 3 projects are never up to date, 6.4 s each build; the list of projects and the usual causes

The rule: a project is pointed out when it was built in every one of the last 3 to 5 incremental builds of the same configuration and branch, while more than half of the solution was up to date. Rebuilds do not count — there everything is built on purpose.

The usual causes:

Fixing it saves that time on every build. The strip can be turned off in the settings: Point out projects that are never up to date.

History

The History tab lists the recorded builds of the solution, newest first, grouped by day. Each row shows the time, the kind of build, the configuration and branch, its label, and a bar proportional to the build time — a slow build stands out at once.

The History tab: a search box, date ranges, ticked builds, labels, bars proportional to the build time and the right-click menu

Find a build

Type in the search box — every word must be found in the label, the branch, the configuration or the kind of build. Narrow it by date with Today, Yesterday and today, 7 days or All, or pick dates in the calendar (Dates…). Labeled only leaves the builds you labeled.

Open, label, keep, delete

Click a build (or press Enter) to open it on the timeline. Right-click for Open in Timeline, Label…, Keep (never delete) and Delete. The Delete key deletes the build, with Undo for a few seconds. The ⋯ menu deletes builds older than a date, clears the history of this solution or of all solutions.

Tick builds to compare them or to delete several at once. Tick the labeled ones ticks every shown build that has a label — the quickest way to compare "before" and "after".

How long builds are kept

Builds are kept only on this computer, in %LocalAppData%\BuildSmith, one history per solution — for 1 day, 3 days, 1 week (the default), 2 weeks or 1 month. Older builds are deleted when the solution opens or a build ends. Labeled and kept builds stay however old they are.

Labels

🏷 in the header (or Label… in the History menu) gives a build a short text and a color: one of five, or one of your own from a small picker with a palette and recent colors. Recently used labels are offered again with one click, so a series of builds can share one label.

A labeled build is never deleted by age (unless you turn off Keep labeled builds). Keep (never delete) pins a build without a label.

Recording

⏻ in the header chooses whether builds are recorded:

ChoiceWhat happens
Record buildsThe default: every build is timed and kept in the history.
Not for this solutionThis solution is no longer recorded; others still are. The settings list such solutions, with Record again.
Off everywhereBuildSmith sleeps in every solution.

Asleep, BuildSmith truly does nothing: it does not subscribe to build events, writes nothing to the status bar or the disk. The history stays, and the window offers Record builds again.

Compare builds

The Compare tab puts builds side by side: did the fix help, which project got slower after the update, how the build time went over the week.

The Compare tab: build chips, the trend of build times, and a table of projects by builds with colored changes, sparklines and the critical path

Pick the builds

Tick 2 to 10 builds in History and press ⇄ Compare N. Without ticks, Compare shows the shown build against the previous comparable one. The builds appear as chips at the top; ✕ takes one out of the comparison.

The trend and the table

A small chart shows the total time of each build. Below it, a table of projects × builds: each cell is colored by the change against the first build — warmer is slower, green is faster — with a sparkline, the change, and ● where the project was on the critical path. Projects without a notable change are folded into … N more without a notable change.

Only the projects you care about

Projects: … filters the table: All projects (N), Changed notably (N), On critical path (N) or Only the ticked ones, with a search box. The filter is remembered per solution, and the trend then sums the time of the filtered projects — the trend of your projects, not of the whole solution.

One project across the builds

Click a project for its bars in every compared build; an outlined bar means it was on the critical path of that build. ‹ All projects goes back.

Copy as Markdown

⧉ Copy puts the table as you see it — the same builds, the same filter — on the clipboard as a Markdown table, ready for a pull request or a chat. In the one-project view it copies that project.

Settings

Tools › Options › SmithWorks › BuildSmith (or ⚙ in the Build Timeline window). Every option has a short description of what it does.

OptionDefault
Record buildsOn
Not recorded for:No solution is turned off.
Keep builds for:1 week
Keep labeled buildsOn
Time in the status barOn
Point out projects that are never up to dateOn
Ask for a rating on the MarketplaceOn

Clear all history (N solutions, size)… deletes the recorded builds of every solution and asks whether to keep the labeled and kept ones. At the bottom: Reset to defaults, Documentation, Rate on Marketplace and Send feedback.

Settings and the history are stored in %LocalAppData%\BuildSmith.

The BuildSmith options page
The options page.

FAQ

Does BuildSmith send any data?

No. Build times are taken from the build events of Visual Studio and kept on your computer, in %LocalAppData%\BuildSmith. No network requests, no telemetry.

Why is there no change next to the time?

There is no comparable build yet: the same kind (Build or Rebuild), configuration, platform and branch. Build once more, and the change appears.

What exactly is the critical path?

The chain of projects that the build had to wait for: each one started only after the previous one ended. Its length is the shortest the build could be with these projects, however many cores you have. Speeding up a project off the critical path does not shorten the build.

The window stays empty after a build.

Check that recording is on (⏻ in the window, Record builds in the settings) and that this solution is not in the Not recorded for list. Builds started outside Visual Studio (dotnet build on the command line) are not recorded.

Does BuildSmith slow the build down?

No. It listens to the start and end of each project that Visual Studio reports anyway and writes one small file after the build. It does not change the build or its logging.

How much disk space does the history take?

Very little: a build is a short list of projects with their times. The settings show the size next to Clear all history, and old builds go by themselves after the chosen period.

Where do I report a problem or suggest a feature?

Open an issue in the Feedback repository on GitHub — there are forms for bugs and ideas (please change private names). You can also use the Q&A tab on the Marketplace.

Changelog

1.0.0