Sauté the aromatics: In a medium skillet over medium heat, melt the butter.
Add the chopped onion with a pinch of salt and cook until soft and translucent, about 5 minutes. Stir in the garlic and cook 30 seconds more until fragrant.
Make the roux: Sprinkle the flour over the butter and onions. Stir constantly for 1 to 2 minutes until the mixture turns lightly golden and smells nutty.
Don’t let it brown too much—this gravy should be creamy and lightly colored.
Add the tomatoes: Pour in the diced tomatoes with their juices. Stir well to combine with the roux. It will look thick at first; that’s normal.
Whisk in liquids: Slowly whisk in the milk and 1/2 cup broth.
Keep whisking to smooth out any lumps. If it’s too thick, add the remaining broth a little at a time.
Season and simmer: Stir in the sugar, smoked paprika, and red pepper flakes if using. Season with salt and black pepper.
Bring to a gentle simmer and cook for 5 to 8 minutes, stirring often, until the gravy is silky and coats the back of a spoon.
Adjust texture: If you prefer a smoother gravy, mash the tomatoes lightly with a spoon, or use an immersion blender for a few quick pulses. If it gets too thick, add a splash of milk to loosen.
Taste and finish: Taste and adjust seasoning. You want a balance of creamy, tangy, and savory with a hint of sweetness.
Serve: Spoon generously over warm biscuits.
Add a grind of black pepper on top for that classic Southern look and flavor.