A lot has changed in the last 7 months, hence a major update of my FAQ.
The basics: In order to play ROMS or homebrew you need the following: a loader, a flashcart, media for the flashcart (if current gen), and an original DS game (metroid demo works fine).
There are currently four kinds of loaders, PassMe, PassCard, FlashMe, and WifiMe
PassMe: You buy a device which plugs into the DS slot on the DS and plug a game into it. It then allows you to boot DS code (games & homebrew) from the GBA slot where just about all flashcart options go.
PassMeV2: Same as the original PassMe only it also works on newer DS's (Ique, colored, Lite, or newer models of the original DS style). Earlier iterations only worked for one game (which one would choose when they ordered), but now most PassMe2s come with the PassMe1 firmware preloaded, and a programmer with the option of choosing the game yourself and making the PassMe2 compatible with it.
PassCard: Based off Datel’s Max Media Launcher, it’s effectively a very compact easy to use PassMe. It weighs in at no larger than a standard DS cartridge and requires no other DS cartridge or programming to run. There are some differences in the variants however: the original Max Media Launcher doesn’t support sleep mode and has a 3 second intro message that displays.
WiFiMe: Using a wireless card with the RT2500 chipset, and some dos commands you can boot a wireless program that tells the DS to boot from the GBA slot. --note—It doesn’t work with newer DSs or DSlite.
FlashMe: With FlashMe you actually replace the bios on the DS with a modded one. In order to do this though, you need to be able to boot NDS code once. As a result you need either WiFiMe, or a PassMe type device to start the process, but then you don't need it ever again. By holding A+B+X+Y on boot, it automatically boots from the GBA slot without a bulky device hanging out (some flashcarts like the SuperCard will autoboot into DS mode on a flashed DS). You have to short a point underneath the battery cover to install, but I was able to do this very easily with a nail head. Also, for sleep mode to work, you need a DS game in the DS. Current version is V7 and it supports online play as well as the DSLite. –note for DSLite owners—If your hand slips while you are flashing, you can very easily brick your DS, so be very careful. Apparently a Gamecube screw works well for flashing, but you might be better off just using a PassCard all the time. Also, When the DSLite is plugged in, the brightness defaults to the one below the brightest.
Ninjapass: The first combination Passcard and Flashcart. It works much like a normal passcard except that it has 64MB of internal memory for storing DS games. Thats obviosly only enough for 1-2 games making it not a replacement for a traditional flashcart, but its currently the smallest option and does work with a GBA based flashcart. Also pretty obviosly, its never going to support GBA roms. Its a great start and if it had MicroSD support would be a serious next gen flashcart, but for now its just a very fancy loader.
Personal Experience: I used WiFiMe to flash my DS with FlashMe. Once I was done, I had an excellent wireless card that I spent less on than a PassMe and can also double as a wireless router. Neat.
To check firmware version: Start your DS with a game in it and load Pictochat, then take out the game. If the screens turn yellow or magenta, you have a new version firmware and will need a PassMe2 or PassCard.
I personally believe that the last gen flash carts are stupid as they can only hold one or two games at a time and very little if any music or movies. Thus I will not cover them here.
SuperCard: My personal favorite. Comes in either SDcard or Compact Flash versions, and the bios is updated frequently. It currently supports nearly if not ALL DS games and most GBA games. In addition it is the second most supported type of card (the CF version more so) by homebrew, so in various programs you can browse the card for files instead of needing to package them within a rom. It is also the cheapest solution as you can find one for under 40$. The only downside is that there is occasional slowdown in GBA mode, especially with state save enabled (a very cool feature) but it’s not that noticeable on most games. The supercard is also the only flashcart that allows you to link a DS and GBA rom on it together to unlock features on the games that support that normally.
SuperCard Mini: The SuperCard Mini has everything that’s great about the Supercard as well as its issues with GBA playing. A battery has been added to aid with saving and it is now the exact size of a GBA cart. This is the choice between the two for DSLite users as the original supercard hangs out quite a bit. Everyone else is probably better off saving the money.
Supercard Lite: A new version called the Supercard Lite will be out soon which will fit flush with a DSlite and takes microSD memory.
M3: Very similar to the supercard in functionality, though a bit pricier at around 75$. It also comes in either CF or SD forms. The DS support is pretty even with the Supercard though a few more games don't work, but the GBA works perfect with no slowdown even with state save enabled. Aside from that it has a built in media player that does a slightly better job with movies than the current homebrew does. It is probably the best choice if money is of no concern.
M3 mini: Exactly like the M3 only smaller for DSLite owners.
EZ Flash 4: A pretty good choice. GBA support is near perfect, with most roms loading within seconds (though roms larger than 128mbit can take up to 10 minutes) and no slowdown. DS support is also very good, around 90%. It is also very small as it takes MiniSD cards. The only side is that it doesn’t have enormous homebrew support (yet).
Neoflash MK2/3/4: In December this was by far the worst option and it hasn’t improved much since then. The DS rom support is maybe 60%, its expensive, only supports SD, and worst of all requires a separate GBA flash Cart (though this may not be necessary with a Flashed DS). It also doesn’t support GBA at all. I have heard the save system is counterintuitive and hard to use. On top of that, every time you want to lad a game it has to flash to internal memory, which isn’t fast like when its needed for GBA on the supercard, but can take >10 minutes. Also, homebrew support is very low for it. There are some small upsides though. It doubles as a PassMe, but then you still have a bulky thing hanging out the top of your DS. Also, if games require the use of additional RAM in the GBA slot, they could be supported by this cart while it would be more unlikely with a GBA flashcart based solution. Note: Nintendo has officially stated the RAM pack will not be used for games.
GBamp: The original GBA media cart. It takes CF cards and is favored by homebrew makers for some reason (easy card access perhaps?) It is also dirt cheap, selling for 20-25$ on lik-sang. Apparently it was created only to play movies/music off a CF card and the bios was hacked to allow homebrew/commercial code booting. It has recently been further hacked to allow use of the third party patching software for the Max Media Dock giving it around 60% DS compatibility.
Datel Max Media Dock: The biggest plus is that it is sold at Best Buy and other electronic stores so you don’t need to order online. It uses a homebrew program called MoonShell for media playback (which is really cheap of them to not write their own as Datel is a big company), and data is stored on an internal Compact Flash card that is hard to change. Out of the box, it doesn’t support DS roms at all, but this can be fixed with an external program, though support is only around 60%. No GBA support. Recent developments have shown that Datel simply slightly modified and rebranded the GBamp. Software support is now nearly identical, so the GBamp is a much lower cost alternative.
NinjaDS: Promises a lot: a full DS solution without a PassMe or GBA cart, no bigger than a PassCard. It promised all this 6 months ago and there hasn’t been any word since. It could be vaporware. Takes SD media.
Ewin 2: One of the newest flashcarts to appear, available in SD, MicroSD and Mini SD formats. It isn't really very developed yet. The menu is buggy (though pretty), homebrew support is nonexistant, and DS support is around 70%. I don't think it has a GBA support at all either. PassMe2's aren't supported as they can't read the sram from the cart (it actually can work but then you can't save in your DS games), though PassCards should work fine. Be sure to update the firmware to get it to do much of anything, though this too is convoluted aas there is no english page and it requires a complex registration to the chinese one. Overall, one to watch, but not to get quite yet.
-Note- Despite being currently updated, the G6 lite is not a current Gen flashcart as its memory is not expandable (512MB). Functionality is exactly like an M3 and size is the same as an M3 lite.
While there are plenty of homebrew games, I’m going to focus on the best apps instead. Don’t be insulted if your app isn’t listed, chances are, I just don’t know about it (or its functionality is implemented in another app I did list).
MoonShell: In one word: Awesome. It plays MP3, OGG, SPC, NSF, and MOD compatible formats (and probably a few others I forgot) flawlessly. It also can play MPEG-1 video in a special format called DPG. Videos look absolutly beatiful on a DSlite. It is highly customizable, skin able and open source. Best of all it can read files directly from the SD/CF card on the supercard, GBamp, M3, and others. Otherwise you need to build whatever you want to play into the rom.
Win2DS: Here is something to really get exited about. With this app you can fully remote administer your computer from anywhere with a wifi connection. That’s right; you could theoretically go to a starbucks and browse the web on your DS from your PC at home. It also supports using the DS as a wireless keyboard, gamepad and as a mouse. The possibilities are endless. You could map it to remote control a music or video player or perhaps set up an emu and play various old school games on your PC with your new wireless controller.
DSorganize: From a scribble pad to a text editor, to an mp3 player (that isn’t as good as moonshell), to a calculator, to a simple html browser, to a day planner, DSorganize does it all. Files can easily be read on a computer meaning you can effectively use your DS as a portable word processor. Arguably the most useful homebrew of all time.
Beup: Instant message through Microsoft Messenger on your DS.
NDSmail: Check your non-web based email through your DS.
SylphAmp: Stream internet radio and the output of winamp in general to your DS. Can also control playlists.
SylphIRC: Chat on IRC with your DS.
Nitrotracker: A full featured music maker for the DS.
SNESDS: is the one I’m most exited about. Though it only supports 10% of SNES games, it plays the ones it supports full speed with sound. The games look beautiful as well. I don't think it can save on most games though.
Snezzi: Another SNES emu. This one has the distinct advantage of actually being updated, though compatibility still isn’t as good as SNESDS.
Goomba: Plays original GB games perfectly. It resizes the screen and gives you multiple color choices including the default yellow/black of the good old days. (GBA app.)
Goomba Color: Goomba now with GBC support. Unfortunately state saving is broken. And they said it couldn't be done... (GBA app.)
PocketNes: Games play full speed with decent sound. Unfortunately the screen is crushed making games look pretty bad. (GBA app.)
NesDS: Really Really awesome. It has very high compatibilityThe next release will include loading roms direct from the flashcart as well as state save. For now, its like PocketNes only it fits the DS screen and uses a better button mapping (being a DS and not GBA program).
PicoDrive: A work in progress genesis emu. Compatibility is pretty high, but games play at 75% speed without sound. Still very impressive.
There is also a port of SCUMM, a master system emu, pce16, and a few others that I haven't tried.
8/18/06 - Added Ewin2 and NinjaPass, updated Max Media Dock and GBamp