Skip to content

Ecosystem

The @infernus/* ecosystem is designed to bridge Pawn include libraries into the Node.js world. It wraps existing Pawn capabilities into Node.js packages, enabling you to use functionality previously only available in Pawn through TypeScript/JavaScript.

@infernus/* provides the following ecosystem packages:

PackageDescription
@infernus/coreNode.js library for scripting Open Multiplayer
@infernus/cefA wrapper of the omp-cef component for samp-node
@infernus/colandreasA wrapper of the SA-MP ColAndreas plugin for samp-node
@infernus/create-appCommand line interface for rapid infernus development
@infernus/distanceA wrapper of the distance library for samp-node
@infernus/drift-detectionA wrapper of the driftDetection library for samp-node
@infernus/e-selectionA wrapper of the eSelection library for samp-node
@infernus/fcnpcA wrapper of the FCNPC plugin for samp-node
@infernus/fsA collection of all built-in filterscripts
@infernus/gpsA wrapper of the GPS plugin for samp-node
@infernus/map-loaderA tool for obj conversion, parsing, and loading
@infernus/mapandreasA pure TypeScript heightmap query implementation, no native plugin required
@infernus/s-artA wrapper of the popular s-art library for rendering pixel images in-game using DynamicObject with material text
@infernus/nex-acA wrapper of the nex-ac library for samp-node
@infernus/progressA progress bar based on LD_SPAC:white for precise control
@infernus/qrcodeGenerate simple qrcode objects for infernus
@infernus/querySimple API for sending SA-MP queries with TypeScript
@infernus/raknetA wrapper of the open.mp raknet plugin for samp-node
@infernus/recFile format converter from .rec to .json and vice versa
@infernus/samp-voiceA wrapper of the SA-MP voice library for samp-node
@infernus/sharedShared utilities and types for infernus packages (internal)
@infernus/streamerA wrapper of the SA-MP streamer plugin (v2.9.6, private)
@infernus/typesMinimized samp-node API types for infernus (internal)
@infernus/weapon-configA wrapper of the weapon-config library for samp-node

Design Philosophy

Avoid Filterscripts

We do not recommend using any Filterscripts alongside Infernus. Pawn filterscripts were designed as independent script modules running alongside GameModes, but in the Infernus environment this introduces unnecessary complexity.

Our recommendations:

  • Rewrite existing filterscripts using Infernus and integrate them directly into your GameMode.
  • Do not write any GameMode logic in Pawn (except for necessary polyfill code).
  • In short, implement everything through Infernus.

This keeps all logic unified in the Node.js/TypeScript environment, avoiding fragmentation between Pawn and Node.js.

Compatibility

Polyfill-Free Edition

Due to underlying implementation constraints of plugins, samp-node, sampgdk, and omp, certain plugin native functions cannot be called directly via samp-node. For example, raknet's native functions previously required a polyfill workaround.

Starting from v0.14.0+, @infernus/raknet provides a polyfill-free edition — the #include <polyfill/raknet> directive is no longer required. Use our maintained dockfries/Pawn.RakNet to get started.

⚠️ The polyfill-free edition is experimental — bugs may be present. If you rely on the polyfill-based approach, please stay on @infernus/raknet@0.13.x with the original Pawn.RakNet.

64-bit Experimental Support

samp-node now provides 64-bit builds for experimental use. They require a 64-bit OMP server with matching 64-bit plugins:

Note that @infernus/create-app does not support downloading these 64-bit dependencies at this time.

When using the 64-bit raknet plugin, you may need to manually recompile the polyfill to match the Pawn.RakNet version and avoid version mismatch warnings.

When migrating from a 32-bit template to 64-bit (or vice versa), remove arch=ia32 and target_arch=ia32 from .npmrc (or add them when switching back). Note that in pnpm >= 11, .npmrc handling has been streamlined and these properties may no longer take effect — refer to the pnpm upgrade migration guide for details.