Coastal Aviation flies daily between Mafia and Dar es Salaam (US$125), Songo Songo (US$150, minimum two passengers), Zanzibar Island (US$175) and Kilwa Masoko (US$190, minimum four passengers), with connections also to Selous Game Reserve and Arusha. Tropical Air has a slightly cheaper daily flight between Mafia and Dar es Salaam with connections to Zanzibar.
All the Chole Bay hotels arrange airfield transfers for their guests (included in the room price at some; otherwise about US$15 to US$30 per person; enquire when booking).
A small ferry sails daily in each direction between Mafia (Kilindoni port) and Nyamisati village on the mainland south of Dar es Salaam. Departures from Nyamisati are at 4am and from Kilindoni at 6am (Tsh16,000, about four hours). In Kilindoni, the ticketing office is at the top of the hill leading down to the port; buy tickets the afternoon before. In Nyamisati, buy tickets at the port on arrival. While a trickle of budget travellers reach Mafia this way, remember that there is no safety equipment on any of the boats. They are often crowded, and the ride can be windy and extremely choppy in the middle of the channel. Many boats have capsized on this route. If you want to try, it works better from Mafia to the mainland, as the entire journey is done in the daylight, and your hotel can help you get things sorted with the boat.
To reach Nyamisati, get a southbound dalla-dalla from Mbagala Rangi Tatu (Tsh5500), which is along the Kilwa road and reached via dalla-dalla from Dar es Salaam’s Posta (Tsh400); allow up to four hours from central Dar to Nyamisati
To get to Kilndoni's town centre from the port, walk straight up the hill for about 300m. When arriving at Nyamisati, it’s easy to find dalla-dallas north to Mbagala and central Dar es Salaam. Heading south from Nyamisati, you'll need to first get a vehicle to Bungu (Tsh3000) along the main Dar es Salaam–Mtwara road. Once in Bungu, you can get onward transport south to Nangurukuru (for Kilwa) and Mtwara. If you get stuck overnight in Nyamisati, ask for the 'mission', where you can sleep for Tsh10,000 per person.