0.5 cups unsalted butter – room temperature, cut into small pieces
0.5 cups light brown sugar – packed
0.25 cups granulated sugar
0.25 cups honey
0.25 cups whole milk – at room temperature
1.5 tsp vanilla extract
2 cups raw hazelnuts
0.75 cups powdered sugar – sifted if lumpy
0.25 cups unsweetened cocoa powder – natural, not Dutch-processed
0.25 tsp fine sea salt
2 tbsp neutral oil – (such as grapeseed or sunflower)
1 tsp vanilla extract
3 tbsp whole milk – warmed, plus more as needed to adjust consistency
Instructions
Make the graham cracker dough: In a medium bowl, whisk together the whole wheat graham flour, all-purpose flour, baking powder, baking soda, fine sea salt, and ground cinnamon until well combined.
In a large bowl or the bowl of a stand mixer, combine the unsalted butter, light brown sugar, and granulated sugar. Beat on medium speed until light and slightly fluffy, 2–3 minutes, scraping down the bowl once.
Add the honey, whole milk, and vanilla extract to the butter mixture and beat again until smooth and emulsified, 1–2 minutes. The mixture may look slightly curdled but should come together as you mix.
Add the dry ingredients to the wet ingredients in two additions, mixing on low speed or by hand just until a soft, cohesive dough forms and no streaks of dry flour remain. Do not overmix.
Turn the dough out onto a lightly floured surface and gently knead once or twice to bring it together. Divide the dough into two equal portions and pat each into a flat rectangle about 1 inch thick.
Wrap each portion of dough tightly in plastic wrap and chill in the refrigerator until firm but pliable, at least 45 minutes and up to 24 hours. Chilling helps the crackers roll thinly and bake crisp.
When ready to bake, preheat the oven to 350°F (175°C). Line two large baking sheets with parchment paper.
Roll and cut the graham crackers: Working with one portion of dough at a time, place it on a lightly floured surface. Dust the top lightly with flour and roll the dough into a large rectangle about 1/8 inch thick, rotating and lifting the dough occasionally to prevent sticking.
Using a sharp knife, pizza wheel, or square cookie cutter, cut the rolled dough into rectangles about 2 x 2.5 inches or your preferred size. Use a thin spatula to transfer the rectangles to the prepared baking sheets, spacing them about 1/2 inch apart.
Gather and re-roll the dough scraps once, rolling again to 1/8 inch thick and cutting more rectangles until all the first portion of dough is used. Repeat with the second portion of dough.
Use the tines of a fork to prick small, even holes over the surface of each cracker to help them bake flat. If the dough has softened, place the baking sheets in the refrigerator or freezer for 10–15 minutes before baking to help the crackers hold their shape.
Bake the graham crackers one sheet at a time on the center rack until the edges are lightly browned and the crackers feel dry to the touch, 12–15 minutes, rotating the pan halfway through. For crisper crackers, aim for deeper golden edges.
Remove the baking sheet from the oven and allow the crackers to cool on the pan for 5 minutes, then transfer them to a wire rack to cool completely. They will crisp further as they cool. Repeat with the remaining tray.
Make the chocolate hazelnut spread: While the graham dough is chilling or the crackers are baking, toast the hazelnuts. Preheat the oven (or a second oven if available) to 350°F (175°C) if not already hot. Spread the raw hazelnuts in a single layer on a baking sheet.
Toast the hazelnuts until the skins are deeply cracked and the nuts are fragrant, 10–12 minutes, shaking the pan once halfway through to promote even toasting. Watch carefully so they do not burn.
Remove the hazelnuts from the oven and immediately wrap them in a clean kitchen towel. Rub the nuts together vigorously inside the towel to loosen and remove most of the skins. It is fine if some skins remain.
Transfer the warm, skinned hazelnuts to a food processor. Process the nuts, stopping occasionally to scrape down the sides, until they go from coarse crumbs to a thick paste and finally to a smooth, glossy nut butter, 3–6 minutes total.
Add the powdered sugar, unsweetened cocoa powder, fine sea salt, neutral oil, and vanilla extract to the hazelnut butter. Process until very smooth, stopping once or twice to scrape the sides of the bowl, about 1–2 minutes.
With the food processor running, slowly add the warmed whole milk, starting with 2 tablespoons. Process until fully incorporated and the spread is silky. Check the consistency; if you prefer it thinner and more spreadable, add the remaining tablespoon of milk and process again. The mixture will thicken slightly as it cools.
Transfer the chocolate hazelnut spread to a clean jar or container. Let it cool to room temperature, then cover and refrigerate until needed. For easiest spreading, allow it to soften at room temperature for 10–15 minutes before assembly.
Assemble the graham crackers with chocolate hazelnut spread: Once the graham crackers are completely cool, select pairs of similar-sized crackers. Spread a generous teaspoon to tablespoon of chocolate hazelnut spread onto the underside of one cracker in each pair.
Top each spread-covered cracker with a second cracker, underside down, and press gently to form a sandwich cookie. Wipe away any excess spread that squeezes out the sides.
Arrange the assembled graham cracker sandwiches on a serving plate. Serve immediately for crisp crackers with a soft center, or let them sit 15–20 minutes for the spread to slightly soften the crackers, giving a more cookie-like texture.
Store any leftover plain graham crackers in an airtight container at room temperature for up to 1 week. Store the chocolate hazelnut spread covered in the refrigerator for up to 2 weeks, and bring to room temperature before using. Assembled sandwiches are best eaten within 2–3 days.