# Improve Third Party Plugin Documentation?

**URL:** <https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558>\
**Category:** C++\
**Tags:** unreal-engine\
**Created:** [November 7, 2025, 4:48am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558 "2025-11-07T04:48:48Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 7, 2025, 4:48am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/1 "2025-11-07T04:48:48Z")

</div>

I have some external code I’d like to add to a UE 5 project. I see the instructions on how to create a third party plugin here:

> **[Integrating Third-Party Libraries into Unreal Engine | Unreal Engine 5.6...](https://dev.epicgames.com/documentation/en-us/unreal-engine/integrating-third-party-libraries-into-unreal-engine)**
>
> Integrating third-party libraries into Unreal Engine

However, creating a third party plugin from within UE creates a new plugin directory with what appears to be two different types of plugin directory trees, with two different \*.build.cs files.

I will probably keep the code for the third party plugin separate from the UE project so that I can keep the unit tests with the solution containing the code.

What should I be deleting and/or changing if I just want to have a DLL and some header files? (Or should I really put the source code in here so that I can compile for other platforms?)

```auto
MyUEProject
+---Binaries
+---Build
+---Config
+---Content
+---Plugins
| \---MyPlugin
| | MyPlugin.uplugin
| |   
| +---Binaries
| +---Content
| +---Intermediate
| +---Resources
| \---Source
| +---MyPlugin
| | | MyPlugin.Build.cs
| | |   
| | +---Private
| | | MyPlugin.cpp
| | |       
| | \---Public
| | MyPlugin.h
| |           
| \---ThirdParty
| \---MyPluginLibrary
| | ExampleLibrary.cpp
| | ExampleLibrary.sln
| | ExampleLibrary.vcxproj
| | ExampleLibrary.vcxproj.filters
| | MyPluginLibrary.Build.cs
| | MyPluginLibrary.tps
| |   
| +---ExampleLibrary
| | \---ExampleLibrary.xcodeproj
| | project.pbxproj
| |           
| +---ExampleLibrary.xcworkspace
| | contents.xcworkspacedata
| |       
| +---Public
| | \---MyPluginLibrary
| | ExampleLibrary.h
| |           
| \---x64
| \---Release
| ExampleLibrary.dll
| ExampleLibrary.lib
|                               
+---Saved
+---Source

```

Thanks,

Matt

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 10, 2025, 8:16am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/2 "2025-11-10T08:16:21Z")

</div>

Found some links that might be useful. I’ll edit this message when I get a chance to try them. The first seems like what I’m looking for:

> **[Wrapping a third party library using an Unreal Engine Plugin | Unrealcode.net](https://www.unrealcode.net/WrappingALibrary)**
>
> How to create a plugin which wraps a third party library

Discussion of the directory tree:

> [@Adding Third Party Libraries to Unreal...understanding how this works](https://forums.unrealengine.com/t/adding-third-party-libraries-to-unreal-understanding-how-this-works/211244):
>
> I’m not totally sure this is exactly the right way to approach the problem or not, but when you understand, really understand, how something works it makes it easier to produce quality content. I really wanted to understand how the Third Party Library template works. First step is to open/create a game. And it needs to be a C++ game not a Blueprint game. Apparently you can’t see the advance choices from the green “New Plugin” button if you created the original game as a blueprint. In a new C++ …

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 10, 2025, 8:17am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/3 "2025-11-10T08:17:00Z")

</div>

Starting from a blank project:

> **[Adding custom third-party library to plugin from scratch | Unreal Engine...](https://unrealcommunity.wiki/adding-custom-third-party-library-to-plugin-from-scratch-867b28)**
>
> In this article we will create custom dll project (emulating third-party library), custom plugin , connect plugin with dll project and add that plugin to blank project

Has some diagrams of the library structure, but no directory tree:

> **[How to integrate third-party library into Unreal Engine](https://georgy.dev/posts/third-party-integration/)**
>
> Concept There are two main types of libraries: Static and Dynamic (also called Shared).
> A static library is statically linked to a program and is available at compile time. A dynamic (or shared) library, on the other hand, is dynamically linked and...

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 10, 2025, 8:17am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/4 "2025-11-10T08:17:36Z")

</div>

Linux example:

> <https://github.com/ibbles/LearningUnrealEngine/blob/master/Third-party%20library%20example.md>

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 15, 2025, 3:53am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/5 "2025-11-15T03:53:05Z")

</div>

Ok, I now understand the layout of the directory.

The files in `Plugins\MyPlugin\Source\MyPlugin` are the files that have the code that Unreal needs to **load** your plugin library. **These are not your plugin itself**. You may need to modify these files, but do not delete them.

The files in `Plugins\MyPlugin\Source\ThirdParty\MyPluginLibrary` may be your plugin library code. You have 3 options here.

1. If you are going to write your own library and don’t have any code for it yet, you can put your C++ code here. **You must compile your library from the `ExampleLibrary.sln` file** , as your main C++ Unreal Solution will not build this library for you. I’m not sure I like option 1: I’d prefer to start with file names that are better than `ExampleLibrary.*`.
2. If you already have your own code, you could copy your solution, project, and code files into this directory, and delete the `ExampleLibrary.*` files. Do not delete the `MyPluginLibrary.*`files. You still need to compile your code from the solution you use to replace `ExampleLibrary.sln`. You Unreal project will not compile your plugin library code.
3. If you are using someone else’s library, or if you have your own code but don’t want to copy it over the `ExampleLibrary` files, then you can delete the `ExampleLibrary.*` files. Don’t delete the `MyPluginLibrary.Build.cs` file, though. If you pick this option, you’ll need to modify `MyPluginLibrary.Build.cs` such that it copies the library from its location outside your Unreal project into the appropriate `Plugins\MyPlugin\Source\ThirdParty\MyPluginLibrary\$architecture` directory. [The first link in my first reply](https://www.unrealcode.net/WrappingALibrary) demonstrates copying the libraries for FFMPEG (built separately) into the $architecture directory.

Personally, I’m choosing option 3. I think it will be easier to handle version control if the files for the Unreal project and the files for the plugin library (the files that would replace the ExampleLibrary files) were in separate Git projects.

This definitely depends on your needs, however. If you are working with a team of developers, option 3 may not work for you: I don’t see how a team could use option 3 because there doesn’t seem to be a way for people to configure the location of the library files that need to be copied. If the directory is hard-coded (not configurable), the path to where you keep your library may not work for your teammate who may have the library in a different location. (Example: I have the code for MyPlugin cloned to `/home/archer/MyPlugin`. I have the Unreal project cloned to `/home/archer/AmazingGame`. My teammate has the code for MyPlugin cloned to `/home/coworker/MyPlugin`. If the `MyPluginLibrary.Build.cs` file way down inside AmazingGame copies the plugin library from `/home/archer/MyPlugin`, my coworker will be surprised when the changes he makes in `/home/coworker/MyPlugin` don’t show up when he loads the plugin from within AmazingGame.

That’s a high-level summary of what I learned from [Wrapping a third party library using an Unreal Engine Plugin | Unrealcode.net](https://www.unrealcode.net/WrappingALibrary) .

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [November 23, 2025, 3:40am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/6 "2025-11-23T03:40:01Z")

</div>

One more note: I needed to add the third party plugin name (e.g., `MyPlugin` in the example above) to my Unreal Project’s `Build.cs` file.

```auto
	PublicDependencyModuleNames.AddRange(new string[] {
		"Core",
		"CoreUObject",
		"Engine",
		"InputCore",
		"EnhancedInput",
		"AIModule",
		"StateTreeModule",
		"GameplayStateTreeModule",
		"UMG",
		"Slate",
		"MyPlugin"
	});

```

---

<div class="post-metadata">

**Author:** ![TheArcher](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@TheArcher](https://forums.unrealengine.com/u/TheArcher)\
**Post date:** [December 31, 2025, 2:07am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/7 "2025-12-31T02:07:41Z")

</div>

> RuntimeDependencies.Add(“$(TargetOutputDir)/Foo.dll”, Path.Combine(PluginDirectory, “Source/ThirdParty/bin/Foo.dll”));

Even though a line like the one above in the .build.cs file will copy the third party DLL (not the plugin!) to the same directory as your final executable, that copy only occurs during packaging. If you try to use the library before copying the DLL to the executable directory, UE will crash with an Unhandled Exception 0xc06d007e.

Options: manually copy the DLL every time you build it, or add a console command to the DLL Visual Studio project:

add the console command  
**copy “$(TargetPath)” “\Plugins\MyPlugin\Binaries\ThirdParty\MyPluginLibrary\Win64”**  
in project settings  
**MyPluginLibrary-\>Properties-\>Build Events-\>Post-Build Event-\>Command Line** , where is the top directory of your Unreal Project (not your third party DLL or plugin directory!).

You’ll probably also want to copy it to your executable directory as well, which would be

**copy “$(TargetPath)” “\Binaries\Win64”**

---

<div class="post-metadata">

**Author:** ![zoe\_wxq](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@zoe\_wxq](https://forums.unrealengine.com/u/zoe_wxq)\
**Post date:** [December 31, 2025, 6:19am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/8 "2025-12-31T06:19:54Z")

</div>

good document👍, next step you would like to build your dll( or static .lib) with cmake , then intergrate them into Unreal plugin

---

<div class="post-metadata">

**Author:** ![ForceGameDev](https://d3kjluh73b9h9o.cloudfront.net/original/4X/2/8/5/28502927f1d97ba1051b3b47ccfe17233bf41ef0.png) [@ForceGameDev](https://forums.unrealengine.com/u/ForceGameDev)\
**Post date:** [January 14, 2026, 7:56am UTC](https://forums.unrealengine.com/t/improve-third-party-plugin-documentation/2672558/9 "2026-01-14T07:56:47Z")

</div>

> @TheArcher
> 
> Even though a line like the one above in the .build.cs file will copy the third party DLL (not the plugin!) to the same directory as your final executable, that copy only occurs during packaging.

Just passing by

I am not sure RuntimeDependencies.Add() is supposed to add the third party DLL of your plugin to the same directory than the final executable (=the final game executable). In my case, with that func, I move the dll from PluginDir\Source\ThirdParty\MyLib\mylib.dll to PluginDir\Binaries\Win64, that is to say a specific Binaries folder inside the plugin folder. My game compiles and runs fine. UE does not crash.

Have you seen the following message:

> [@Copy 3rd Party DLLs to Binaries folder does not work for Engine Plugin - How to solve?](https://forums.unrealengine.com/t/copy-3rd-party-dlls-to-binaries-folder-does-not-work-for-engine-plugin-how-to-solve/738255/6):
>
> For anyone is confusing with this issue you mistake the process of packing Plugin and packing Game. when you build your plugin with RunUAT.bat BuildPlugin It won’t stage the RuntimeDependencies for you, you need to do this by either puting the ThirdParty files at correct location where you refer them in your Build.cs file (for example YourPlugin/Binaries/ThirdParty/…) OR running some PreBuildSteps scripts to copy them to the correct location where you refer them in your Build.cs (fo…

Also here, in the chapter “Runtime Dependencies”, it seems you have an overloaded Add function (I am not using it):

> **[Integrating Third-Party Libraries into Unreal Engine | Unreal Engine 5.7...](https://dev.epicgames.com/documentation/en-us/unreal-engine/integrating-third-party-libraries-into-unreal-engine)**
>
> Integrating third-party libraries into Unreal Engine

Peace
