MASS4.Gaya.Attributes 3.4.0

dotnet add package MASS4.Gaya.Attributes --version 3.4.0
                    
NuGet\Install-Package MASS4.Gaya.Attributes -Version 3.4.0
                    
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="MASS4.Gaya.Attributes" Version="3.4.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="MASS4.Gaya.Attributes" Version="3.4.0" />
                    
Directory.Packages.props
<PackageReference Include="MASS4.Gaya.Attributes" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add MASS4.Gaya.Attributes --version 3.4.0
                    
#r "nuget: MASS4.Gaya.Attributes, 3.4.0"
                    
#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.
#:package MASS4.Gaya.Attributes@3.4.0
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=MASS4.Gaya.Attributes&version=3.4.0
                    
Install as a Cake Addin
#tool nuget:?package=MASS4.Gaya.Attributes&version=3.4.0
                    
Install as a Cake Tool

Gaya

Gaya is a plugin-driven desktop workbench built on Guinevere. The shell knows nothing about what it is editing: panels, commands, menus, key bindings and chrome all arrive from plugins, so the same host can be a game studio, a code editor or a 3D modeller depending on which plugins are loaded.

Assembly NuGet package Referenced by
Gaya.Attributes MASS4.Gaya.Attributes settings metadata without a UI dependency; included transitively by the SDK
Gaya.Sdk MASS4.Gaya.Sdk plugins — the contract, and the only Gaya assembly a plugin needs
MASS4.Bricks MASS4.Bricks hosts, engines and stores — brick manifests, sources, resolution, the shared store and registries
Gaya.Host — the application shell — plugin activation, workbench, docking, layout persistence

The workbench and Bricks panel assemblies are distributed as DLLs with the application.

A plugin is a class carrying [Plugin(id, displayName)] and implementing IPlugin:

[Plugin("com.example.notes", "Notes")]
public sealed class NotesPlugin : IPlugin
{
    public void Configure(IPluginContext ctx)
    {
        ctx.Services.AddSingleton<NoteStore>();
        ctx.Panels.Register(new PanelDescriptor("notes.list", "Notes", PanelPlacement.Right,
            services => new NotesPanel(services.GetRequiredService<NoteStore>())));
        ctx.Commands.Register(new CommandDescriptor("notes.new", "Notes: New Note",
            services => services.GetRequiredService<NoteStore>().Add()));
        ctx.Menus.Add(new MenuItemDescriptor(MenuIds.File, "notes.new"));
    }
}

Gaya.Plugin.Turian in the Turian repository is the reference implementation. The full contract — lifecycle, every registry, versioning policy and the boundary rules — is documented in docs/decisions/Gaya-Platform.md.

Gaya lives in the Turian repository for now and ships on Turian's version (also for now). It does not reference Turian in any direction; that boundary is enforced by a test.

Settings

Gaya.EditorSettingAttribute is the sole configuration source for built-in and user-defined settings pages. The class declares its category, stable storage id, description, order, workspace scope and hidden state; member attributes declare option labels and descriptions. Registration supplies the live instance and restores its persisted values.

[Gaya.EditorSetting("General/Performance", Id = "example.performance")]
public sealed class PerformanceSettings
{
    [Gaya.EditorSetting("Cap FPS")]
    public int CapFps { get; set; } = 60;
}

// During plugin configuration:
var preferences = new PerformanceSettings();
ctx.Services.AddSingleton(preferences);
ctx.Settings.Register(preferences);

An omitted Id derives the storage key from the type's full name. Keep an explicit id stable when renaming a settings type; changing its category does not change that key. Workspace = true stores values with the project, and Hidden = true persists a page without listing it in Settings. Turian discovers annotated user classes with public parameterless constructors after compilation and registers them through this same API.

Panel headers

A panel implements Render for its body and optionally RenderHeader for widgets in its dock group's remaining tab-strip space. Gaya invokes both on the same panel instance in both Guinevere passes. The header can contain menus, lock buttons, multiple controls or custom widgets; ordinary child layout uses the available area automatically.

public sealed class NotesPanel : IPanel
{
    public void Render(Gui gui) => gui.DrawText("Notes");

    public void RenderHeader(Gui gui, PanelHeaderContext context)
    {
        using (gui.Node().Expand().Direction(Axis.Horizontal).Enter())
            gui.DrawText("Header widgets");
    }
}

PanelHeaderContext supplies the panel instance id, translated title, available screen-space rectangle, focus state and host services. The build pass's rectangle comes from the preceding layout; use normal layout nodes for measuring widgets and handle input only during Pass2Render. Header clicks focus the panel for scoped shortcuts. Inactive tabs do not render their headers, and panel disposal also releases header-owned state. An annotated Turian user panel implementing IPanel uses these rendering methods; reference Gaya.Sdk and Guinevere from an editor-only assembly for custom rendering. Plain annotated objects continue to use reflected forms.

API migration

  • Register color themes as .pss sheets with IThemeService.Register(ThemeSource), and read their compiled colors and metrics from IThemeService.Current. The C# theme record and its registration overload have been removed.
  • Replace MASS4.Attributes.EditorSettingAttribute with Gaya.EditorSettingAttribute from MASS4.Gaya.Attributes. Use [Gaya.EditorSetting(...)] when importing both namespaces; regenerated Turian user projects provide an alias for [EditorSetting].
  • Move settings page ids, paths, descriptions, order, scope and visibility into the class attribute. Replace settings.Register(new SettingsPageDescriptor(...)) with settings.Register(instance); descriptors expose read-only metadata derived from that instance. Preserve each existing id to retain preferences.
  • Move TabStripChromeDescriptor contributions into the panel's RenderHeader method. The tab-strip registry and IPluginContext.TabStripChrome have been removed. Keep application-wide chrome contributions on IPluginContext.Chrome.
  • Replace Gaya.Packages with MASS4.Bricks: the namespace, the assembly (MASS4.Bricks.dll) and the NuGet package. Rebuild precast bricks compiled against Gaya.Packages.dll.
  • Recompile plugins and user scripts against the updated Gaya assemblies. These changes require a major release under the release policy.
Product Compatible and additional computed target framework versions.
.NET net10.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net10.0

    • No dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on MASS4.Gaya.Attributes:

Package Downloads
MASS4.Gaya.Sdk

The Gaya plugin contract: IPlugin, the plugin context and the panel, command, menu, key-binding and chrome registries a plugin contributes through. The only assembly a Gaya plugin needs to reference.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
3.4.0 0 10/24/2026
3.3.2 0 10/24/2026