Betta.Abstractions
0.3.1
dotnet add package Betta.Abstractions --version 0.3.1
NuGet\Install-Package Betta.Abstractions -Version 0.3.1
<PackageReference Include="Betta.Abstractions" Version="0.3.1" />
<PackageVersion Include="Betta.Abstractions" Version="0.3.1" />
<PackageReference Include="Betta.Abstractions" />
paket add Betta.Abstractions --version 0.3.1
#r "nuget: Betta.Abstractions, 0.3.1"
#:package Betta.Abstractions@0.3.1
#addin nuget:?package=Betta.Abstractions&version=0.3.1
#tool nuget:?package=Betta.Abstractions&version=0.3.1
Betta.Abstractions
Same silhouette. Every fish is its own. Public SDK contract for authoring Betta plugins — zero-touch Grasshopper components from attributed C# service methods.
This package contains only the attributes and marker interface needed to author a Betta plugin. The runtime (Betta.gha) is a Grasshopper plugin loaded by Rhino, not shipped inside your plugin DLL.
Quick start
Create a class library targeting
net7.0-windows(or any TFM that can referencenetstandard2.0).Reference
Betta.AbstractionswithExcludeAssets="runtime"so your DLL doesn't redistribute a copy:<PackageReference Include="Betta.Abstractions" Version="0.3.1" ExcludeAssets="runtime" />Define a service interface inheriting
IBettaCollectionand decorate it:using Betta.Attributes; using Betta.Interfaces; [GrasshopperCollection("Strings", "Text")] public interface IStringCollection : IBettaCollection { [GrasshopperMethod("Upper")] string ToUpper([GrasshopperParameter("Text")] string text); [GrasshopperMethod("Concat")] string Concat( [GrasshopperParameter("Left")] string left, [GrasshopperParameter("Right")] string right, [GrasshopperParameter("Separator")] string separator); } public class StringCollection : IStringCollection { public string ToUpper(string text) => text?.ToUpper(); public string Concat(string l, string r, string s) => l + s + r; }Build. Drop the resulting DLL into
%AppData%\Grasshopper\Libraries\Betta\. Restart Rhino — your components appear in the toolbar.
Attribute reference
| Attribute | Target | Purpose |
|---|---|---|
[GrasshopperCollection(category, subCategory)] |
interface / class | Default Category + SubCategory for every method on the type. |
[GrasshopperMethod(name)] |
method | Marks the method as a Grasshopper component. Optional: NickName, Description, Category, SubCategory, IconResource, Guid, Enabled. |
[GrasshopperParameter(name, ...)] |
parameter | Customizes input display name / nickname / description. List access is inferred from the CLR type (List<T> → list input). DefaultValue = ... seeds persistent data so unwired sockets carry your default. |
Custom icons
Ship your own PNG as an embedded resource and reference it via IconResource:
<EmbeddedResource Include="Resources\my_icon.png" />
[GrasshopperMethod("Foo", IconResource = "my_icon.png")]
double Foo(double x);
The runtime matches IconResource against any embedded resource name ending with the supplied string, so the namespace prefix isn't required. Your PNG is rendered verbatim — no tinting, no overlay text.
License
Mozilla Public License 2.0 — see the repository for details. File-level copyleft: referencing this package leaves your plugin code unaffected; only modifications to Betta's own source files must stay open.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
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.3.1 | 140 | 5/29/2026 |