Grease a square baking dish (8x8 or 9x9 inches) with butter and line it with parchment, leaving overhang on 2 sides.
Extra butter, for greasing pan
Add the sugar, butter, and evaporated milk to a medium saucepan over medium heat. Cook for a few minutes, whisking constantly, until the butter has melted and the mixture comes to a low boil. This will take about 5-10 minutes.
2 ½ cups granulated sugar, ¾ cup salted butter, ⅔ cup evaporated milk
Once boiling, cook for an additional 5 minutes at medium or medium-low heat, whisking constantly. If you’re using a thermometer, the temperature should reach between 230°F and 234°F.
Remove from the heat and whisk in the marshmallow creme, extracts, and salt (if using).
7 oz marshmallow creme (1 standard container), 1 tsp vanilla extract, 1 tsp peppermint extract, ¼ tsp sea salt
Quickly pour ⅓ of the hot sugar and marshmallow mixture into a bowl and mix in the white chocolate, stirring until it melts.
4 oz white chocolate, finely chopped (one 4oz bar)
Add the semisweet chocolate to the remaining mixture in the pot and stir until the chocolate melts and mixes in.
8 oz semisweet chocolate, finely chopped (two 4oz bars)
Pour the semisweet chocolate mixture into the prepared baking dish and spread it into an even layer with a spatula. Layer the white chocolate mixture on top of the semisweet as evenly as possible.
Cover with crushed candy canes and let cool at room temperature or in the fridge for 2-3 hours to set.
Crushed candy canes or peppermint candies
Use the parchment overhang to lift the fudge from the dish. Cut it into small squares (we cut this into 48 pieces). Serve at room temperature or chilled.
Notes
If you want bigger pieces of fudge, you can cut this into 36 squares instead or even 25.