Please feel free to improve this doc by issuing pull request here


So you want be be enabled to contribute ? You want to become a cool hipster who hack around for profit and for fun ?

As it can be hard to know where to start with all those cool things going on, we thought it might be useful to tell you which equipment we think is useful to hack around F# projects on the spot in a way that fits the practice of the community.

We found that those tools, or some equivalent that you might find and fulfill the same functions, were useful.

dotnet runtime

You can use either the microsoft or the mono runtime. but since mono is actually a strong goal, and that now works very well, we do recommend you get mono. Don’t feel constrained by that : we want to test our stuff with different environments, so everyone is happy with the variations !

dependency management

A project might depend some other project that might itself depend on etc…

This is a recurring problem in any langage that is very recommended to nail once and for all. Java has Maven, Ruby has the awesome Bundler, Macs have the awesome brew, and Dotnet has Nuget 1

With it, you only version control a small file, “packages.config”, and not the actual dependencies. This file contains the necessary instruction to locate a specific version of your dependencies.

You can then install them using the command

nuget install packages.config -o Packages

That stays the same on mono provided you alias an executable file named ‘nuget’ (chmod +x nuget…) in your path to contain

#!/bin/sh
export EnableNuGetPackageRestore=true
exec /usr/bin/mono --runtime=v4.0.30319 --gc=sgen /usr/bin/NuGet.exe "$@"

Getting the binary Nuget.exe is a bit tricky, and is explained here. (once I downloaded the command line exe, I had to run mono /yourpath/nuget.exe, then get the file located in /Users/me/.local/share/NuGet/NuGet.exe - which is generated by the previous run - and use this nuget.exe and not the original one)

This is really worth it, as you now liberated yourself form handling manual upgrade.2.

build system :

Fake seems to be used by the cool young hipster with long hair. If you know rake, you know the value of such a tool, whose role go beyond just build.

However, using xbuild or other tool is good too.


  1. Personnaly, I don’t touch a langage without a dependency management system.

  2. you can also meditate, if you so feel, at the many places where we have dependency management at the different levels of a codebase. Namespaces, runtime assumption.. can interface and typeclasses be seen as proividing a dependency repository ? could we have a composable flow of dependency resolution instead of assembly wide or system wide validity ?