CR 521 begins at an intersection with CR 519 and CR 609 in the community of Hope in Hope Township, Warren County, heading north on two-lane undivided Union Street. The road passes homes before reaching the CR 611 junction and becomes Hope-Blairstown Road, running through wooded areas with some farms and homes. The route reaches an interchange with I-80 and winds north through more rural areas, coming to a junction with CR 608. CR 521 enters Blairstown Township and crosses over the abandoned Lackawanna Cutoff railroad line near the Blairstown station. Further north, the route intersects CR 607 before reaching the Route 94 junction and turns west to form a concurrency with that route. The road crosses Paulins Kill and comes into the community of Blairstown, where CR 521 splits from Route 94 at an intersection with CR 602. At this point, CR 521 heads northeast on Stillwater Road, passing a few businesses. The route enters wooded residential areas before coming into Hardwick Township at the CR 601 intersection. In Hardwick Township, the road heads through a mix of farms, woods, and homes, crossing CR 659 and passing near White Lake. right-of-way in Blairstown CR 521 crosses into Stillwater Township, Sussex County, at which point the name changes to Maple Avenue.The road continues through rural areas as it reaches the residential community of Stillwater, where at the CR 610 intersection CR 521 makes a left turn onto Stillwater Road to continue northeast, reaching the CR 617 junction. The road turns more north as it heads back into rural surroundings and makes a right turn to the east, intersecting CR 612. In this area, the route passes through dense forests with a few homes and runs northeast along the western short of Swartswood Lake, which is contained within Swartswood State Park. Past the lake, CR 521 has an intersection with CR 622 and crosses into Hampton Township, where there are a few farm fields along the road. At an intersection with CR 626, the route makes a turn northwest onto West Shore Drive before turning west onto Kemah Mecca Lake Road. CR 521 continues through mostly forested mountain areas and makes a turn to the north. The road comes to the CR 617 junction and turns northeast onto Mountain Road, entering Frankford Township. The road passes between Stokes State Forest and the residential western shore of Lake Owassa before coming to a junction with US 206 and CR 521 turns north onto that route. The concurrent US 206 and CR 521 heads into Sandyston Township, where it crosses the Appalachian Trail at Culvers Gap in Kittatinny Mountain and passes through the mountainous Stokes State Forest. After heading north with a three-lane stretch that has two southbound lanes and one northbound lane, the two-lane road reaches a junction with CR 560. After this intersection, the road leaves the state forest and continues through wooded areas with some commercial establishments. US 206/CR 521 reaches the community of Hainesville, where it passes through more agricultural surroundings with some development. Leaving Hainesville, the road continues into Montague Township. Near the community of Montague, CR 521 splits from US 206 by heading to the northeast. At this point, the route runs along forested River Road, running a short distance southeast of the Delaware River. Along this stretch, the road passes a few farms and homes. CR 521 comes to its northern terminus at the New York border, where the road is less than 250 feet away from an I-84 underpass. The road continues north to Port Jervis, New York as CR 16.