Prep the pans and oven: Heat the oven to 350°F (175°C). Grease two 6-cavity donut pans with nonstick spray. If your spray doesn’t have flour, dust lightly with flour and tap out the excess.
Mix dry ingredients: In a large bowl, whisk 1 3/4 cups flour, 1/3 cup cocoa powder, 3/4 cup sugar, 1 teaspoon baking powder, 1/2 teaspoon baking soda, and 1/2 teaspoon salt until no cocoa clumps remain.
Mix wet ingredients: In a separate bowl, whisk 3/4 cup buttermilk, 2 large eggs, 1/3 cup vegetable oil, 1 teaspoon vanilla, 1 teaspoon white vinegar, and 1–2 teaspoons red food coloring.
Start with 1 teaspoon and adjust color to your liking.
Combine: Pour wet ingredients into the dry. Whisk gently until just combined. The batter should be smooth but not overmixed.
If thick, let it sit for 1–2 minutes to relax.
Fill the pans: Spoon batter into a piping bag or a zip-top bag and snip the corner. Pipe batter into each donut well, filling about 2/3 full. This helps you get clean, even rings.
Bake: Bake 9–11 minutes, until the tops spring back lightly and a toothpick comes out clean or with a few moist crumbs.
Avoid overbaking to keep them tender.
Cool: Let the donuts rest in the pan for 5 minutes. Run a small offset spatula around edges if needed, then transfer to a wire rack to cool completely before glazing.
Make the cream cheese glaze: In a medium bowl, beat 4 ounces softened cream cheese with 2 tablespoons softened butter until smooth. Mix in 1 teaspoon vanilla and a pinch of salt.
Add 1 1/4 to 1 1/2 cups powdered sugar gradually. Thin with 1–3 tablespoons milk or cream until it’s thick yet pourable. You want it to cling but still drip.
Glaze the donuts: Dip the top of each cooled donut into the glaze, let excess drip back into the bowl, and set on the rack.
Add sprinkles or toppings while the glaze is tacky.
Set and serve: Let the glaze set for 15–20 minutes. Enjoy fresh, or chill briefly for a firmer finish.