There are several levels of namespaces for variables.
User - these are what you can set per component or through blueprints. Readable everywhere, not writable within Niagara.
System - these are values shared by everything within the system, readable everywhere, writable only within system scripts and persisted frame to frame.
Emitter - values shared by everything within that emitter instance, readable in Emitter and Particle scripts, writable only in Emitter scripts and persisted frame to frame.
Particles - per-particle values, readable only by particle scripts, writable only by particle scripts and persisted frame to frame.
Engine - variables defined within the runtime for Niagara itself. They are read-only everywhere.
Module - variables defined within a module are readable/writable within that module and in the owning context (System/Emitter/Particle) can be written to if you know the unique module name in that context. In other words, if you add a AddVelocity module, you can address its parameters from the owning particle update script by replacing “Module” with “AddVelocity”.
NPC - This is a signal that the value is coming from a Niagara Parameter Collection. It is usually followed by another sub-namespace that defines the name of the Niagara Parameter Collection from which you are pulling the value from.
Output - Several of our modules use the Output namespace to signify that these are useful values for binding into other modules. Usually, they are of the convention: Output.Module.VariableName . This is just a convention and in reality the output namespace is no different than Temp/Transient/Physics/Etc. below.
Physics/Temp/Transient/Etc. - You can create arbitrary namespaces, but they are “temporary”, meaning they only have meaning for the script type that you are on. The values are scoped to that update, spawn or event and are not persisted in any way. We use Physics.Force in this way. It is set to zero by default at the beginning of the update script, a bunch of force modules go in and accumulate their forces for the frame, and then the SolveForcesAndVelocity module resolves those into changes to Particles.Velocity and Particles.Position. Anything you create will follow that same paradigm. However, you can create sub-namespaces within the supported ones. So Particles.MyCompanyName.VariableName. is a perfectly valid namespace to organize all your custom variables into.