Rhino.Scripting 0.5.1

.NET Framework 4.8
dotnet add package Rhino.Scripting --version 0.5.1
NuGet\Install-Package Rhino.Scripting -Version 0.5.1
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Rhino.Scripting" Version="0.5.1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Rhino.Scripting --version 0.5.1
#r "nuget: Rhino.Scripting, 0.5.1"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Rhino.Scripting as a Cake Addin
#addin nuget:?package=Rhino.Scripting&version=0.5.1

// Install Rhino.Scripting as a Cake Tool
#tool nuget:?package=Rhino.Scripting&version=0.5.1


code size license


Rhino.Scripting is an implementation of the RhinoScript syntax in and for F# (and C#). Before this repo the high level Rhino-scripting API was only available for VBScript and Python. This repo enables the use of the RhinoScriptSyntax in F# and C# together with all the great coding experience and editor tooling that come with F# and C#, like:

  • automatic code completion while typing.
  • automatic error checking and highlighting in the background.
  • type info on mouse over.
  • type safety even without type annotation ( = type inference in F#).

What is RhinoScript ?

RhinoScript provides application scripting for the Rhino3D CAD app.
RhinoScript has more than 900 functions to control all kind of aspects of automating Rhino3D.
It was originally implemented in 2002 in VBScript.
Extensive Documentation on the original VBScript based version is available here.

In 2010 all functions from RhinoScript where reimplemented in IronPython (Python running on .NET).
This allowed the use of a modern, rich and dynamically typed programming language with a huge standard library and also access to all function of the underlying .NET Framework as well as the RhinoCommon SDK.

What is this repo?

This repo has all RhinoScript functions reimplemented in F#
It is literally a translation of the open source Ironpython rhinoscriptsyntax implementation to F#.
Fuget.org is a good tool to explore the 900 methods in this repo.

A few minor bugs from the python implementation are fixed and a few extra methods and optional parameters where added. I have been using this library extensively for my own professional scripting needs since 2019. If you have problems, questions or find a bug, please open an issue.

Get started in C#

The recommended scripting use case is via the new RhinoCode Editor in Rhino 8.
However you can use this library just as well in compiled F#, C# or VB.net projects. First reference the assemblies.

#r "nuget: FSharp.Core, 7.0.0"
#r "nuget: FsEx, 0.13.1"
#r "nuget: Rhino.Scripting, 0.5.1"

The main class of this library is called Rhino.Scripting it has all ~900 functions as static methods. In C# you can create an alias like this:

using rs = Rhino.Scripting;

then you can use it like the RhinoScriptSyntax in Python:

var pt =  rs.GetObject("Select an Object");
rs.ObjectColor(pt, System.Drawing.Color.Blue);

Get started in F#

I will soon publish an F# scripting editor for Rhino. The prototype is working well.

First reference the assemblies.

#r "nuget: Rhino.Scripting, 0.5.1"

The main class of this library is called Rhino.Scripting it has all ~900 functions as static methods. In F# you can create an alias like this:

type rs = Rhino.Scripting  

then use any of the RhinoScript functions like you would in Python or VBScript.
The CoerceXXXX functions will help you create types if you are too lazy to fully specify them.

let pl = rs.CoercePlane(0 , 80 , 0) // makes World XY plane at point
rs.AddText("Hello, Seff", pl, height = 50.)

How about the dynamic types and optional parameters from VBScript and Python?

Many RhinoScript function take variable types of input parameters. This is implemented with method overloads. Many RhinoScript function have optional parameters. These are also implemented as optional method parameters.

Change Log


  • fix readme
  • improve finding of SynchronizationContext


  • fix threading bug in to make it work in RhinoCode
  • fix typos


  • remove WPF dependency
  • don't return F# options anymore


  • first public release
Product Versions
.NET Framework net48 net481
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.5.1 117 2/20/2023
0.5.0 105 2/18/2023
0.4.0 151 1/21/2023
0.3.0 189 12/3/2022
0.2.0 195 11/25/2022

- improve finding of SynchronizationContext