# What benefits do FAKE and PAKET provide over traditional ways?

**URL:** <https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292>\
**Category:** General\
**Created:** [June 15, 2018, 5:34pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292 "2018-06-15T17:34:57Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![KarandikarMihir](https://avatars.discourse-cdn.com/v4/letter/k/82dd89/32.png) [@KarandikarMihir](https://forums.fsharp.org/u/KarandikarMihir)\
**Post date:** [June 15, 2018, 5:34pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/1 "2018-06-15T17:34:57Z")

</div>

I’m pretty new to F# and I’m trying to build something using Saturn framework. They’re using ProjectScaffold and in turn FAKE for building, paket for package management.

Why do you think these 2 utilities would help me over traditional ways? What problems do they solve? I did not find any answer on their official websites so I thought I should start a discussion here.

EDIT: By traditional ways I mean running `dotnet build` and `dotnet restore` commands.

EDIT 2: I found these 2 related articles which talk about having a custom build system in every project:

[http://zutubi.com/products/pulse/articles/buildenlightenment/](http://zutubi.com/products/pulse/articles/buildenlightenment/)  
[https://blog.codinghorror.com/the-f5-key-is-not-a-build-process/](https://blog.codinghorror.com/the-f5-key-is-not-a-build-process/)

---

<div class="post-metadata">

**Author:** ![chethusk](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/chethusk/32/11_2.png) [@chethusk](https://forums.fsharp.org/u/chethusk)\
**Post date:** [June 15, 2018, 5:39pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/2 "2018-06-15T17:39:18Z")

</div>

At least for Paket this is a question that has been addressed in the FAQ: [https://fsprojects.github.io/Paket/faq.html#I-do-not-understand-why-I-need-Paket-to-manage-my-packages-Why-can-t-I-just-use-NuGet-exe-and-packages-config](https://fsprojects.github.io/Paket/faq.html#I-do-not-understand-why-I-need-Paket-to-manage-my-packages-Why-can-t-I-just-use-NuGet-exe-and-packages-config)

---

<div class="post-metadata">

**Author:** ![ChrisPritchard](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/chrispritchard/32/254_2.png) [@ChrisPritchard](https://forums.fsharp.org/u/ChrisPritchard)\
**Post date:** [June 15, 2018, 8:11pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/3 "2018-06-15T20:11:59Z")

</div>

It looks like to me they both offer more customisation than the standard options, which becomes increasingly important if your project gets large and complicated. Paket allows managing diverse sets of dependencies for example, avoiding (or allowing you to avoid) the annoying version mismatch errors you get with Nuget when you have multiple projects referencing the same library, but different versions.

My personal approach is that if you use dotnet core, just stick with the defaults until you have a need for something more customisable: all my F# work uses MSBuild and Nuget without issue. But I also do most of my F# dev at the low-to-medium size: rarely more than two or three projects, and only half a dozen nuget dependencies (I use CoreRT a bit, and more dependencies means more reflection and more rd.xml issues).

---

<div class="post-metadata">

**Author:** ![et1975](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/et1975/32/255_2.png) [@et1975](https://forums.fsharp.org/u/et1975)\
**Post date:** [June 15, 2018, 8:30pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/4 "2018-06-15T20:30:03Z")

</div>

TLDR version:  
Paket works really hard to offer “reproducible builds”.  
FAKE offers single point of entry for entire build automation.

Both of those aspects are extremely valuable when working with others and are available in every modern ecosystem. They predate `dotnet` and go above and beyond the capabilities of `dotnet`.

---

<div class="post-metadata">

**Author:** ![charlesroddie](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/charlesroddie/32/45_2.png) [@charlesroddie](https://forums.fsharp.org/u/charlesroddie)\
**Post date:** [June 15, 2018, 10:22pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/5 "2018-06-15T22:22:53Z")

</div>

Basic advice to beginners: ignore these projects. These are for advanced use when you have sophisticated build needs (FAKE) or if you run into limitations of Nuget (Paket).

---

<div class="post-metadata">

**Author:** ![chethusk](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/chethusk/32/11_2.png) [@chethusk](https://forums.fsharp.org/u/chethusk)\
**Post date:** [June 16, 2018, 12:15am UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/6 "2018-06-16T00:15:39Z")

</div>

One caveat to @charlesroddie’s advice(which is sound): if scripts are a large part of your work flow you’ll find that paket if very helpful. You can have it generate an fsx file with your dependencies in proper include order and forget the painful path munging that you used to do.

In addition, if distribution of scripts is a concern, FAKE 5 is a fantastic script runner that has performance benefits over fsi when used, laregly due to script compilation and caching.

---

<div class="post-metadata">

**Author:** ![KarandikarMihir](https://avatars.discourse-cdn.com/v4/letter/k/82dd89/32.png) [@KarandikarMihir](https://forums.fsharp.org/u/KarandikarMihir)\
**Post date:** [June 16, 2018, 6:11am UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/8 "2018-06-16T06:11:21Z")

</div>

Thank you all for the answers.

Beginners like me, haven’t really run into any nuget package version conflicts. I guess I’ll just go with FAKE and PAKET because I already know the traditional ways. They seem very cool utilities to learn.

---

<div class="post-metadata">

**Author:** ![KarandikarMihir](https://avatars.discourse-cdn.com/v4/letter/k/82dd89/32.png) [@KarandikarMihir](https://forums.fsharp.org/u/KarandikarMihir)\
**Post date:** [June 16, 2018, 6:11am UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/9 "2018-06-16T06:11:58Z")

</div>

Thanks! I completely missed that. I feel dumb now.

---

<div class="post-metadata">

**Author:** ![isaacabraham](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/isaacabraham/32/52_2.png) [@isaacabraham](https://forums.fsharp.org/u/isaacabraham)\
**Post date:** [June 24, 2018, 10:35pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/10 "2018-06-24T22:35:18Z")

</div>

I also did a blog series on Paket last year [here](https://cockneycoder.wordpress.com/2017/08/07/getting-started-with-paket-part-1/). It’s a little out of date now (it didn’t really address how Paket works in .NET Core land) but covers the main benefits that Paket brings.

---

<div class="post-metadata">

**Author:** ![KarandikarMihir](https://avatars.discourse-cdn.com/v4/letter/k/82dd89/32.png) [@KarandikarMihir](https://forums.fsharp.org/u/KarandikarMihir)\
**Post date:** [July 4, 2018, 2:32pm UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/11 "2018-07-04T14:32:56Z")

</div>

Awesome! Thanks for sharing the link.

---

<div class="post-metadata">

**Author:** ![vivainio](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/vivainio/32/76_2.png) [@vivainio](https://forums.fsharp.org/u/vivainio)\
**Post date:** [July 6, 2018, 7:41am UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/12 "2018-07-06T07:41:35Z")

</div>

Yeah, I think the main question is what Paket actually does with the new project system with . Advantages with the old style project system are pretty clear already, but I figure how the new style system works are pretty opaque to lots of folks (can’t go with “it works magically” when you have larger source trees).

---

<div class="post-metadata">

**Author:** ![isaacabraham](https://yyz2.discourse-cdn.com/flex030/user_avatar/forums.fsharp.org/isaacabraham/32/52_2.png) [@isaacabraham](https://forums.fsharp.org/u/isaacabraham)\
**Post date:** [July 6, 2018, 8:58am UTC](https://forums.fsharp.org/t/what-benefits-do-fake-and-paket-provide-over-traditional-ways/292/13 "2018-07-06T08:58:05Z")

</div>

It provides the same benefits as before. If anything, it provides more, since the new PackageReference doesn’t let you lock transitives at all, which you at least had with the packages.config file to a certain degree. Paket integrates pretty great with the new project system - and there’s no need to rewrite csproj / fsproj files with references nodes any more either.
