Native Unreal Engine support for Bolt Charge, a fully hosted webshop for out-of-app purchases and subscriptions.
We also have Native Unity Support and a Sample Backend for additional reference.
Only with Bolt you get 2.1% + $0.30 on all transactions. That's 10x better than traditional app stores which take 30% of your revenue! That's the fair and transparent pricing you get with using Bolt.
Disclaimer: Fees are subject to change but will continue to remain highly competitive. See bolt.com/pricing for up to date rates and visit bolt.com/end-user-terms for end user terms and conditions.
This open source package is a light-weight UE5 SDK.
- Bring your own UI
- Open webstore links directly inside your app
- Radically cheaper payment processing rates
- Future: User session management
The SDK supports Unreal Engine 5+. Code might work for older versions but is not officially supported.
Have a feature request? We are constantly improving our SDKs and looking for suggestions. Join our discord and chat directly with our development team to help with our roadmap!
Note: This project is still in early access but we plan to provide official package support in the near future.
Clone / Copy the Plugin
-
Create or open your Unreal Engine 5 project.
-
Inside your project folder, create a
Plugins
directory if it doesn't exist:mkdir Plugins
-
Copy the entire BoltUnrealSDK folder (this repo) into the Plugins folder. You can download the repo as a zip.
YourProject/ └── Plugins/ └── BoltUnrealSDK/ ├── BoltUnrealSDK.uplugin ├── README.md └── Source/BoltUnrealSDK/...
-
Restart Unreal Engine.
-
When prompted, click Yes to rebuild the plugin binaries if required.
Create the WebView Widget Blueprint
This plugin relies on a UI widget with a Web Browser component:
- In the Unreal Content Browser, create a folder at:
- Inside /Game/UI/, create a new User Widget Blueprint called:
- Open WebViewWidget:
- Add a Web Browser component from the Palette.
- Set its anchor to Full Screen and stretch it to fill.
- Rename the Web Browser component to
WebBrowser
- Save and compile.
Requirements: You must have a backend server for proxying API requests. See our server sample for an example integration.
- Add the SDK to your project
- Add routes to your backend server (see example usage)
- Use the staging api configs to test purchases in your dev environment
BoltDemoActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "BoltUnrealSDK.h"
#include "BoltDemoActor.generated.h"
UCLASS()
class YOURPROJECT_API ABoltDemoActor : public AActor
{
GENERATED_BODY()
public:
ABoltDemoActor();
protected:
virtual void BeginPlay() override;
UPROPERTY(EditAnywhere, Category = "Bolt Config")
FString BackendBaseUrl = TEXT("https://your-backend-server.com");
private:
UPROPERTY()
UBoltUnrealSDK* BoltSDK;
void OpenCheckoutPage(const FString& WebUrl);
void HandleWebViewClosed(); // Stub: hook into WebView event system later
};
BoltDemoActor.cpp
#include "BoltDemoActor.h"
#include "TimerManager.h"
#include "Engine/Engine.h"
#include "UObject/ConstructorHelpers.h"
ABoltDemoActor::ABoltDemoActor()
{
PrimaryActorTick.bCanEverTick = false;
}
void ABoltDemoActor::BeginPlay()
{
Super::BeginPlay();
// Initialize SDK
BoltSDK = NewObject<UBoltUnrealSDK>(this);
// Example: Make an API call to get subscriptions
const FString Email = TEXT("[email protected]");
FString GetUrl = BackendBaseUrl + "/subscriptions?email=" + FGenericPlatformHttp::UrlEncode(Email);
BoltSDK->SendAPIRequest(GetUrl, TEXT("GET"), TEXT(""));
// Open a checkout webview
const FString CheckoutUrl = TEXT("https://digital-subscriptions-test-14-04.c-staging.bolt.com/c?u=SRZKjocdzkUmJfS2J7JNCQ&publishable_key=BQ9PKQksUGtj.Q9LwVLfV3WF4.32122926f7b9651a416a5099dc92dc2b4c87c8b922c114229f83b345d65f4695");
OpenCheckoutPage(CheckoutUrl);
}
void ABoltDemoActor::OpenCheckoutPage(const FString& WebUrl)
{
if (BoltSDK)
{
BoltSDK->OpenWebView(WebUrl);
}
// You can trigger HandleWebViewClosed manually after a delay (for demo/testing):
GetWorld()->GetTimerManager().SetTimerForNextTick([this]()
{
HandleWebViewClosed(); // Simulated for now
});
}
void ABoltDemoActor::HandleWebViewClosed()
{
UE_LOG(LogTemp, Log, TEXT("WebView was closed by the user."));
// Trigger anything you want here:
// - Check subscription status
// - Refresh UI
// - Resume gameplay
}
For detailed documentation and API reference, visit our documentation site.
This project is licensed under the MIT License - see the LICENSE file for details.