Xake 3.3.0.20
dotnet add package Xake --version 3.3.0.20
NuGet\Install-Package Xake -Version 3.3.0.20
<PackageReference Include="Xake" Version="3.3.0.20" />
<PackageVersion Include="Xake" Version="3.3.0.20" />
<PackageReference Include="Xake" />
paket add Xake --version 3.3.0.20
#r "nuget: Xake, 3.3.0.20"
#:package Xake@3.3.0.20
#addin nuget:?package=Xake&version=3.3.0.20
#tool nuget:?package=Xake&version=3.3.0.20
Xake is a build utility that uses the full power of the F# programming language. Xake is inspired by shake build tool.
Sample script
The simple script looks like:
#r "nuget: Xake"
open Xake
open Xake.Dotnet
do xakeScript {
"main" <== ["helloworld.exe"]
"helloworld.exe" ..> csc {
targetfwk "net-4.6.2"
src !!"helloworld.cs"
grefs ["System.dll"]
}
}
This script compiles helloworld assembly from helloworld.cs file, on any OS. Rules are written
straight in the body of xakeScript — no rules [ ... ] wrapper needed.
The single Xake package contains both the engine (Xake, Xake.Tasks) and the tasks for the
full .NET Framework (Xake.Dotnet) — one reference is enough.
Getting started
Make sure dotnet SDK 8.0 or newer is installed. Save any of the scripts below as build.fsx
and run it with dotnet fsi build.fsx — Xake comes from NuGet, there is nothing else to
install.
1. Hello world
The smallest useful script: one phony rule, printing a message. main is the default target,
so no arguments are needed.
#r "nuget: Xake"
open Xake
do xakeScript {
"main" => trace Message "Hello world!"
}
2. A rule that produces a file
..> declares a file target. The recipe writes the target file, and main demands it —
targets are built on demand, and only the ones that are actually needed.
#r "nuget: Xake"
open Xake
open Xake.Tasks
do xakeScript {
"main" => need ["out/hello.txt"]
"out/hello.txt" ..> writeText "Hello world!"
"clean" => rm { dir "out" }
}
dotnet fsi build.fsx # builds "main"
dotnet fsi build.fsx -- -- clean
3. A recipe with dependencies
A recipe { ... } is a sequence of steps. Anything it reads through Xake — readText here —
is recorded as a dependency, so the target is rebuilt when, and only when, one of its inputs
changes.
#r "nuget: Xake"
open Xake
open Xake.Tasks
do xakeScript {
"main" => need ["out/hello.txt"]
"out/hello.txt" ..> recipe {
// records name.txt as a dependency of this target
let! name = readText "name.txt"
do! trace Info "greeting %s" (name.Trim())
do! writeText $"Hello, {name.Trim()}!"
}
"clean" => rm { dir "out" }
}
Create name.txt next to the script and run it twice: the second run reports
Skipped main (up to date). Change name.txt and it rebuilds.
More samples
git clone https://github.com/OlegZee/Xake
cd xake
dotnet fsi build.fsx -- -- build # features.fsx and fullframework.fsx use the local build
cd samples
dotnet fsi gettingstarted.fsx
dotnet fsi features.fsx
dotnet fsi fullframework.fsx
Further reading
- See the features.fsx script for various samples.
- See docs/tasks.md for the task reference and docs/dotnet-build.md for building .NET Framework targets.
- We have the introduction page for you to learn more about Xake.
- And there're the documentation notes for more details.
Build the project
Once you cloned the repository you are ready to compile and test the binaries:
dotnet fsi build.fsx -- -- build test
... or use build.cmd (build.sh) in the root folder.
Releases are published to nuget.org by CI from a v* tag — see
docs/devprocess.md for the packaging and release procedure.
Building .NET Framework targets
The csc, fsc, msbuild and resgen tasks build full-framework binaries on any OS with
nothing installed beyond the .NET SDK: the compilers come from the SDK and the reference
assemblies from the Microsoft.NETFramework.ReferenceAssemblies.* packages, restored on first
use. Mono is still supported as a fallback and can be requested explicitly with a mono-
prefixed framework name.
See docs/dotnet-build.md for the discovery rules, the supported runtimes, and how to switch between them.
Documentation
See documentation for more details.
References
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. 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. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETFramework 4.6.2
- FSharp.Core (>= 8.0.100)
- System.ValueTuple (>= 4.6.2)
-
.NETStandard 2.0
- FSharp.Core (>= 8.0.100)
- Microsoft.Win32.Registry (>= 5.0.0)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Xake:
| Package | Downloads |
|---|---|
|
Xake.Dotnet
Xake build tool tasks for full .NET framework |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 3.3.0.20 | 88 | 9/5/2026 |
| 3.2.0.19 | 139 | 6/2/2026 |
| 3.1.0.18 | 141 | 5/4/2026 |
| 3.0.1.17 | 168 | 3/18/2026 |
| 3.0.0.16 | 201 | 3/16/2026 |
| 2.9.7.15 | 178 | 3/12/2026 |
| 2.9.6.14 | 195 | 3/11/2026 |
| 2.9.5.13 | 182 | 3/10/2026 |
| 2.9.0.12 | 117 | 3/9/2026 |
| 2.5.0.11 | 130 | 3/2/2026 |
| 2.3.0.9 | 256 | 6/29/2025 |
| 2.2.0.5 | 335 | 2/23/2024 |
| 2.1.3.4-beta | 215 | 2/23/2024 |
| 2.1.0 | 224 | 2/22/2024 |
| 2.0.0 | 258 | 2/21/2024 |
| 1.1.4.427-beta | 1,673 | 5/15/2018 |
| 1.1.3.425-beta | 1,389 | 5/15/2018 |
| 1.1.2.423-beta | 1,415 | 5/14/2018 |
| 1.1.1.421-beta | 1,128 | 5/14/2018 |
| 1.1.0.413-alpha | 1,467 | 5/13/2018 |