PA 96 begins at the Maryland border in the community of State Line in Londonderry Township, where the road continues south into Ellerslie, Maryland as MD 35. From the state line, the route heads northeast on two-lane undivided Hyndman Road, passing homes before entering a mix of farms, woods, and residences in a narrow valley. PA 96 enters more forested areas as it runs a short distance to the west of CSX's Keystone Subdivisionrailroad line and Wills Creek. The road runs farther west from the creek and the railroad line as it runs past more farmland and woodland with a few homes, passing through Stringtown and Palo Alto. The route continues through the rural narrow valley and curves northeast, becoming Schellsburg Street before entering the borough of Hyndman. Here, PA 96 passes homes before turning east onto Center Street, at which point it runs past a mix of residences and businesses. The road crosses the CSX rail line and curves to the north, becoming Pennsylvania Avenue. Upon crossing the Wills Creek, the route heads back into Londonderry Township and returns to rural areas with some residential development, passing through Wills Creek. Farther north, the road runs between the base of Savage Mountain to the west and valley farm fields to the east. PA 96 passes through forests before heading back into farmland with some homes, running through Fossilville. The route continues northeast through the narrow agricultural and wooded valley, serving Gravel Pit Station and Madley. The road crosses into Harrison Township and runs through more rural areas with occasional homes, passing through Bard and Buffalo Mills. PA 96 continues through the rural valley for several miles before entering the borough of Manns Choice. Here, the road passes development, coming to an intersection with PA 31. At this point, the two routes turn west to form a concurrency on Allegheny Road, passing by homes. PA 31/PA 96 crosses into Harrison Township and runs through a mix of farmland and woodland with a few residences, curving to the northwest. PA 31 splits to the west and PA 96 continues northwest on Shawnee Road, crossing the Raystown Branch Juniata River into Napier Township. The route passes over I-70/I-76 and heads into forested areas of Shawnee State Park. In this area, the road passes over Shawnee Lake before turning north and running along the western shore of the lake. After leaving the state park, PA 96 enters the borough of Schellsburg and becomes Market Street, passing homes. In the center of the borough, the route intersects US 30. From here, the road passes more residences before becoming the border between Napier Township to the west and Schellsburg to the east. PA 96 fully enters Napier Township again and passes through a mix of woodland and farmland with a few homes as Cortland Road. The road curves northwest and then north again through the countryside, coming to the borough of New Paris. In this borough, the route passes several homes. Crossing back into Napier Township, PA 96 passes through more agricultural areas with some woods and homes. Entering West St. Clair Township, the road passes through more rural areas of farms and woods with a few residences. The route crosses into the borough of Pleasantville, where it comes to a junction with PA 56 in a commercial area. After this, PA 96 becomes King St. Clair Road and crosses back into West St. Clair Township and passes open farmland with some rural homes. The route makes a turn to the east before curving northeast through agricultural areas with some woods and residences, heading into King Township. PA 96 bends to the north and continues to its northern terminus at an intersection with PA 869 in Lincoln Township, with the road continuing north as part of that route.