{"id":25127863,"url":"https://github.com/remora/remora.resonite.sdk","last_synced_at":"2025-04-23T14:36:20.322Z","repository":{"id":198037144,"uuid":"699921454","full_name":"Remora/Remora.Resonite.Sdk","owner":"Remora","description":"A .NET SDK for developing Resonite mods and plugins","archived":false,"fork":false,"pushed_at":"2024-09-04T16:15:43.000Z","size":92944,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-16T09:58:53.657Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Remora.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-03T15:44:50.000Z","updated_at":"2025-02-23T01:08:47.000Z","dependencies_parsed_at":"2023-10-04T06:13:30.530Z","dependency_job_id":"ac4f9c30-8e23-45ed-ba87-1e98d13f7a2e","html_url":"https://github.com/Remora/Remora.Resonite.Sdk","commit_stats":null,"previous_names":["remora/remora.resonite.sdk"],"tags_count":41,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Remora%2FRemora.Resonite.Sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Remora%2FRemora.Resonite.Sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Remora%2FRemora.Resonite.Sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Remora%2FRemora.Resonite.Sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Remora","download_url":"https://codeload.github.com/Remora/Remora.Resonite.Sdk/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250453504,"owners_count":21433211,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-08T11:19:37.797Z","updated_at":"2025-04-23T14:36:20.301Z","avatar_url":"https://github.com/Remora.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"Remora.Resonite.Sdk\n==========\n\nRemora.Resonite.Sdk is an MSBuild SDK made to simplify development of Resonite plugins\n\n## Feature Highlights\n* Supports both plugins and mods (via ResoniteModLoader)\n* Supports the main and headless clients\n* Does not require Resonite to be installed\n* `dotnet publish` generates a pre-formatted .zip file, ready for release\n* `dotnet build` optionally installs the artifacts to Resonite\n* Easily debug right from your IDE!\n\n## Usage\nThe SDK is made available via NuGet, and usage is as simple as using it in place\nof the standard .NET SDK. You can also configure the project type and the target\nversion of Resonite you want to build content for.\n\n```xml\n\u003cProject Sdk=\"Remora.Resonite.Sdk/1.0.0\"\u003e\n    \u003cPropertyGroup\u003e\n        \u003cResoniteProjectType\u003emod\u003c/ResoniteProjectType\u003e\n        \u003cResoniteTarget\u003eclient\u003c/ResoniteTarget\u003e\n    \u003c/PropertyGroup\u003e\n\u003c/Project\u003e\n```\n\nNote that you do not need to define the target framework(s); the SDK defaults to\nthe target framework that the chosen version of Resonite uses.\n\n## Feature Breakdown\nThe following sections dive into each feature category that the SDK handles.\nGenerally, the SDK defines or implements features within each category in an\noverridable or non-overridable way; non-overridable features are defined after\nuser definitions, and overwrite any value you set.\n\nProperties marked with an asterisk (`*`) are defined by Remora.Resonite.Sdk and are \nnot part of the standard set of properties exposed by MSBuild or \nMicrosoft.NET.Sdk.\n\n### Targeting\nThe following properties are defined by the SDK.\n\n| Property             | Value  | Overridable |\n|----------------------|--------|-------------|\n| TargetFramework      | net462 | Yes         |\n| ResoniteProjectType* | mod    | Yes         |\n| ResoniteTarget*      | client | Yes         |\n\n`ResoniteProjectType` can be set to `plugin`, `mod`, `library`or `standalone`. In the case of\nmods, a reference to `ResoniteModLoader` will be automatically added as well.\n\n`ResoniteTarget` can be set to either `client` or `headless`. The latter is for the\nserver version of Resonite which does not have any graphics, while the former is\nthe normal version.\n\n`standalone` projects build freestanding executables instead of additions to the\nofficial Resonite clients - this can be used to build tools and utilities that\nwork with the Resonite ecosystem outside of direct client interaction.\n\n### Building\nThe following properties are defined by the SDK.\n\n| Property                          | Value                               | Overridable |\n|-----------------------------------|-------------------------------------|-------------|\n| ResonitePath*                     | $(MSBuildProjectDirectory)/Resonite | Yes         |\n| ResoniteInstallOnBuild*           | false                               | Yes         |\n| ResoniteReferencePath*            | (internal)                          | Yes         |\n| ResoniteForceReferenceAssemblies* | false                               | Yes         |\n\n`ResonitePath` defaults to looking for a live installation of Resonite in the project\ndirectory, and then proceeds to check common system installation paths. If you\nhave installed Resonite in a non-standard location, you can use this property to\nconfigure it. It is not required for `ResonitePath` to point to a real installation;\nthe SDK will work just fine without one.\n\nIf `ResoniteInstallOnBuild` is set to `true`, the produced build artifacts will be \ncopied to your Resonite installation directory whenever the project is built or \npublished. This can be combined with an IDE and a debugger to quickly and easily\ntest your mod without having to go through the steps of manually moving things \nover whenever you've made modifications.\n\nRemora.Resonite.Sdk bundles Resonite's API in the form of reference assemblies, which\nenable installation-free compilation for all four supported project variants.\nYou can control the location where these assemblies are loaded from with \n`ResoniteReferencePath` if you don't want to use the ones bundled with the SDK.\n\nIf you do have Resonite installed, the real assemblies from the installation\ndirectory will be preferentially chosen. If you don't want this, you can set\n`ResoniteForceReferenceAssemblies` to `true` in order to disable that behaviour and \nalways use the reference assemblies in `ResoniteReferencePath`.\n\n### References\nRemora.Resonite.Sdk extends the normal msbuild `PackageReference` and \n`ProjectReference` items with a third option: `ResoniteReference`. This reference \ntype can be used to add references to assemblies either available through the \nreference assemblies or directly in Resonite's installation directory. For \nexample, to add a reference to `BaseX`, you would simply add this to your \nproject file.\n\n```xml\n\u003cItemGroup\u003e\n    \u003cResoniteReference Include=\"BaseX\"/\u003e\n\u003c/ItemGroup\u003e\n```\n\n`PackageReference` items are also fully supported, meaning you can use any \ncompatible library on nuget when developing your project. The required \nassemblies will be copied to the appropriate directory depending on your project\ntype.\n\n### Compile-time Constants\nThe SDK also defines a set of compile-time constants which you can use if your \nproject needs to know certain information about the target environment it's \nbeing compiled for.\n\n| Name                | Description                                           |\n|---------------------|-------------------------------------------------------|\n| RESONITE_MOD        | defined if `'$(ResoniteProjectType)' == 'mod'`        |\n| RESONITE_PLUGIN     | defined if `'$(ResoniteProjectType)' == 'plugin'`     |\n| RESONITE_LIBRARY    | defined if `'$(ResoniteProjectType)' == 'library'`    |\n| RESONITE_STANDALONE | defined if `'$(ResoniteProjectType)' == 'standalone'` |\n| RESONITE_CLIENT     | defined if `'$(ResoniteTarget)' == 'client'`          |\n| RESONITE_HEADLESS   | defined if `'$(ResoniteTarget)' == 'headless'`        |\n\nThese can be useful if you want to support both the headless and the normal \nclient but need to use specialized API surfaces in either target.\n\n# Assembly Attributes\nSince knowing the Resonite version something was built against can be useful in\nseveral instances, the version is embedded into your assemblies as an assembly\nattribute.\n\nNo matter your project type, the following attributes are always defined.\n\n| Name             | Parameters                                          |\n|------------------|-----------------------------------------------------|\n| AssemblyMetadata | Key = \"ResoniteVersion\", Value = \"$CURRENT_VERSION\" |\n\n### Publishing\nThe following properties are defined by the SDK.\n\n| Property                       | Value                             | Overridable |\n|--------------------------------|-----------------------------------|-------------|\n| ResoniteGenerateReleaseArchive | `'$(Configuration)' == 'Release'` | Yes         |\n\n`dotnet publish` has been extended to both generate a proper directory structure\nin the output directory, but also to create a .zip file suitable for direct \nunpacking into a Resonite installation. The archive can be uploaded as part of a \ngithub release or other distribution process.\n\nYou can disable this behaviour by setting `ResoniteGenerateReleaseArchive` to \n`false`.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremora%2Fremora.resonite.sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fremora%2Fremora.resonite.sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremora%2Fremora.resonite.sdk/lists"}