Your first SKSE plugin in C++
Your adventure begins today.
In this tutorial, you will:
- Setup the tools required to create SKSE plugins
- Download SKSE plugin template
- Configure the SKSE plugin
- Build the SKSE plugin
- Run the SKSE plugin in Skyrim
- Code review
This tutorial does not require any C++ knowledge.
Requirements
- Skyrim
- Skyrim Script Extender (SKSE)
- Must be the correct version for your version of Skyrim
- Address Library for SKSE Plugins
- Must be the correct version for your version of Skyrim
Setup the tools required to create SKSE plugins
You will need:
- Visual Studio 2022 (required to compile C++ SKSE plugins)
-
vcpkg(required to download C++ libraries)
Visual Studio 2022
-
Download from https://visualstudio.microsoft.com/vs/community/
-
When installing, choose the
Desktop development with C++module

vcpkg
-
Download or clone GitHub repository https://github.com/microsoft/vcpkg
- In the downloaded
vcpkgfolder, double-clickbootstrap-vcpkg.batto run itA command prompt may briefly open and then close while
vcpkgis bootstrapped -
Open the Start menu, type ‘environment’, and choose ‘Edit environment variables for your account’

-
Click
Newto create a new environment variable -
Give it the name
VCPKG_ROOTand the value should be the path to thevcpkgfolder you downloaded:
Download SKSE plugin template
-
Visit https://github.com/SkyrimDev/HelloWorld-using-CommonLibSSE-NG
-
Open the
Codedrop-down:
The URL in the screenshot above may not match the template you are downloading.
-
From there, you can
Download ZIP,Open with Visual Studio,Open with GitHub Desktop, or copy the git URL to clone the repository manually.
Use this template (Optional)
If you plan on creating a new project of your own from this template, you can
use the Use a new template drop-down to quickly create a new GitHub repository
using this template as a starting point.

Configure the SKSE plugin
This SKSE plugin template can be configured to automatically copy the
compiled SKSE plugin .dll into your Skyrim Data folder or the mods folder
used by your mod manager (e.g. Mod Organizer 2 or Vortex).
Mods folder
If you are using a mod manager, you can configure this template to output the
compiled .dll to your mods folder.
- Find your
modsfolder - Configure the
SKYRIM_MODS_FOLDERenvironment variable
To find your mods folder, open your mod manager and find the mods path
in the settings.
Mod Organizer 2:
Vortex:
Once you have the path of your mods folder:
-
open the Start menu, type ‘environment’, and choose ‘Edit environment variables for your account’

-
Click
Newto create a new environment variable -
Give it the name
SKYRIM_MODS_FOLDERand the value should be the path to yourmodsfolder:
Data folder
To output the compiled SKSE plugin directly into your Skyrim folder:
- Find your Skyrim game folder
- Configure the
SKYRIM_FOLDERenvironment variable
To find your Skyrim game folder, open your Skyrim game in Steam or GOG.
Steam:
Click the “cog wheel”, then choose “Manage” > “Browse Local Files”.
GOG:
Click the settings button, then choose “Manage installation” > “Show folder”.
Once you have the path of your Skyrim game folder:
-
open the Start menu, type ‘environment’, and choose ‘Edit environment variables for your account’

-
Click
Newto create a new environment variable -
Give it the name
SKYRIM_FOLDERand the value should be the path to your Skyrim game folder:
View the
READMEof the sample project for any additionally required configuration
Build the SKSE plugin
The screenshots in this section are generic and might not exactly match what you will see for your SKSE template.
If you set any environment variables, be sure to close all text editors and GitHub Desktop. You most close and re-open programs after you set environment variables.
Open the folder of the template you downloaded in a C++ code editor.
One of the easiest ways of doing this is to:
- Right-click the folder of the template project in Windows File Explorer
-
From the right-click context menu, choose “Open with <your preferred editor>”

In Windows 11, you may need to choose “Show more options” for these options to become available
- Alternatively, open your C++ code editor of choice and open the template folder from there (the steps will be specific to your editor application).
Once you open the template folder, the steps will be different based on your C++ code editor.
Visual Studio
Once you open the template folder in Visual Studio, it will automatically detect the project is a CMake project and display the CMake page.

At the same time, Visual Studio will automatically run a CMake configure for your project. You should see the Output window open and display the CMake output.
If you configured the project correctly, the Output should contain the text “SKSE plugin output folder: <path you configured earlier>“
After you see “CMake generation finished.”, you are ready to compile your SKSE plugin.
Press F7 or use the “Build” > “Build all” menu option.

If everything compiles successfully, you should see “Build All succeeded”

Other
For other editors, reference their documentation for building CMake projects.
Run the SKSE plugin in Skyrim
Once your SKSE plugin has been successfully built, a .dll will be generated.
This is your SKSE plugin.
If you followed the steps to configure the SSKE plugin template, the .dll should now reside
in either:
- your
Datafolder (inData\SKSE\Plugins\)
- or -
- in your
modsfolder (in<mods>\<Template name>\SKSE\Plugins\)
You are ready to run Skyrim.
Be sure to run Skyrim via SKSE by running skse64_loader.exe directly -or-
by running SKSE from your mod manager (e.g. Mod Organizer 2 or Vortex)
See the SKSE plugin in action
The Hello, world! template prints a message to the Skyrim ~ game console.
This can be viewed by launching the game and, at the Main Menu, press the ~ or
` key to open the console.
You should see the message: “Hello, world!”
Code review
Plugin.cpp
SKSEPluginLoad(const SKSE::LoadInterface *skse) {
SKSE::Init(skse);
// This example prints "Hello, world!" to the Skyrim ~ console.
// To view it, open the ~ console from the Skyrim Main Menu.
SKSE::GetMessagingInterface()->RegisterListener([](SKSE::MessagingInterface::Message *message) {
if (message->type == SKSE::MessagingInterface::kDataLoaded)
RE::ConsoleLog::GetSingleton()->Print("Hello, world!");
});
return true;
}CMakeLists.txt
# Set your project name. This will be the name of your SKSE .dll file.
project(HelloWorld VERSION 0.0.1 LANGUAGES CXX)




