The oldest surviving fabric belongs to the nave walls, built of split fieldstone with brick dressings around the end of the twelfth century. The church was extended eastward with a full-width chancel around 1300, and further lengthened westward in the fifteenth century, when the porch was also added. Vaulting was inserted in stages during the same century, and a mansard roof and enlarged windows followed in the late eighteenth century, alongside a new sacristy built in 1778–80 to replace a medieval one on the north side, traces of which have been found archaeologically.
Inside, the church is a plain hall design without wall paintings, its interior shaped by several later interventions. A 1914 restoration altered the colour scheme and widened the western entrance, and decorative chancel paintings added at that time by Filip Månsson were subsequently painted over in 1947. A further restoration in 1993 introduced a limestone chancel floor, new altar rail, adjusted pews and a brick floor in the porch.
Among the fittings, the Flemish altar cabinet, said to have been made around 1520 in Jan Borman's workshop in Brussels, is the most notable object, alongside a late twelfth-century font carved from Mälar sandstone. The pulpit, made in 1650 by Hans Hebel, was moved to its present position in 1778. The current organ was built in 1967 by Åkerman & Lund.
Outside, the freestanding bell tower dates from 1731, replacing earlier structures. In the churchyard stands a rendered brick burial chapel built in 1886 for Count Eric Josias Sparre, designed by the architect Herman Holmgren. A newer section of the churchyard, consecrated in 1981, contains a memorial grove sited on a Bronze Age grave. Nearby, a runestone known as the Brosten, once built into the porch wall, and the visible earthwork remains of the old Husby village site add further layers of history to the setting.