The Package Manager was introduced 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.
"/Applications/Rhino 8.app/Contents/Resources/bin/yak"
.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
├── icon.png
└── misc\
├── README.md
└── LICENSE.txt
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 8\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.
spec
command is useful for generating the
manifest.yml file initially. Once you have one, keep it with your project and
update it for each release.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
icon: icon.png
keywords:
- something
Now that we have a manifest file, we can build the package!
> "C:\Program Files\Rhino 8\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/
├── LICENSE.txt
└── README.md
rh6_18-any
). The first part, rh6_18
, is inferred from the version of Rhinocommon.dll or Rhino C++ SDK that is referenced in the plug-in project. The second part, any
, refers to the platform that the plug-in is intended for. To build a platform-specfic package, run the build
command again with the --platform <platform>
argument, where <platform>
can be either win
or mac
.rh6*
distribution tag, it will not be installable for Rhino 7. If your plug-in also works in Rhino 7, please mark it as compatible by copying the .yak file, updating the distribution tag part of the filename (i.e. rh6_18
➡ rh7_0
) and pushing both to the package server.Congratulations! 🙌 You’ve just created a package for your Rhino plug-in.
Next Steps
Now that you’ve created a package, push it to the package server to make it available in the package manager!