The river rises at  above sea level in western Augusta County, below Dyers Knob on Shenandoah Mountain along the Virginia-West Virginia border. From the man-made Elkhorn Lake it flows south and then east through the George Washington National Forest.
The river breaks out of the Allegheny Mountains at North River Gap and flows into the broad Valley of Virginia. The river passes through the town of Bridgewater and flows southeast, joining the South River at Port Republic.