FsHotWatch.Build
0.7.0-alpha.51
See the version list below for details.
dotnet add package FsHotWatch.Build --version 0.7.0-alpha.51
NuGet\Install-Package FsHotWatch.Build -Version 0.7.0-alpha.51
<PackageReference Include="FsHotWatch.Build" Version="0.7.0-alpha.51" />
<PackageVersion Include="FsHotWatch.Build" Version="0.7.0-alpha.51" />
<PackageReference Include="FsHotWatch.Build" />
paket add FsHotWatch.Build --version 0.7.0-alpha.51
#r "nuget: FsHotWatch.Build, 0.7.0-alpha.51"
#:package FsHotWatch.Build@0.7.0-alpha.51
#addin nuget:?package=FsHotWatch.Build&version=0.7.0-alpha.51&prerelease
#tool nuget:?package=FsHotWatch.Build&version=0.7.0-alpha.51&prerelease
FsHotWatch.Build
Plugin that runs a build command when source files change and emits
BuildCompleted events for downstream plugins (like test runners and
coverage checkers).
Status: early alpha, and a lot of it is AI-written. APIs shift between versions and rough edges are expected — your mileage may vary. Issues and PRs are very welcome.
Why
Without this plugin, each tool would need to trigger its own build. The BuildPlugin centralizes builds so they happen once, and downstream plugins (TestPrune) react to the result.
How it works
- You save a file
- BuildPlugin receives
FileChanged - It runs
dotnet build(or your custom command) - On completion, it emits
BuildCompleted(success or failure) - Downstream plugins like TestPrune react to the build result
The plugin guards against concurrent builds -- if a build is already running and you save again, it skips. A change to test files alone still runs a build: the tests run the compiled test assembly, so it must be rebuilt (ADR-012).
Configuration
In .fshw.json:
{
"build": {
"command": "dotnet",
"args": "build",
"buildTemplate": "dotnet build {project}"
}
}
Set "build": false to disable the build plugin entirely.
| Field | Type | Default | Description |
|---|---|---|---|
command |
string |
"dotnet" |
Build command. |
args |
string |
"build" |
Arguments to the build command. |
buildTemplate |
string |
-- | Template for incremental builds, run once per root project: of the non-test projects affected by the change, each one that no other affected non-test project depends on. {project} is replaced with that root's path. Test projects are never built by the template; when the change reaches no non-test project, the command/args build runs instead. |
CLI
# Run every check (build is part of it) and wait for it
fshw check
# Check build status without triggering a run
fshw status build
# Query the build plugin's own command directly
fshw build-status
Programmatic usage
From the FullPipelineExample:
daemon.RegisterHandler(
BuildPlugin.create
"dotnet" // command
"build" // args
[] // environment variables
daemon.Graph // project graph
[] // test project names (to skip build-only-test-changes)
None // build template
[] // dependsOn — plugins this one waits for
None // timeoutSec (None → no timeout)
)
Install
dotnet add package FsHotWatch.Build
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- FSharp.Compiler.Service (>= 43.12.402)
- FSharp.Core (>= 10.1.402)
- FSharp.Data.Adaptive (>= 1.2.26)
- FsHotWatch (>= 0.10.0-alpha.99)
- Ignore (>= 0.2.1)
- Ionide.ProjInfo (>= 0.74.2)
- Ionide.ProjInfo.FCS (>= 0.74.2)
- MessagePack (>= 2.5.303)
- StreamJsonRpc (>= 2.25.29)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.7.0-alpha.55 | 51 | 11/9/2026 |
| 0.7.0-alpha.54 | 50 | 11/8/2026 |
| 0.7.0-alpha.53 | 66 | 11/2/2026 |
| 0.7.0-alpha.52 | 71 | 10/31/2026 |
| 0.7.0-alpha.51 | 73 | 10/31/2026 |
| 0.7.0-alpha.50 | 69 | 10/29/2026 |
| 0.7.0-alpha.49 | 66 | 10/26/2026 |
| 0.7.0-alpha.48 | 65 | 10/25/2026 |
| 0.7.0-alpha.47 | 72 | 10/18/2026 |
| 0.7.0-alpha.46 | 70 | 10/16/2026 |
| 0.7.0-alpha.45 | 77 | 10/5/2026 |
| 0.7.0-alpha.44 | 77 | 9/29/2026 |
| 0.7.0-alpha.43 | 74 | 9/29/2026 |
| 0.7.0-alpha.42 | 84 | 9/25/2026 |
| 0.7.0-alpha.41 | 76 | 9/25/2026 |
| 0.7.0-alpha.40 | 84 | 9/24/2026 |
| 0.7.0-alpha.39 | 80 | 9/23/2026 |
| 0.7.0-alpha.38 | 81 | 9/20/2026 |
| 0.7.0-alpha.37 | 81 | 9/18/2026 |
| 0.7.0-alpha.36 | 79 | 9/17/2026 |