In between, the route serves three cities of varying size: Norwich, Utica, and Watertown.
It is a two lane, undivided, full access roadway for the majority of its length, except between the village of New Hartford and Alder Creek, where it is a four-lane highway.
It was extended east over the former routing of NY 3 to Alexandria Bay in 1930, then along a new roadway to Morristown in the 1960s.
NY 12 begins at US 11, which connects it to I-81, north of Binghamton in the Broome County town of Chenango.
Near the northern border of Madison County, the route shifts slightly east to bypass a marshy area around the Sangerfield River known as the Ninemile Swamp.
The conditions persist into Oneida County to just south of the Sangerfield hamlet of the same name, where the swamp ends as the river curves away from NY 12.
Outside of Waterville, NY 12 heads north once more through hilly, sparsely populated areas of New York toward Utica.
After the Burrstone Road interchange, the arterial becomes a divided highway through downtown before becoming limited-access once more just past Noyes Street.
[3] Between Oriskany Street and the New York State Thruway (I-90), NY 5, 8, and 12 is part of the Interstate Highway System as I-790 overlaps all three routes northward over the Mohawk River and the Erie Canal before leaving the arterial at a large interchange on the north bank of the canal.
[3] From Alder Creek to Boonville, NY 12 loosely follows the path of the Black River as it heads northwest.
[3] The path of NY 12 through New York's North Country consists of three primary subregions: rural Lewis County, urban Watertown, and the numerous communities that line the southern bank of the St. Lawrence River, here the geographical divide between the United States and Canada.
From here to the area surrounding Copenhagen, NY 12 passes through largely undeveloped terrain, save for a pair of isolated roadside communities.
At the intersection with CR 67, NY 12 turns to the north and enters Watertown as Gifford Street.
From here, NY 12 continues approximately ten miles (16 km) north and reaches the village of Clayton on the St. Lawrence River.
[3] NY 12 continues northeast along the south bank of the St. Lawrence, intersecting Mason Point Road (a local road leading to a Thousand Islands-bound ferry) and NY 180, and passing south of Grass Point State Park prior to encountering I-81, at exit 50, four miles (6.4 km) southwest of the village of Alexandria Bay.
[3] Outside of Alexandria Bay, NY 12 temporarily turns east and leaves the riverbank to avoid Goose Bay, a small body of water partially separated from the St. Lawrence by two protruding points of land.
NY 12 continues along the southern bank of the St. Lawrence River as it proceeds through the rural western portion of the county.
Route 25 originally went directly from Barneveld to Remsen;[7][8] however, it was realigned by 1920 to serve the village of Prospect to the east.
[2] At the time, the segment of legislative Route 27 between Clayton and Alexandria Bay was designated as part of NY 3.
[2][9] In the late 1920s, NY 12 was realigned between Sherburne and Utica to follow a more direct alignment between the two locations via Sangerfield.
The nearly one mile stretch had signalized at-grade intersections that were causing safety concerns and some fatalities.
The pedestrian bridge was opened by December 2014, and the remainder of the project was completed by October 2017.
[23][24] Construction began by 1956 on a southward extension of the bypass that would take NY 12 around the eastern edge of Barneveld.
[26] Farther south, in Utica, a new limited-access highway was built through the downtown portion of the city in the early 1960s.
[31] The current bypass around the western edge of the village was built in the late 1970s and completed by 1981.
All of the routes were assigned as part of the 1930 renumbering of state highways in New York unless otherwise noted.