• Scalable
  • Lightweight & Fast
  • Robust
  • Secure

 

The NATS Plugin brings the capability to enable Unreal Engine to publish and subscribe to NATS.io server subjects, via both the traditional NATS fire-and-forget messaging and request-reply modes as well as JetStream’s guaranteed delivery and Key/Value storage.

NATS Plugin is security focused, requiring TLS certificates for encryption, and using the JWT NKey decentralized authentication scheme.


  1. The plugin supports Unreal Engine on Windows x64, Linux, and MacOS.

  2. NATS servers >= 2.2.0 are supported, so long as they are configured for TLS encryption and JWT authentication. Clusters are preferred for high availability.

  3. JetStream, and JetStream Key-Value pairs are supported out of the box, so long as it is enabled on the server.

 

Use case:

This plugin should not be used as a forklift replacement for Unreal’s own network communication and replication. NATS.io is a universal standard, and so this plugin is best utilized when interacting with external systems. For example:

  • Unreal publishes (via this plugin) the string “DoAThing” to NATS subject “Do.Stuff”
  • The NATS cluster that Unreal published to pushes the message to any/all subscribers to the subject “Do.Stuff”
  • Some external system receives the message “DoAThing” via its own subscription to subject “Do.Stuff”, and then does some stuff.

Keeping in mind that this is not intended to replace Unreal’s built in facilities, sending UStructs is supported via conversion to JSON first. This means that if a subscriber expects data in a certain JSON form, this data can easily be represented (and updated and managed) in Unreal as a Structure.

Constraints:

Roadmap:

  • Request-Reply is a WIP
  • Security is a WIP
  • JetStream support is a WIP
  • Linux support is pending
  • MacOS support is pending
  • Xbox, Oculus, Android, and HTML 5 support are potential avenues of future development and support.

CREDITS:

NATS.c:

The plugin is based in part on the following libraries:

uriparser: https://uriparser.github.io/

magic-enum: https://github.com/Neargye/magic_enum

OpenSSL (libcrypto, libssl): https://www.openssl.org/

libsodium: https://doc.libsodium.org/