I have no choice but to play exclusively on a VTT. My group is stuck on Roll20. No one wants to learn a new interface. I think there's a lot better out there at this point.
The one thing I would add is, I hate hybridizing with Discord. If I have to have a little Discord window open over on the side, taking up valuable screen realestate, or on my phone so I can have video or chat features, that's a deal breaker.
MapTools is volunteer created and managed, and you have to program your own tokens, create your own libraries, etc. So it has a lot of flexibility, if you have the skills to do those things. Fortunately there are a lot of community members who publish shortcuts, as well as frameworks which have most of the options relevant to a particular game system. Which is good, since the last time I had any formal training in coding was a semester of Pascal in the mid-late 80s.
So the framework I use for my 4e game has a bunch of utilities. There is, for instance, a utility that allowed you to import data from (IIRC) the on-line compendium, complete with stats, powers/options, skills, etc. Nearly the whole character sheet of information. I find for monster tokens it has about 70% accuracy. As a result of this, I have more than 5000 monster tokens that are basically done, but for testing and tweaking any errors.
The tokens created with this utility have a number of macros associated with them, which appear in a window as buttons when you click a token. There are also wondows for GM marcors and global macros. So say a combat starts. I select all the tokens that are going to be in the fight, mor maybe in batches if one group has situational modifiers. I push an "add to initiative button" and a window comes up asking if I have any modifiers for the group. I add a modifier or click past that window, and the framework rolls initiative for each creature, adds the creature's intiative bonus, adds any situational bonus you entered in the window, applies the 4e rules for initiative order, and displays a list of creatures in initiative order.
So if I have a PC in that fight, when my turn comes up I attack by clicking the button for whatever power I am using. A window pops up asking who I am attacking, and I select those tokens. I enter any situational modifiers or conditions, click enter, and the framework rolls for my attack, applies ability modifiers, etc., and compares that to the monster's AC; if it is a hit, the framework rolls damage, incorporates any vulnerabilities (say, fire damage to a troll), deducts that from the monster's hit points, changes the monster's hit point bar. If the monster is dead, it changes the monster's image to a skull and moves the token to a different layer so it doesn't accidentally get clicked as the combat continues. If the monster is not dead, it applies any conditions from the attack (say, being knocked prone, or ongoing bleeding), which conditions will be tracked and applied or removed automatically as the combat continues. There are also buttons for ability checks and skill checks if you need to make those.
I can define the way creatures can see. For instance, a creature with normal vision can only see if there is a light source present. A creature with low-light vision can only see if there is a light source present, but the radius the light source illuminates is doubled (I borrowed a 3e rule for this). Things like darkvision and blindsight need no light source to see. I can also define different light sources, which can be carried by tokens or affixed to wall-mounted lamps or whatever. In addition, I can define areas of unnatural darkness, which can override light sources, or parts of light sources, and even types of light like darkvision. So for instance i could have an area where all light sources automatically drop to half their radius.
There is a vision blocking layer for defining lines of light, but there is also a movement blocking layer, and they can be applied individually. So there could be an invisible wall (you can see through it but not move your token through it) or a curtain (you can walk through it but can't see through it. In addition, there is a special vision blocking layer for elevations (you can see them from a distance) or depressions (you can see into the pit, but only if you are right next to it.
In addition to the stationary vision blocking layer, you can add vision blocking or movement blocking to a token or object. So I can make a "door" object which blocks sight and movement, and if I rotate the door to open it, the VBL/MBL moves with the object, allowing tokens to see and walk thought the doorway. Or I could have a curtain object that blocks sight but not movement. I can also make a "difficult terrain" object that requires tokens to expend more movement points when it is crossed.
I can make macros to change a token's image or size. For example, I could have a doppelganger where I click a button, and it looks like a halfling and shrinks to the size of a halfling.
In addition to the basic framework, I have incorporated some other tools that have been created by community members. For instance, there is a tool that lets you assign gear to a token, calculates encumbrance, and tells you if the creature is encumbered. And a calendar tool that lets you create your own calendar and tracks time both on a macro scale for overland travel/downtime, and on a micro scale for dungeon exploration. And it keeps track of dates for holy days, festivals, etc. There are also a bunch of tools that are availabel that I don't use - like teleporters, or switches so that players can open doors if their character is next to one (that one also allows you to just crack the door open, or look through a keyhole).
I can also assign information to objects, so a player can click on a door for a description of it (in case they weren't paying attention during the description). Plus I can add DM text to an object that only I can see, like how difficult it is to force this door or pick the lock. I usually copy paste the key for a room directly into the room's number, so I don't have to go looking for it.
All of which requires a certain amount of work, although the ability to create new macros or customize someone else's macros is nice. So how do these tools compare to the built-in features of Roll20 or Fantasy Grounds?