Details about cross-platform support

Hello! I’m and old XNA developer considering switching from Unity to Monogame, but I have some concerns about cross-platform support in Monogame. I know the website states there’s support for Switch/PS4/etc, which is great, but I’d like to know some more details before going forward. I care mostly about PC and consoles.

From what I’ve gathered, the solution for cross-platform support is transpiling the C# code to C++ and building it natively on console. This seems pretty fragile, and I’m wondering about what restriction this imposes on the code. For example, can I use reflection? Emit? Await? Etc.

Also, it seems like the tech used for the transpiling is not open source, and that makes me worried that if the maintainers stop supporting it for whatever reason, I’d effectively be screwed. Is this correct? Also, is there a license cost attached?

I’ve tried signing up via Nintendo’s dev portal to gain access to the inside information, but no response so far (a worrying sign in itself…), that’s why I’m asking here. Not really interested in details that are under NDA, just the general gist of things.

PS: I understand that this is free software. I’m not demanding anything here, just trying to understand what I’m signing myself up to. Thanks! :slight_smile:

1 Like

AFAIK it’s the same as what Unity does with their IL2CPP Unity - Manual: IL2CPP Overview

The tech for Brute is open source but not public. You need to sign the various platforms’ NDAs as they don’t want that to be just out there. This isn’t up to the MonoGame devs.


I’ve ported my game to Switch, PS4 and Xbox. There is no licensing cost. Async/Await does not work properly with Brute (in my experience) and they advise not to rely on reflection too much either (but some stuff does work OK there I think). I’d avoid using third party libs as well, I had to ditch for example.

It was pretty painful setting up the first port (Switch) for me but that was partly due to my inexperience with Windows as a development platform (I normally develop on MacOS). After I’d done one Brute port the other two were considerably easier. Overall it felt pretty solid as a dev platform but there is next to no documentation and you will have to be prepared to dig in there and figure a lot of stuff out for yourself (some folks on the Discord are very helpful and willing to share code for the native stuff like save data etc)!


Alright, thanks for the info! It’s pretty much what I expected.