Thanks to jcesarmobile on github for figuring this out for me. I wish github had like a donate to user button. I fully acknowledge that i missed a line of code and it’s my mistake, however…
I don’t think using object destructuring to access plugins is good documentation. If that line of code is missed (which is what I did), it will break your app, but in a very subtle way with no specific warning or error message:
const { Filesystem } = Plugins;
Looks simple enough right, like why is that bad? And again I admit I missed it, but lets look at the example for convertFileSrc:
Notice file system is used directly, and you are not shown anywhere that it is accessed via the magic line of code: const { Filesystem } = Plugins;
So, if you type this in, here’s what happens:

Notice my code complete works fine, I even get intellisense on the methods, I have the real object, it’s all fine. However my code just broke on mobile. The autocomplete gets it from where it makes sense, where it’s exported, but this is the “web only” version. My code is now broken.
Since every IDE in the world is going to do this (right?), and since that key single line of code is what makes everything cross platform, and it’s not always included in the docs…maybe just put the word Plugins
first in all the docs, and let the user do object destructuring if they want to. IF the docs had just said:
const savedPhotoFile = await Plugins.Filesystem.writeFile({
No autocomplete issue, no broken code, no “wrong” auto import. Seems much more clear, imo. And if that is a required thing to make the code cross platform, and IDEs are a thing that exists, maybe just use Plugins directly.

That code is now cross platform.