The core of the church, the two middle bays of the nave, dates from the late 1100s, making it one of the older parish churches in the area. During the medieval period it was extended eastwards around 1250–1275 and again westwards, with the walls raised and given steeper, more Gothic gables around the 1330s. In the mid-1400s the nave received unusually constructed star vaults, and a porch was added later that century, decorated with wall paintings attributed to the so-called Tierp school.
Part of the porch was fitted out as a chapel, thought to be linked to the Swedish regent Sten Sture the Elder, whose coat of arms, along with that of his wife Ingeborg Tott, can be seen among the paintings. This chapel, separated by a screen, is a rare survival of its kind from the medieval period. A planned west tower was only ever built to the height of the rest of the church and was instead converted into a vaulted chapel. A wall painting of Saint Christopher carrying the Christ child, inscribed with the date 1503, can be found on the east wall of the stair turret.
Much of what visitors see inside today reflects an 18th-century refurbishment: the altar, altar rail, altarpiece, pews and gallery all date from this period, alongside an elaborately carved Baroque pulpit from the 1640s. A large 1756 renovation is thought to have covered over some of the medieval wall paintings, which were later uncovered and conserved in a 1932 restoration that also altered the pews.
Among the church's notable furnishings is a copy of an early 14th-century sculpture of Saint Olaf, shown crowned and bearing an axe and orb, trampling a pagan figure beneath him; the original is held at the Swedish History Museum in Stockholm. A triumphal crucifix from around 1275 hangs in the chancel arch, and the font, carved in a four-lobed form, dates from the late 1200s. A silver altar crucifix was donated to the church in 1732 by Baron Axel Löwen.
Outside, two medieval lychgates survive on the north and east sides of the churchyard, the northern one thought to be the oldest; two further gates on the south and west have since been demolished. To the south of the church stands the mid-17th-century Ösbyholm (or Löwen) burial chapel, and just to the east the 1770 Bonde burial chapel, its rendered façade marked with the date in Roman numerals. The churchyard wall itself was built in the early 1800s, largely following the line of its medieval predecessor, and a freestanding bell tower was raised in 1812.