Security model
Safe mode and insecure mode have different trust assumptions.
Safe mode
Safe mode is designed for host-provided APIs that exchange copied values, opaque handles, and bounded resources. It does not expose raw native addresses.
Package isolation prevents ordinary JavaScript objects and globals from being shared across runtimes. It does not turn an injected module into an operating-system security boundary.
Insecure mode
Insecure mode trusts the complete package, including every relative module it imports. FFI can:
- Read or overwrite process memory
- Load DLLs
- Invoke exported native functions
- Block the game thread
- Bypass future safe host-API validation
- Crash the process despite exception containment
The global toggle is persisted in Fumoware configs. Loading a config without the setting returns the engine to safe mode, preventing insecure state from leaking between configs.
Do not enable insecure mode for downloaded or obfuscated packages.