Any of these will work. On the S/W side, YAGSL (as an example) says it supports any of these (I totally believe this, I just don’t have first-hand confirmation). I don’t think there is much performance difference, and any of these three should mount easily, so there shouldn’t be any mechanical issues (double check for yourself). This leaves electrical.
If you don’t go with CANcoder, your first decision is to connect to the SPARK MAX for the steering, or to the RIO. This could affect the S/W side of things. This makes for five wiring options (CAN + RIO/SPARK MAX analog/digital).
The Thrifty option is super-easy to connect to RIO, probably the easiest of the three. It uses an analog input, which is different from the other two options. I’m not sure SPARK MAX supports analog input for absolute encoder, so there may only be four wiring options – don’t go down the analog/SPARK MAX path without confirming SPARK MAX and S/W support (in your chosen swerve code).
CANcoder has to be wired into your CAN bus, plus it needs 12V power. If you have a busy CAN bus, that might be an issue, but this should be manageable (maybe tweak some CAN status frame rates). Some teams have had trouble soldering to CANcoder, so there is a pre-wired version available.
If you choose to wire a digital absolute encoder (SRX MAG) to SPARK MAX, you will need an adapter board from REV. They redid the motion planning this year, so the support (in S/W) may not be there yet. If not using CAN, I’d advise starting with encoder wired into RIO, then checking on changing to SPARK MAX later, if you want to do that.
SRX MAG is wired to a digital input on the RIO (or into the SPARK MAX). It’s not hard to wire up, but you need an adapter/breakout to use it with the RIO for sure, and I think you might also need one to work with SPARK MAX.
When we started with MK4, there were fewer options, and we went with SRX MAG – this worked well, so we just stuck with it. I like that it’s digital, and it can be nice to not have the extra CAN traffic, given you are not on the CANcoder-based CTRE CAN bus. But I really do think any of thee are very viable options that are probably going to perform indistinguishably. Unless you have wiring issues/failures, which could be a deciding factor in favor of the most robust wiring you can manage.