The river has its sources in the Shropshire Hills at White Grit, located in Mid and South-west Shropshire. It has two branches, the East Onny and West Onny, which converge at Eaton, to the east of Lydham. The River Onny then flows in a south-easterly direction, through Craven Arms and Onibury (a village it gives its name to), before it finally has its confluence with the River Teme just upstream of Ludlow at Bromfield.
Geologically, the Onny has the type section just west of Craven Arms of the Caradocian series of the Ordovician system and there is a trilobite genus Onnia.
The River Teme is itself a tributary of the River Severn, confluencing just south of Worcester city centre. The River Severn then flows south-west meeting the sea at Bristol Channel.