The church appears to have been built as a single, complete campaign around 1300, an unusual approach in an era when towers were more often added later. It is constructed of brick rather than the granite typical of most Uppland churches, another distinctive feature. From the outset it comprised a nave, a narrower chancel to the east, a west tower and a sacristy north of the chancel; the crossvault in the chancel and barrel vault in the sacristy date from this original build. The nave initially had a wooden barrel vault, replaced with simple crossvaults in the first half of the 15th century, and wall paintings were added in the early 1500s.
In 1717 a five-sided burial chapel, known as the Salstakoret, was built onto the east end for the Bielke family, a project that involved demolishing much of the original east wall; the exterior was whitewashed at the same time, covering earlier brick ornamentation. Further changes came in 1763, when the tower's original narrow windows were replaced with a large round-arched opening and the bells were moved inside. A restoration in 1904 extended the sacristy eastward and uncovered the medieval wall paintings, while a 1961–1963 restoration under architect Jörgen Fåk sought to restore the church's medieval character, including reinstating the original triple-window arrangement in the chancel's east wall (though with the openings bricked up) and making the entrance to the Bielke burial chapel invisible from the nave.
Among the furnishings, the sandstone font dates from the early 1500s and an incense burner survives from the 1300s. The altar cabinet, made in 1491 by the joiner Lars Germundsson of Enköping, contains a carved depiction of Saint Anne with the Virgin and Christ child. The Baroque pulpit was donated in 1752, and four brass chandeliers of varying sizes were given to the church between the mid-1600s and 1767. The church bells date from the 17th century.
Outside, two runestones stand around 150 metres south of the church, and a fragment of a further stone is set into a wall inside the porch. A fourth runestone, recorded in the 1600s and long thought lost, was rediscovered in 2018 built into the old south doorway as a step; because it now lies below floor level, a section of the wooden floor has been cut away so it can be viewed.