La rivière Tresa quitte le lac de Lugano, entre Lavena Ponte Tresa, en Italie et Ponte Tresa en Suisse et se jette dans le lac Majeur, près de Luino, à quelques centaines de mètres après avoir rejoint le Margorabbia. À la sortie du lac de Lugano, le fleuve est traversé par un pont qui unit les parties suisse et italienne de Ponte Tresa, un poste de douane qui les divisent.
La rivière fait 13 km de long et pour la plupart de son cours marque la frontière entre l'Italie et la Province de Varèse et la Suisse avec le canton du Tessin. Elle passe par les communes suisses de Ponte Tresa, Croglio et Monteggio, et en Italie par les communes de Lavena Ponte Tresa, Cremenaga et Luino.
Aménagements
Un barrage sur la rivière, connu sous le nom de barrage de Creva sert à deux fins : utiliser la différence d'altitude entre les lacs pour produire l'énergie hydroélectrique, et autant que possible, de réguler le flux de l'eau dans le lac Majeur, dans le but d'éviter ou de limiter les dangers d'inondation.