Marey.Toolchain 0.7.0

dotnet add package Marey.Toolchain --version 0.7.0
                    
NuGet\Install-Package Marey.Toolchain -Version 0.7.0
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Marey.Toolchain" Version="0.7.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Marey.Toolchain" Version="0.7.0" />
                    
Directory.Packages.props
<PackageReference Include="Marey.Toolchain" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Marey.Toolchain --version 0.7.0
                    
#r "nuget: Marey.Toolchain, 0.7.0"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Marey.Toolchain@0.7.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Marey.Toolchain&version=0.7.0
                    
Install as a Cake Addin
#tool nuget:?package=Marey.Toolchain&version=0.7.0
                    
Install as a Cake Tool

Marey.Toolchain

External-program resolution and invocation for Marey, a dimensionally-typed visualization system for F#. A tool is resolved and reported, or it is absent and the absence names what to install.

#r "nuget: Marey.Toolchain"

open Marey

let ffmpeg = Toolchain.resolve "ffmpeg, from your package manager" "ffmpeg"

printfn "%s" (Toolchain.report "nothing was encoded" ffmpeg)

match Toolchain.runArgs ffmpeg [ "-version" ] "." 20_000 with
| ToolRan run -> printfn "%d: %s" run.ExitCode run.Out
| ToolUnavailable why -> printfn "%s" why
| ToolTimedOut why -> printfn "%s" why

Marey drives programs it does not ship — pdflatex for the TikZ goldens, pdftoppm for the ink gate, ffmpeg for video. This is the one place that answers "is it there?", and the wording of "it is not installed" is part of what it implements. It exists because that question had been answered five times in four files, in three different registers, and a reader had to know which one printed which.

Zero dependencies, deliberately. The packages that consume this already drag a toolchain each; the module that reports their absence must not be a third thing to install.

What is in it

  • Toolchain.onPath — a hand-rolled PATH walk rather than a shell-out to where/which, because those are themselves external tools and their absence would be reported as the absence of the thing being looked for.

  • ResolvedTool, carrying the install sentence rather than deriving it: the right thing to say differs per tool and per platform.

  • Toolchain.run / runArgs, which capture both streams and drain them concurrently — reading one to the end and then the other deadlocks as soon as the child fills the second pipe's buffer, which is to say on the run that finally had enough errors to be worth reading. Prefer runArgs whenever an argument is a path: ProcessStartInfo.Arguments is re-split using Windows' quoting rules on every platform, and a vector needs no quoting.

  • ToolOutcome, three cases and not a Result: "not installed", "timed out" and "ran and exited" call for different behaviour at every call site, and collapsing them is how a gate goes quietly vacuous.

  • The repository

Product 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 netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on Marey.Toolchain:

Package Downloads
Marey.Tools.Tex

Mathematical typesetting for Marey figures: TeX source on a scene's text runs becomes vector outlines, by shelling out to latex and dvisvgm. Degrades to plain text when TeX is absent.

Marey.Tools.Video

Encode a rendered frame sequence to video by shelling out to ffmpeg. Degrades to the numbered frames when ffmpeg is absent.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.7.0 144 10/17/2026
0.6.0 127 10/11/2026
0.5.0 142 10/10/2026
0.4.0 146 10/8/2026
0.3.1 147 10/5/2026
0.3.0 142 10/5/2026