What is Yak?

This guide introduces the Rhino Package Manager (a.k.a. Yak).

Overview

Yak is a package manager for the Rhino ecosystem. Yak assists in the discovery, installation, and management of Rhino and Grasshopper resources. Examples include plug-ins, components, scripts, and material definitions.

Yak has several goals.

  • Make it easier for users to discover and manage plug-ins and more
  • Help developers to share their work
  • Provide simple system administration tools

Not wanting to reinvent the wheel, we’ve taken inspiration from Linux and the software development world. The package management system can be broken down into three main areas.

  1. Server
  2. Integrations
  3. Command line tool

Server

The package server is the heart of the system. Once created, packages are pushed to the server to share them with others. It keeps the packages organised for its clients – the command line tool and Rhino (via integrations).

Integrations

Integrations provide direct access to the package ecosystem from inside of Rhino. Currently this has been done in two ways; “package restore” for Grasshopper and the package manager UI.

Package restore for Grasshopper

The Rhino Package Manager has been integrated into Grasshopper’s “Unrecognized Objects” dialog, providing package restore functionality. When opening a new file which contains components from a plug-in not installed on the machine, the user is given the option to check the package server for the missing plug-ins and install them directly.

Package restore for Grasshopper

Package Manager UI

The package manager UI (work-in-progress) is currently avilable via the TestPackageManager command. It provides a NuGet-style interface that allows users to search for packages, install them and see if any updates are avilable to currently installed packages.

The package manager UI in Rhino 6

Command Line Tool

The command line tool provides a basic interface but with full functionality. It is modelled on well known domain-specific package managers such as Ruby’s gem and Python’s pip. It communicates with the server as well as hooking into Rhino Accounts for authentication.