# Creating a Rhino Plug-In Package

This is a step by step guide to creating a package for a Rhino plug-in (.rhp).

The Package Manager is a new feature in Rhino 7. It makes it easier to discover, install and manage Rhino plug-ins from within Rhino. This guide will describe how to create a package from a Rhino plug-in that can be published to the package server.

First, let’s assume you have a folder on your computer which contains all the files that you would like to distribute in your package. Something like this…

C:\Users\Bozo\dist
├── Tamarin.rhp
├── Tamarin.dll
└── misc\


We’re going to use the Yak CLI tool to create the package, so open up a Command Prompt and navigate to the directory above.

> cd C:\Users\Bozo\dist


Now, we need a manifest.yml file! You can easily create your own by studying the Manifest Reference Guide. Alternatively, you can use the spec command to generate a skeleton file. We’ll do the latter here.

> "C:\Program Files\Rhino 7\System\Yak.exe" spec

Inspecting content: Tamarin.rhp

---
name: tamarin
version: 1.0.0
authors:
- Park Ranger
description: An example RhinoCommon plug-in
url: https://example.com

Saved to C:\Users\Bozo\dist\manifest.yml


The spec command takes a look at the current directory and, if present, will glean useful information from the .rhp assembly and use it generate a manifest.yml with name, version, description etc. pre-populated. If you haven’t added this information, then placeholders will be used.

The RhinoCommon plug-in inspector extracts the assembly attributes that you set when creating your plug-in. The AssemblyInformationalVersion attribute is used to populate the version field, since this attribute isn’t bound to the Microsoft four-digit version spec and can contain a SemVer-compatible version string. The AssemblyVersion attribute is used as a fallback.

Next, open the manifest file with your favourite editor and fill in the gaps.

Afterwards, you should have something that looks a little like this…

---
name: tamarin
version: 1.0.0
authors:
- Park Ranger
description: >
This plug-in does something. I'm not really sure exactly what it's supposed to
do, but it does it better than any other plug-in.
url: https://example.com
keywords:
- something


Now that we have a manifest file, we can build the package!

> "C:\Program Files\Rhino 7\System\Yak.exe" build

Building package from contents of C:\Users\Bozo\dist

Found manifest.yml for package: tamarin (1.0.0)
Inspecting content: Tamarin.rhp
Creating tamarin-1.0.0-rh6_18-any.yak

---
name: tamarin
version: 1.0.0
authors:
- Will Pearson
description: >
This plug-in does something. I'm not really sure exactly what it's supposed to
do, but it does it better than any other plug-in.
url: https://example.com
keywords:
- something
- guid:c9beedb9-07ec-4974-a0a2-44670ddb17e4

C:\Users\Bozo\dist\tamarin-1.0.0-rh6_18-any.yak
├── Tamarin.dll
├── Tamarin.rhp
├── manifest.yml
└── misc/