truetruefalsefalse
================================================
FILE: CHANGELOG.md
================================================
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0). Note that this project does not follow
semantic versioning but uses version numbers based on JetBrains [Rider](https://www.jetbrains.com/rider/) releases.
This plugin contains a plugin for the Unreal Editor (RiderLink) that is used to communicate with Rider. Changes marked
with a "Rider:" prefix are specific to Rider, while changes for the Unreal Editor plugin are marked with a "Unreal
Editor:" prefix. No prefix means that the change is common to both Rider and ReSharper.
The plugin is always bundled with Rider.
## [Unreleased]
## [2023.1.0.282]
### Fixed
- [RIDER-93789](https://youtrack.jetbrains.com/issue/RIDER-93789)
## [2023.1.0.188]
### Fixed
- Navigating from Rider to Unreal Editor for DataAssets
## [2022.3.0.200]
### Changed
- Add option to specify intermediate folder for building RiderLink plugin (File | Settings | Languages & Frameworks | Unreal Engine).
- If you have non-ASCII symbols in the path, your RiderLink build might fail.
- Add option to specify behavior of the auto-update
- Select between automatically building and installing plugin, or simply extracting sources of RiderLink and building them yourselves
- Extracting plugin might be a better option for RiderLink installed in the Game projects, or Engine project built from the sources
### Fixed
- Support installing RiderLink into the pre-built version of the UE5 (eg installed through Epic Games Launcher)
- From now on, RiderLink will be installed in the `Engine/Plugins/Marketplace/Developer/RiderLink` folder, if you chose to install it in the Engine
- Initially, RiderLink will be installed into `Plugins/Developer/RiderLink` for Game project and `Engine/Plugins/Marketplace/Developer/RiderLink` for Engine project, but if you wish to move it to another folder, Rider will take into the account the new location and will be updating the plugin in place.
## [2022.3.0.178]
### Changed
- Disable installation to Engine for UE 5
- [RIDER-71374](https://youtrack.jetbrains.com/issue/RIDER-71374)
- Unreal log panel was made more consistent with output log window in Unreal Editor
- Log categories are now sorted in popup ([RIDER-61132](https://youtrack.jetbrains.com/issue/RIDER-61132))
- Log verbosity and category popups do not hide on item toggling
- Full log messages are colorized, not only category name
### Fixed
- Fix [RIDER-69165](https://youtrack.jetbrains.com/issue/RIDER-69165)
- Fix [DEXP-642989](https://youtrack.jetbrains.com/issue/DEXP-642989)
## [2021.2.1.4]
### Fixed
- Fix [RIDER-66784](https://youtrack.jetbrains.com/issue/RIDER-66784)
- Possibly fix [RIDER-67192](https://youtrack.jetbrains.com/issue/RIDER-67192)
## [2021.2.1.3]
### Fixed
- [GITHUB-135](https://github.com/JetBrains/UnrealLink/issues/135)
## [2021.2.1.2]
### Fixed
- [GITHUB-135](https://github.com/JetBrains/UnrealLink/issues/135)
## [2021.2.1.1]
### Changed
- Sending logs from Unreal Editor to Rider moved to separate thread, less load on UE UI thread
### Fixed
- [RIDER-68865](https://youtrack.jetbrains.com/issue/RIDER-68865)
- Unreal log messages are not limited anymore with 4KB size
## [2021.2.0.659]
### Fixed
- Finally fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- as well as [GITHUB-97](https://github.com/JetBrains/UnrealLink/issues/97)
- Number of fixes for clashing "Project Model Generation" with "Building RiderLink" actions blocking UnrealBuildTool.
They don't have dedicated issues in YT or GH, but has producing annoying results like:
- "can't generate project model, because UBT is running" message;
- Building RiderLink and failing would leave a hanging UBT process.
### Known Issues
## [2021.1.12]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- HOTFIX building RideLink on MacOS
### Known Issues
## [2021.1.11]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [RIDER-64422](https://youtrack.jetbrains.com/issue/RIDER-64422)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- [GITHUB-112](https://github.com/JetBrains/UnrealLink/issues/112)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch
### Known Issues
## [2021.1.10]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch
### Known Issues
## [2021.1.9]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- [RIDER-63716](https://youtrack.jetbrains.com/issue/RIDER-63716)
- [RIDER-63584](https://youtrack.jetbrains.com/issue/RIDER-63584)
- [GITHUB-109](https://github.com/JetBrains/UnrealLink/issues/109)
- Possible fix for [GITHUB-99](https://github.com/JetBrains/UnrealLink/issues/99)
- Fix build RiderLink for UE5 main branch
### Known Issues
## [2021.1.8]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Possible fix for https://youtrack.jetbrains.com/issue/RIDER-62012
- UE crashing on exit in RiderLink
- Fix building RiderLink on UE5
- Fix https://github.com/JetBrains/UnrealLink/issues/93
### Known Issues
## [2021.1.7]
### Added
- Option to cancell installation of RiderLink
### Changed
### Deprecated
- Dropped support for versions of UE 4.22 and older
### Removed
### Fixed
- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS
- Failing to install RiderLink due to other UBT processes running
### Known Issues
## [2021.1.6]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS
### Known Issues
## [2021.1.5]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed [Rider-51111](https://youtrack.jetbrains.com/issue/RIDER-51111)
- Fixed installation on macOS
### Known Issues
## [2021.1.4]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed potential issues with inconsistent protocol state on disconnects
- Reinitialize protocol each time
- Fixed bunch of issues with game control actions
- Use PIE actions logic from UE4 instead of reimplementing it
- Actions are no more stuck in disabled state after engine unexpected shutdowns
### Known Issues
- "Compile before play" option is not properly supported
- Actions visibility and availability states are not synchronized with editor
## [2021.1.3]
### Added
- Disabling Play and Play settings button after press
- Rider should reflect state of Unreal Editor. Play buttons should change only when Unreal Editor notifies that they
have changed
### Changed
### Deprecated
### Removed
### Fixed
- Fix: sync state of play buttons and play settings buttns between Rider and Unreal Editor
- Fix: don't install RiderLink into `UnrealLaunchDaemon` project
### Known Issues
## [2021.1.2]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Exception on generitng project files during installation of RiderLink plugin
- Rider not being able to connect to Unreal Editor
### Known Issues
## [2021.1.1]
### Added
- Support MacOS and Linux
- Installing RiderLink plugin logs show in Build panel
### Changed
### Deprecated
### Removed
### Fixed
### Known Issues
## [2020.3.116]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fix https://github.com/JetBrains/UnrealLink/issues/62
### Known Issues
## [2020.3.113]
### Added
### Changed
- Build RiderLink plugin from source on user PC instead of bundling dll files.
- Reason: frequent changes of toolchains and breaking of ABI compatibility in MSVC toolchain render this practice
impossible.
### Deprecated
- Drop support for UE 4.21 and older
- Reason: RD framework doesn't use PCH files and doesn't comply with UE rules for include files. It's impossible to
state that module doesn't use PCH files in UE 4.21 and older.
### Removed
### Fixed
### Known Issues
## [2020.3.104]
### Added
- Proper README for the https://github.com/JetBrains/UnrealLink
### Changed
### Deprecated
### Removed
### Fixed
- Fix memory leak in log panel on exit of Rider
- Fix deprecated code
### Known Issues
## [2020.3.85]
### Added
- Supported Rider 2020.3
### Changed
### Deprecated
### Removed
### Fixed
### Known Issues
## [2020.2.83]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- More fixes to https://youtrack.jetbrains.com/issue/RIDER-50354
### Known Issues
## [2020.2.79]
### Added
- More info and notifications when RiderLink can't be built
- Unable auto-update plugin from JetBrains Marketplace
### Changed
### Deprecated
### Removed
- Removed verbose log messages from RD framework in stdout
### Fixed
- Fix https://youtrack.jetbrains.com/issue/RIDER-50354
- Fix corrupted hyperlinks after toggling timestamps
### Known Issues
## [2020.2.69]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fix https://github.com/JetBrains/UnrealLink/issues/46
### Known Issues
## [2020.2.67]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fix showing popup "update project file" after installing RiderLink
- After pressing "update project file", it'd update {GameProject}.uproject file, adding reference to RiderLink. This
is not necessary for RiderLink to work properly, but it'll break project for people that will sink to
{GameProject}.uproject, but who doesn't have RiderLink installed
### Known Issues
## [2020.2.66]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fix https://github.com/JetBrains/UnrealLink/issues/40
- Fix https://youtrack.jetbrains.com/issue/RIDER-47839
### Known Issues
## [2020.2.62]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed: https://github.com/JetBrains/UnrealLink/issues/19
### Known Issues
## [2020.2.61]
### Added
- Unreal log filters
- Verbosity
- Category
- Show/hide timestamps
### Changed
- Generated files for RD protocol will have ".Generated.h" suffix
### Deprecated
### Removed
- Packing plugin for ReSharper
- Not supported yet
### Fixed
- Fixed: building RiderLink with Unity build disabled
- Fixed: Wording in "Install RiderLink" popup
- Fixed: Wording in UnrealEngine settings
- No more auto-install plugin, only auto-update plugin
### Known Issues
## [2020.2.36]
### Added
### Changed
- rd-cpp updated to 201.1.85
### Deprecated
### Removed
### Fixed
- Fixed stackoverflow crash on exit of Unreal Editor
### Known Issues
## [2020.2.34]
### Added
### Changed
- move plugin installation in backend thread - no more freeze of UI when installing RiderLink
### Deprecated
### Removed
### Fixed
- fix loading RiderLink plugin on cooking
- fix crash on closing UnrealEditor in RiderLoggingExtension
- fixed number of problems discovering Unreal Editor installation, should fix a lot of false failing installations of
RiderLink
- fix wording in RiderLink settings panel ( auto update and install -> auto update)
- fix UnrealBuildTool removing EnableByDefault: true from RiderLink.uplugin
- No more modification of {GameName}.uproject file to enable RiderLink
### Known Issues
## [2020.1.10]
### Added
- Add option to install plugin to either Engine or Game
- Installing to Engine from EGS requires building plugin
- Old versions of plugins will be backed up
- New version will be copied to %USER% folder and built
- Result binaries copyied to Engine or Game
- Sln will be refreshed
- In case of errors, all the results will be reverted
### Changed
- Moved thirdparty dependencies of RD to submodules, fixed build.kts for it
### Deprecated
### Removed
### Fixed
- [Extremely long log entry causes RiderLink to lose connection to Unreal Engine](https://github.com/JetBrains/UnrealLink/issues/17)
- Fix looking for Unreal Engine root when Game is placed in the same folder as Engine
- Fix RiderLink for non-Unity builds
### Known Issues
## [2020.1.8]
### Added
- Add progress bar when installing "RiderLink" plugin
- Hide notification suggesting installing RiderLink after selecting "Install plugin"
- [Add option to Compile Game Project before starting PIE](https://github.com/JetBrains/UnrealLink/issues/9)
### Changed
- Installation to Engine instead of game Project
- [Add option to install RiderLink to Engine instead of Game Project](https://github.com/JetBrains/UnrealLink/issues/7)
- During installation process, RiderLink will be built and put into correct folder
- No more gimmicks with "build plugin in Game project, then copy-paste it in Engine project"
- Refactored "RiderLink"
- Separated "RiderLink" into separate module with different loading steps
- e.g. For "RiderLink', start as soon as possible, for "RiderLinkGameControlExtension" start after Unreal Editor is
fully loaded, etc
- Fixed all warnings (TEXT macro redefined, obsolete API, etc)
### Deprecated
### Removed
### Fixed
- Lower verbosity of RD protocol logger
- Less noise in debug console
- [Build on non-unity projects](https://github.com/JetBrains/UnrealLink/issues/10)
- [Exception during installation of RiderLink](https://github.com/JetBrains/UnrealLink/issues/5)
- [Multiple popups suggesting installing RiderLink](https://youtrack.jetbrains.com/issue/RIDER-43928)
- Bunch of issues:
- https://youtrack.jetbrains.com/issue/RIDER-44056
- https://youtrack.jetbrains.com/issue/RIDER-44027
- https://youtrack.jetbrains.com/issue/RIDER-43929
### Known Issues
## [2020.1.7]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- [Incorrect time in log](https://github.com/JetBrains/UnrealLink/issues/8)
- [Infinite process: RiderLink Discovering Asset Data](https://youtrack.jetbrains.com/issue/RIDER-43353)
- Spawn of multiple tabs when sending huge log message from Unreal Editor to Rider
### Known Issues
## [2020.1.6]
### Added
- FileWatcher initialization moved to separate thread, speed up startup time for plugin on RIder side
- New icons for Play actions and connection status
### Changed
- Cleaned up severity of internal logs
- Were polluting package logs
### Deprecated
### Removed
### Fixed
- Connecting to Unreal Editor when plugin is installed in Engine
### Known Issues
## [2020.1.5]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- [Cant close Unreal log window](https://github.com/JetBrains/UnrealLink/issues/2)
- Disabled spawning multiple tabs for logs. Only one log tab for Unreal Editor log will be available at all times
- [Rider installs plugins to Programs](https://github.com/JetBrains/UnrealLink/issues/6)
- [Exception: The process cannot access the file because it is being used by another process](https://github.com/JetBrains/UnrealLink/issues/5)
- [Crash in RiderLink when packaging project](https://github.com/JetBrains/UnrealLink/issues/4)
### Known Issues
## [2020.1.4]
### Added
- Option to enable auto-update Unreal Editor (RiderLink) plugin
- Notification after plugin installation
### Changed
### Deprecated
### Removed
### Fixed
- Not finding uproject files on loading solution
- [UnrealLink plugin generates wrong sln for Rocket builds of UE](https://github.com/JetBrains/UnrealLink/issues/1)
### Known Issues
## [2020.1.2]
### Added
### Changed
### Deprecated
### Removed
### Fixed
- Fixed: when adding RiderLink plugin to project, Rider would regenerate sln and It would add Programs folder to
solution tree for Rocket builds (UE from EGS)
- Fixed: building plugin on v4.20+
- Fixed: Use user temp folder instead of the project folder for intermediate file operations to avoid asking for
elevated options
### Known Issues
## [2020.1.1]
### Added
- Open Blueprints from Rider
- Show logs of Unreal Editor inside Rider with hyperlinks to Blueprints inside Rider
- Toolbar buttons to control playback of the game inside Unreal Editor
- Play, Pause, Stop, Skip frame;
- Setup multiplayer: number of players, dedicated server, etc.
- Notification if connection to Unreal Editor is established or not (bottom right corner of status bar);
- Auto-install plugins in project;
- Setting to enable auto-install (`true` by default).
- If auto-install is disabled - notification will show up with quick-fix action.
### Changed
### Deprecated
### Removed
### Fixed
### Known Issues
- Service for opening assets in Unreal Editor has changed starting with UE 4.24 - opening same BP multiple times will
open multiple tabs instead of re-using already opened one;
- Icon for connection status looks weird, waiting for new icons from designers
- Connecting to multiple instances of Unreal Editor is not working correctly
- Toolbar controls will be affecting only the last connected editor
================================================
FILE: CODE_OF_CONDUCT.md
================================================
## Code of Conduct
This project and the corresponding community is governed by the [JetBrains Open Source and Community Code of Conduct](https://confluence.jetbrains.com/display/ALL/JetBrains+Open+Source+and+Community+Code+of+Conduct). Please make sure you read it.
================================================
FILE: License.txt
================================================
Apache License
Version 2.0, January 2004
https://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0.txt
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
[](https://confluence.jetbrains.com/display/ALL/JetBrains+on+GitHub)
# UnrealLink for Unreal Engine
The UnrealLink plugin enables advanced integration between JetBrains Rider and Epic Games’ Unreal Editor.
Rider is a fast and powerful IDE for Unreal Engine and C++ development. It provides rich code navigation, inspections, refactorings, understands Blueprints and the Unreal Engine reflection mechanism, and supports HLSL.
The plugin brings Blueprints information to the editor, adds settings to manage game launch, and provides a more convenient version of the Unreal Editor log.
There are two plugins under the hood, the UnrealLink plugin for Rider and the RiderLink plugin for Unreal Editor, packed together.
Installation
UnrealLink is bundled with Rider and also distributed via the JetBrains plugin marketplace.
RiderLink is installed by Rider itself, there is no need to install it manually. The first time you open an Unreal Engine project in Rider, you'll see a notification that the RiderLink plugin is missing and an invitation to install it. If you skip this popup message, you can install the plugin later by going to the Rider settings on the Languages and Frameworks | Unreal Engine page.
Both the popup message and the settings page offer two installation options:
Engine: Select this option to install the plugin in the engine and use it for all game projects based on the current engine version. The plugin will appear in the Engine/Plugins/Developer folder.
Game: Select this option to install the plugin in the game project and use it for the current project only. The plugin will appear in the Game/Plugins/Developer folder.
Contribute to the plugin
We love contributions! If you want to contribute to the UnrealLink plugin, fork this repository and follow the instructions on how to set up a development environment.
Features
Interact with blueprints
Blueprint files are written in binary form and are usually edited visually. However, they contain a whole lot of useful information for the developers of the C++ part of the game.
Rider reads Blueprints and allows you to see the bigger picture behind your code:
There may be derived blueprint classes, which you can see by invoking Find Usages on a C++ class or when you're browsing your C++ code in the editor.
You can see the values of overridden properties.
UnrealLink extends this functionality and introduces the ability to navigate to the Blueprint inside the Unreal Editor from your C++ code.
Manage the game
The plugin allows you to manage your game right inside the IDE: select the running mode, run a server for your multiplayer game, specify the number of players, and more.
Browse the Unreal Editor log
UnrealLink offers you an enhanced version of the Unreal Editor log output panel with colored text for easy reading, as well as verbosity and event category filters. You can also click on any highlighted link to navigate to the related source code line.
The plugin and Rider for Unreal Engine itself are in active development now, so there could be some issues. Please share your feedback and report any bugs you encounter:
Rider-specific issues should be directed to the Rider tracker.
Send a message with any questions and feature suggestions to our support engineers and the Rider for Unreal Engine developers at rider-cpp-support@jetbrains.com. We really love hearing from you!
A few typical issues, and what to do in such cases:
Failed to build RiderLink plugin
```
Failed to build RiderLink plugin
Check build logs for more info
Help > Diagnostic Tools > Show Log in Explorer
And contact dev team for help at GitHub Issues page
```
There are several reasons you might get this message:
There’s a problem with your current Game or Unreal Engine code. Please make sure that you can build them correctly.
You have an instance of Unreal Editor with the RiderLink plugin running. Please close Unreal Editor and try installing RiderLink again.
Finally, if Unreal Editor is closed and your project builds fine, and you have an old version of RiderLink installed, please move the old version of RiderLink to a temp folder manually and try reinstalling RiderLink.
Failed to backup old plugin
```
Failed to backup old plugin
Close all running instances of Unreal Editor and try again
Path to old plugin:
```
You tried to install a new version of RiderLink while you have a running instance of Unreal Editor with the plugin installed. Please close Unreal Editor and try again to install the plugin.
Failed to refresh project files
This warning message means that installation was successful, but updating the project files in Rider failed. Everything should work fine, except the plugin will not appear in the /Plugins/Developer folder in the Explorer view.
If you have any issues with the plugin that you can’t resolve, please contact the developers via GitHub Issues.
After cloning the repository, you need to perform some actions to set up the environment.
[TBD] Setting up UnrealLink frontend
Setting up UnrealLink backend
Run the console under the folder where you have cloned the repository.
NOTE: Make sure that you have Java installed on your machine and you have environmental variable JAVA_HOME set to the value of the path to your JDK folder. Otherwise, it won't work.
Use the following command gradlew buildResharperHost to install all the requirements for proper work
Here you go! Now you can open UnrealLink.sln and work on backend code.
Setting up RiderLink, Unreal Editor plugin
Code for the Unreal Editor part is stored inside UnrealLink repository, but in order to work with cpp code, it should be a part of Unreal Engine project.
As a workaround, we provide an option to create a junction from RiderLink source folder to Unreal Engine game project.
That way, when you make changes to RiderLink plugin inside Unreal Engine project, they will be picked up automatically in git.
Run the console under the folder where you have cloned the repository
Use the following command gradlew symlinkPluginToUnrealProject
It will fail the first time with the message "Add path to a valid UnrealEngine project folder to: {UnrealLinkRoot}\UnrealEngineProjectPath.txt"
and will create "UnrealEngineProjectPath.txt" for you.
Add path to the root folder of your game project into "UnrealEngineProjectPath.txt" eg "D:/PROJECTS/UE/basic_4_26"
Run gradlew symlinkPluginToUnrealProject again.
Refresh project files for your Game project
RiderLink plugin will be available under {GameProjectRoot}/Plugins/Development/RiderLink
================================================
FILE: SdkBasedPluginEmbedding.Root
================================================
================================================
FILE: SubplatformsCollection.Root
================================================
================================================
FILE: UnrealLink.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.29123.88
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RiderPlugin.UnrealLink", "src\dotnet\RiderPlugin.UnrealLink\RiderPlugin.UnrealLink.csproj", "{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "misc", "misc", "{4A9ABB95-3762-448B-B5BF-099E46DB22DE}"
ProjectSection(SolutionItems) = preProject
CHANGELOG.md = CHANGELOG.md
src\dotnet\Plugin.props = src\dotnet\Plugin.props
src\rider\main\resources\META-INF\plugin.xml = src\rider\main\resources\META-INF\plugin.xml
README.md = README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{084172D1-A9C6-46D0-96AD-05C5B09A5E5D}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {AE34A340-CA1E-400F-9367-864EEF8033C7}
EndGlobalSection
EndGlobal
================================================
FILE: build.gradle.kts
================================================
import com.jetbrains.plugin.structure.base.utils.isFile
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.tasks.testing.logging.TestExceptionFormat
import org.jetbrains.changelog.Changelog
import org.jetbrains.intellij.platform.gradle.tasks.PrepareSandboxTask
import org.jetbrains.intellij.platform.gradle.tasks.RunIdeTask
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.ByteArrayOutputStream
import java.security.MessageDigest
import javax.inject.Inject
import org.gradle.process.ExecOperations
import kotlin.io.path.absolute
import kotlin.io.path.isDirectory
import org.jetbrains.intellij.platform.gradle.Constants
import org.jetbrains.intellij.platform.gradle.TestFrameworkType
import kotlin.io.path.pathString
plugins {
id("me.filippov.gradle.jvm.wrapper") version "0.16.0"
id("org.jetbrains.changelog") version "2.0.0"
id("org.jetbrains.intellij.platform")
kotlin("jvm")
}
interface Injected {
@get:Inject val exec: ExecOperations
}
val injected = objects.newInstance()
java {
sourceCompatibility = JavaVersion.VERSION_25
targetCompatibility = JavaVersion.VERSION_25
}
repositories {
maven("https://cache-redirector.jetbrains.com/intellij-dependencies")
maven("https://cache-redirector.jetbrains.com/intellij-repository/releases")
maven("https://cache-redirector.jetbrains.com/intellij-repository/snapshots")
maven("https://cache-redirector.jetbrains.com/maven-central")
intellijPlatform {
defaultRepositories()
jetbrainsRuntime()
}
}
dependencies {
testImplementation("com.fasterxml.jackson.core:jackson-databind:2.14.0")
}
apply {
plugin("kotlin")
}
kotlin {
sourceSets {
main {
kotlin.srcDir("src/rider/main/kotlin")
}
test {
kotlin.srcDir("src/rider/test/kotlin")
}
}
}
sourceSets {
main {
kotlin.srcDir("src/rider/generated/kotlin")
resources.srcDir("src/rider/main/resources")
}
}
project.version = "${property("majorVersion")}." +
"${property("minorVersion")}." +
"${property("buildCounter")}"
if (System.getenv("TEAMCITY_VERSION") != null) {
logger.lifecycle("##teamcity[buildNumber '${project.version}']")
} else {
logger.lifecycle("Plugin version: ${project.version}")
}
val buildConfigurationProp = project.property("buildConfiguration").toString()
val repoRoot by extra { project.rootDir }
val isWindows by extra { Os.isFamily(Os.FAMILY_WINDOWS) }
val idePluginId by extra { "RiderPlugin" }
val dotNetSolutionId by extra { "UnrealLink" }
val dotNetDir by extra { File(repoRoot, "src/dotnet") }
val dotNetBinDir by extra { dotNetDir.resolve("$idePluginId.$dotNetSolutionId").resolve("bin") }
val dotNetPluginId by extra { "$idePluginId.${project.name}" }
val dotNetSolution by extra { File(repoRoot, "$dotNetSolutionId.sln") }
val modelDir = File(repoRoot, "protocol/src/main/kotlin/model")
val hashBaseDir = File(repoRoot, "build/rdgen")
val ktOutputRelativePath = "src/rider/main/kotlin/com/jetbrains/rider/model"
val cppOutputRoot = File(repoRoot, "src/cpp/RiderLink/Source/RiderLink/Public/Model")
val csOutputRoot = File(repoRoot, "src/dotnet/RiderPlugin.UnrealLink/obj/model")
val ktOutputRoot = File(repoRoot, ktOutputRelativePath)
val riderLinkDir = File("$rootDir/src/cpp/RiderLink")
val currentBranchName = getBranchName()
fun TaskContainerScope.setupCleanup(task: Task) {
withType {
delete(task.outputs.files)
}
}
fun getBranchName(): String {
val execResult = providers.exec {
executable = "git"
args("rev-parse", "--abbrev-ref", "HEAD")
workingDir = projectDir
isIgnoreExitValue = true
}
if (execResult.result.get().exitValue == 0) {
val output = execResult.standardOutput.asText.get().trim()
if (output.isNotEmpty())
return output
}
return "net222"
}
fun getProductMonorepoRoot(): File? {
var currentDir = repoRoot
while (currentDir.parent != null) {
if (currentDir.resolve(".ultimate.root.marker").exists()) {
return currentDir
}
currentDir = currentDir.parentFile
}
return null
}
changelog {
version.set(project.version.toString())
// https://github.com/JetBrains/gradle-changelog-plugin/blob/main/src/main/kotlin/org/jetbrains/changelog/Changelog.kt#L23
// This is just common semVerRegex with the addition of a forth optional group (number) ( x.x.x[.x][-alpha43] )
headerParserRegex.set(
"""^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)\.?(0|[1-9]\d*)?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)
(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?${'$'}"""
.trimMargin().toRegex())
groups.set(listOf("Added", "Changed", "Deprecated", "Removed", "Fixed", "Known Issues"))
keepUnreleasedSection.set(true)
itemPrefix.set("-")
}
dependencies {
intellijPlatform {
val dependencyPath = File(projectDir, "dependencies")
if (dependencyPath.exists()) {
val localPath = dependencyPath.canonicalPath
local(localPath)
logger.lifecycle("Will use ${File(localPath, "build.txt").readText()} from $localPath as RiderSDK")
} else {
val version = "${project.property("majorVersion")}-SNAPSHOT"
logger.lifecycle("*** Using Rider SDK $version from intellij-snapshots repository")
rider(version, useInstaller = false)
}
jetbrainsRuntime()
// Workaround for https://youtrack.jetbrains.com/issue/IDEA-179607
bundledPlugin("rider.intellij.plugin.appender")
bundledPlugin("com.intellij.cidr.debugger")
bundledPlugin("com.jetbrains.rider-cpp")
// TODO: Temporary I hope hope hope
bundledLibrary(provider {
project.intellijPlatform.platformPath.resolve("lib/testFramework.jar").pathString
})
}
}
intellijPlatform {
tasks {
val currentReleaseNotesAsHtml = """