3. What is Paket
• Dependency manager for .Net and mono
projects;
• Designed to use NuGet packages;
• Can also work with git/http resources and static
files;
• Alternative to VS/NuGet.exe;
• Focus on precise and predictable management
of dependencies.
https://fsprojects.github.io/Paket/index.html
4. How does it work [DEMO]
• paket.bootstrapper.exe: downloads paket.exe;
• Single paket.dependencies file per solution;
• Each project has paket.references file;
• $ paket install downloads packages, generates
paket.lock and updates project references;
• $ paket restore restores all packages;
• $ paket outdated lists all packages that have
newer versions available;
• $ paket update finds and applies new package
versions.
5. paket.dependencies
• Single place for all solution direct
dependencies;
• No transient dependencies, easier to manage;
• Not XML, easier to merge;
• Single version for each package – no version
conflicts
6. paket.references
• Single place for project dependencies;
• No transient dependencies, easier to manage;
• Not XML, easier to merge.
8. paket.lock
• Auto-generated;
• Represents complete dependency graph;
• Not changed unless changes in dependencies
or $ packet update;
• Guarantees reliable builds on any environment;
• Can be submitted with bug.
11. Package references
• Conditional references for all supported
framework versions – no package reinstalls
after target framework changes;
• No package version in hint paths – no merge
conflicts when package is updated.
14. Paket is very different from
NuGet.exe
• Real OSS, written in F#;
• CLI only;
• Explicit management of transitive dependencies;
• Embraces SemVer;
• Solution-wide dependencies;
• No version in package path;
• Stable basis with paket.lock file;
• Can reference files and projects from git repos;
• Does not support running install.ps1 files.
15. Paket is better!
• No dependency on VS;
• No package version conflicts;
• No more merge conflicts after version update;
• Can concentrate on direct dependencies only;
• Reliable and consistent packages after restore on
any environment;
• No reinstalls after target framework change;
• Can build dependencies from git repo or http
resource directly;
• And many more!
16. Different and better
• Immutable data structures vs. mutable objects
-> sane state management;
• Explicit error types and cases, errors as data
vs. exceptions -> sane error management,
function totality;
• Composition over inheritance -> sane
extensibility;
• Declarative vs. imperative -> sane developers.