To begin, heat 1 cup of water in a medium saucepan over medium heat. Add the butter, sugar, and salt, stirring until the butter melts and the mixture reaches a gentle simmer. This will help dissolve the sugar and evenly distribute the salt.
Remove the saucepan from the heat and add the flour all at once. Stir vigorously with a wooden spoon until the mixture forms a smooth dough ball and pulls away from the sides of the pan, about 2-3 minutes.
Let the dough cool for 5 minutes, then add the egg and vanilla extract. Mix well until the egg is fully incorporated, and the dough becomes smooth and slightly sticky. A hand mixer can make this step easier, ensuring even mixing for a better texture.
Transfer the dough to a piping bag fitted with a star tip (large enough for traditional churro ridges). Heat oil in a deep pan to 350°F (175°C), ensuring the oil is hot enough to crisp the churros without absorbing excess oil.
Pipe 4-5 inch lengths of dough directly into the hot oil, using scissors to cut the dough as you release it into the oil. Fry in batches for 4-5 minutes, turning occasionally, until golden brown. Avoid overcrowding to maintain the oil temperature.
Remove the churros from the oil using a slotted spoon, allowing excess oil to drain. Place the churros on paper towels for a few seconds, then immediately roll them in the cinnamon-sugar mixture to coat while they are still warm.
Once the churros are cool enough to handle, fill a pastry bag with dulce de leche or chocolate ganache. Using a long, narrow nozzle, insert the filling into the centre of each churro, squeezing gently to fill evenly. Repeat with each churro.
Serve the filled churros warm, arranged on a plate. For added enjoyment, present with a side of extra dulce de leche or chocolate for dipping. The crispy exterior, sugar-cinnamon coating, and rich filling make for an irresistible treat best enjoyed fresh.