After using Roll20 for the 2-year DF Whiterock campaign, and using Foundry to run J.C. Connors' Hogwarts oneshot for two groups, I think I've got enough data to decide which to use for my next campaign. To avoid burying the lede, I'll tell you that I prefer Foundry.
From the player's point of view, both VTTs are web-based, so if you have a computer and a supported web browser, you can play. This is great compared to VTTs that require that every player install client software on their computer, because not all players are computer experts.
One difference is maturity. Roll20 has been around for several years and is pretty entrenched as a popular VTT. Foundry just hit the one-year anniversary of its release, so it's not brand new anymore, but it's not as mature. In particular, right now we're in the middle of a transition between the 0.7.x and 0.8.x versions of Foundry, where the newer versions have more cool features but not all modules have been ported to the new versions yet. So, basically, if you're already using Roll20 and you're happy with it, switching will cause you work. Both products have marketplaces where you can buy things like tokens, but Roll20's is more mature and has more stuff. Roll20 has a larger community of players who know it.
Another difference is the cost and payment model. Roll20 is "freemium": it's free for basic use, but you have to pay for some features, like dynamic lighting and API access and more storage space. If you pay, it's a subscription model (about $5/month for "Plus" and $10/month for "Pro", with a 15% discount if you pay for a whole year at once), so you'll have to keep paying periodically if you keep using it. Foundry isn't free at all: you have to pay $50 for a license. But once you have it, it's yours forever and you don't have to keep paying. So which is cheaper is going to depend on what features you need and how long you want to use it. If you're happy with the free version of Roll20, or can't afford a Foundry license, then free is good. On the other hand, if you need any of the features that require paying in Roll20, and use it for more than a few months, Foundry's one-time cost is going to be cheaper than a Roll20 subscription. Note that both VTTs are free for players: if the GM pays the cost, then any players hosted in the GM's games don't have to pay again.
Roll20 is Software As A Service: your games are hosted on Roll20's servers. This has both advantages (there's less computer stuff for the GM to set up) and disadvantages (if their servers are busy hosting too many other games, your performance will suffer). Foundry, on the other hand, is downloadable. The GM has options: they can run it on their own computer, or they can go rent a server somewhere in the cloud and run it there, or they can use a service called Forge that's specifically aimed at hosting Foundry.
The ability to run your own server is nice, as you have complete control, but it also means you need to manage some things for yourself, which perhaps requires more computer skills than some GMs have, or takes time that the GM would rather spend elsewhere. I chose to run Foundry on my Linux desktop, behind a home router, for minimal setup. I had to setup port forwarding on my router for my players to be able to connect from outside my network. And then I chose to setup a DNS name so I could tell my players "connect to hostname:port" instead of "connect to IP address:port". I also had to setup accounts and passwords on my Foundry instance for all my players, a minor annoyance. (Warning: Foundry's passwords are currently not stored in a cryptographically secure manner, so you want to be extra careful not to share them with anything else. I recommend that the GM pick long random passwords for every player and put them in a password manager, then the players put their own password in their own password managers.) For me, the big advantage of self-hosting is that, because I already automatically backup my desktop every night, I get nightly backups of my Foundry game. If I mess something up, I can revert to a previous backup. This gives great confidence to try things, knowing that no matter how horribly I mess things up, I can only lose one day's work. So if I ever decide to move my Foundry instance off my desktop to a dedicated server somewhere, I'll make sure to do daily backups of that server too.
The time setting up the VTT can be dwarfed by the time setting up an adventure, though. It really comes down to how much the GM wants to show on screen. If you want to run a game mostly "theater of the mind" and not use maps or virtual character sheets, then you don't really need a VTT at all: any chat client with a dice rolling plugin will do. If you do want maps, then the amount of prep time required is directly proportional to how many maps you want and how pretty you want to make them. I don't have any artistic ability, so I scrounge the Internet for maps and tokens, using free ones if available, or buying battle maps or token packs I like from artists. If you can't make your own maps and tokens, it ends up being a lot easier to run a fantasy game than other genres, because so many of the maps and tokens out there are aimed at that genre. DF Whiterock was based on the published Castle Whiterock adventure, which came with black and white maps, so I ended up digitally ripping the maps out of the PDF adventure with the pdfimages tool, then using the GIMP image editor to trace the maps to create background images, then pulling the background images into Roll20 to make base maps, then doing my dungeon dressing by finding tokens for furniture, rubble, doors, etc. and placing them on top of the background maps, and then manually adding lines to show where walls blocked line of sight. This was a lot of work.
Doing maps in Foundry is pretty similar to doing them in Roll20. You create a "scene" which is just like a Roll20 map, then you pick a background image, then you can add "tiles" which are background images that sit on top of the map (like furniture) and "tokens" which represent actors (like PCs, NPCs, or monsters). And then you paint walls for your map to block line of sight, and add light sources. One advantage that Foundry has over Roll20 is that doors are specifically supported. In Roll20 I spent a lot of prep time placing door tokens with line of sight blockers under them, and then a lot of game time manually swinging the door token to the side and removing the line of sight blocker when a player opened the door. In Foundry, when you're placing walls you can designate part of the wall as a door (or a secret door, or a window, or a one-way door) and then players can interact with it: click to open or close. (Unless it's locked, in which case trying to open it makes a noise, and the players know their PCs need to unlock the door in-game, at which point the GM can click it to unlock it, and then the players can interact with it as a normal door.) The killer feature I'd really like is auto-walling, where the computer interprets the art and figures out where to put line-of-sight-blocking walls and doors. I believe that's doable for simple maps and really hard for complex maps. Of course, if you buy your maps from an artist that fully supports your VTT, they can create the walls for you.
Doing tokens in Foundry is also pretty similar to doing tokens in Roll20. Foundry does a few things better. For one, tokens come with a facing arrow, so if you play a game where facing matters and use tokens whose facing is not obvious, you don't have to manually add facing indicators to your token art. For another, Foundry has the distinction between "prototype tokens" and "tokens". Basically, the prototype token is the mold from which all tokens for a particular actor are forged, while the token is one instance of a token on-screen. For a singleton character like a PC or a named important NPC, this is a distinction without a difference, so you can click a checkbox to say "link actor data" and establish a 1:1 correspondence between the token and the actor, so that for example if you remove some hit points from the token in scene 1, those hit points will still be lost for the token for the same actor in scene 2. But for an actor like "generic spear-orc" where you might have 50 different instances of the token across different maps, you can drag as many of the token as you like onto the screen, and each will have independent stats based on the prototype. Wounding one does not harm the others. In both VTTs, tokens can have vision and lighting.
"Fog of War" is another feature of most VTTs. The players can only see roughly what their PC should be able to see. Roll20 supports a basic version of Fog of War by default, where the GM manually uncovers parts of the map. Then it supports Dynamic Lighting as a Pro feature, where the GM spends a lot of time adding line of sight blockers, and players can see what their token can see, based on lighting and vision and line of sight. Foundry inverts this: dynamic lighting is the default, but there is a module available that supports manually cleared Fog of War for GMs who prefer that. There are also options for whether previously uncovered parts of the map should remain uncovered simulating the PCs remembering what was there, or should go dark again, forcing the players to remember (or map!)
One complaint I had about Roll20 is that it wasn't great for large maps: if you made the map too many pixels, you got warning popups about performance, and used up more of your limited storage quota on their server, and your players with slower computers might notice decreased performance. This disappointed me because when I wanted a huge map for the Immense Cavern level, I had to break it up into multiple maps, which was more work for me and less seamless for the players as we needed to do manual map moves whenever their tokens crossed a map boundary. It also meant that long-range battles didn't happen much. Unfortunately, the Hogwarts adventure didn't feature any huge maps (the biggest one I made was about 100 yards by 55 yards and worked great), so I haven't actually stress-tested Foundry there. (I mean to do so at some point in the future; feel free to remind me if I forget.)
- Roll20 is cheaper if you only need the free stuff. Foundry is cheaper if you want advanced stuff.
- Roll20 is more mature. So it has more players, more art packs, more D&D adventures, etc.
- Foundry is more flexible in terms of hosting. Roll20 is simpler because there's only one way.
- Foundry supports doors.
- Foundry has better APIs for add-on modules, and thus more cool and useful modules.
- Foundry has better GURPS character sheets.
- I like Foundry better and plan to keep using it for future games.