v2.0.0 Released

Plugin management
for Unreal Engine

A standalone CLI that brings npm-style dependency management to Unreal Engine projects and plugins — no Node.js required.

macOS / Linux
Windows
$ curl -fsSL https://uepm.dev/install.sh | sh
PS> irm https://uepm.dev/install.ps1 | iex

Why UEPM

Everything you need,
nothing you don't

UEPM brings battle-tested package management workflows to the Unreal Engine ecosystem — built in Rust, ships as a single binary.

📦

npm registry — zero Node.js

Publishes and installs from the npm registry using a native Rust HTTP client. No Node.js, no npm, no package.json on disk.

🔒

Reproducible installs

Every install is pinned in uepm.lock with verified SHA-512 checksums. Check it in; anyone who clones gets bit-identical plugins.

🌲

Transitive dependencies

Plugins can declare their own UEPM dependencies. UEPM resolves the full graph with conflict detection before touching the filesystem.

🚀

Publish without npm

Build the .tgz tarball in memory, compute integrity, and PUT to the registry — all from a single uepm publish.

🎯

Semver-aware

Range syntax you already know — ^1.2.0, >=5.3.0. Engine compatibility ranges are stored per plugin and checked on install.

Single binary, everywhere

Ships as a static binary for macOS (arm64 + x86_64), Linux (x86_64), and Windows (x86_64). Drop it on CI and move on.


Quickstart

Up in under a minute

Whether you're adding plugins to an existing project or preparing your plugin for distribution, uepm init has you covered.

Installing plugins
Publishing a plugin
1

Initialize your project

Run inside the directory that contains your .uproject file. UEPM creates Config/UEPM.ini, the UEPMPlugins/ directory, and wires everything into your .uproject automatically.

$ cd YourUnrealProject
$ uepm init
2

Install plugins

Install by scoped name. UEPM resolves the version range, downloads the tarball, verifies its checksum, and extracts it into UEPMPlugins/.

$ uepm install @acme/cool-plugin
$ uepm install @acme/utils@^2.0.0
3

Check in the lock file

uepm.lock is machine-generated and should be committed. Teammates restore the exact same plugin versions with uepm install after cloning.

$ git add Config/UEPM.ini uepm.lock
$ git commit -m "feat: add cool-plugin"
4

Update or remove

$ uepm update # all plugins
$ uepm update @acme/utils # one plugin
$ uepm uninstall @acme/utils
1

Initialize your plugin

Run inside the directory that contains your .uplugin file. UEPM detects the plugin context and prompts you for publish metadata.

$ cd YourPlugin
$ uepm init
2

Review Config/UEPM.ini

The [Plugin] section controls what gets published. Set engine range and any transitive dependencies.

# Config/UEPM.ini
[Plugin]
Name = "@your-scope/plugin-name"
Version = "1.0.0"
EngineRange = ">=5.3.0, <6.0.0"
License = "MIT"
[Dependencies]
"@acme/base-utils" = "^2.0.0"
3

Publish

UEPM builds the tarball in memory and PUTs it directly to the registry. Use --dry-run to inspect the file list without uploading.

$ export UEPM_TOKEN=npm_xxxx
$ uepm publish --dry-run # validate first
$ uepm publish # interactive confirm + upload
$ uepm publish --tag beta # non-default dist-tag

Ecosystem

Discover plugins

Browse plugins published to the npm registry with the uepm keyword — or search npm directly.

Find more on npmjs.com → keyword:uepm ↗

No plugins found. Try searching npmjs.com.