With the terrain hexes of my fractal world generator mapped out, I have the basis of a campaign world in the form of a hex map. The next important feature to add is rivers.
Rivers should begin from the higher points on the map, and snake their way down until they hit a water hex. I first randomly determine how many rivers to place on the map, and then build a list of candidate origin spaces which are the highest points in the elevation map. I then take random candidates from the list, and ensure that they are not too close to the origins of previously formed rivers.
With the origin set, I look at the origin point's neighbor hexes, and move the river down into the one with the lowest elevation. I repeat the process, winding the river down, until it's deposited into a water hex.
For each of the hexes that contains a river, I bump up the moisture level. The intention here is to potentially yield something like the Nile river, which cuts through a desert, but is flanked by lush vegetation.
Here's a river originating in a colder region of the world, beginning in the mountain range to the west. It snakes to the right, then up, and again to the right, to finally run off into the ocean. Cutting through an area of cold desert, the moisture from the river causes evergreen forests and shrubland to grow along its banks.