Make soft, fluffy cinnamon rolls from scratch with a rich cream cheese frosting. This recipe takes about 3 hours including rise time, but the active work is beginner-friendly. Perfect for weekend breakfast or brunch gatherings.
In a small saucepan or microwave-safe bowl, combine the milk and butter. Heat gently until the butter melts and the mixture reaches about 110°F (warm to the touch, like bathwater). This temperature activates the yeast without killing it.
In a large mixing bowl, combine the warm milk mixture with sugar and yeast. Stir gently and let sit for 5-10 minutes until the yeast becomes foamy and bubbly on top. If it doesn't foam, your yeast may be dead or the liquid too hot/cold—start over.
Add the egg, egg yolk, and salt to the foamy yeast mixture. Whisk or stir until everything is well combined and smooth.
Add the bread flour one cup at a time, stirring after each addition. The dough will start sticky and gradually come together. After adding all the flour, it should be slightly sticky but manageable. Don't add too much extra flour or rolls will be dense.
Turn the dough onto a lightly floured surface. Knead for 8-10 minutes by hand (or 5-6 minutes with a stand mixer using the dough hook). The dough should become smooth, elastic, and slightly tacky but not sticky. Add tiny amounts of flour only if needed.
Place the dough in a greased bowl, turning it once so the top is lightly oiled. Cover with a clean kitchen towel or plastic wrap. Let rise in a warm, draft-free spot for 1-1.5 hours, or until doubled in size.
While the dough rises, mix the softened butter, brown sugar, and cinnamon in a small bowl until it forms a spreadable paste. Set aside at room temperature.
Once doubled, punch down the dough to release air. Turn it onto a lightly floured surface and roll into a large rectangle, about 16x12 inches. The dough should be about 1/4 inch thick. Try to keep edges as straight as possible.
Spread the cinnamon-butter mixture evenly over the entire surface of the dough, leaving a 1/2-inch border along one long edge. Use a spatula or the back of a spoon to spread it to all corners.
Starting from the long edge opposite the border, tightly roll the dough into a log. Keep the roll as tight and even as possible. Pinch the seam closed when you reach the border edge.
Using a sharp knife or unflavored dental floss, cut the log into 12 equal pieces (about 1.5 inches each). For floss method: slide floss under the log, cross ends over the top, and pull tight to slice cleanly without squishing.
Grease a 9x13-inch baking dish with butter. Place the rolls cut-side up in the dish, spacing them evenly (they'll touch as they rise). You should fit all 12 with a little space between each.
Cover the baking dish with a kitchen towel and let the rolls rise for 30-45 minutes, until puffy and touching each other. Meanwhile, preheat your oven to 350°F during the last 10 minutes of rising.
Bake in the preheated 350°F oven for 22-27 minutes, until the tops are golden brown and the center rolls are cooked through (not doughy). The edges will brown faster than the center. Let cool in the pan for 10 minutes.
While rolls cool slightly, beat together the softened cream cheese and butter in a medium bowl until smooth and fluffy. Add powdered sugar and vanilla, then beat until creamy. Add milk one tablespoon at a time until you reach a spreadable consistency.
Spread the cream cheese frosting generously over the warm rolls while they're still in the pan. The warmth will help the frosting melt slightly into the rolls. Serve immediately while warm and gooey, or let cool completely and store covered.