WindowManager properties aren’t serialized, but the WindowManager is the only type with a single instance - thus it can be temporarily used like a global. There is no type which can be used like a singleton, but you can use ID properties to save properties on certain ID type instances (e.g. bpy.context.scene[“prop”] = 123).