Add the tapioca pearls and water to a medium saucepan. Let soak for 20–45 minutes, or until the pearls are plump and have absorbed most of the water.
Drain any excess water from the saucepan.
Stir in the whole milk, half-and-half, and salt. Cook over medium-low heat, stirring frequently, until the mixture reaches a gentle simmer. Do not allow it to boil over.
Stir in the sugar and continue simmering for 5–7 minutes, stirring frequently, until the tapioca pearls become more translucent and the mixture begins to thicken.
Remove the saucepan from the heat.
Place the beaten eggs in a medium bowl. Slowly whisk a few tablespoons of the hot tapioca mixture into the eggs. Repeat 2–3 times to gradually warm the eggs.
Slowly whisk the tempered egg mixture back into the saucepan.
Return the saucepan to medium-low heat. Cook, stirring constantly, until the pudding thickens enough to coat the back of a spoon. Do not boil.
Remove from the heat and let cool for 10–15 minutes.
Stir in the vanilla extract.
Let the pudding cool, stirring occasionally to prevent a skin from forming. Cover and refrigerate until chilled.
Serve cold or slightly warm.
Notes
Use small tapioca pearls, not instant or quick-cooking tapioca, for this recipe.Tempering the eggs gradually with the hot tapioca mixture helps prevent them from scrambling.The pudding will continue to thicken as it cools. Store leftovers covered in the refrigerator.