Soak tapioca: Place tapioca in a bowl, cover with water, and soak 30 minutes. Drain well.
Heat base: In a saucepan over medium heat, combine milk, sugar, salt, and drained tapioca. Stir frequently as it warms.
Simmer: Reduce to medium-low and simmer 12–18 minutes, stirring often, until pearls are mostly translucent and mixture thickens slightly.
Temper yolks: Whisk yolks in a bowl. Slowly whisk in ½–1 cup hot tapioca mixture, a little at a time.
Thicken: Pour yolk mixture back into the pot while whisking. Cook on low 2–4 minutes, stirring constantly, until creamy and spoon-coating. Do not boil.
Finish: Remove from heat and stir in vanilla (and butter if using).
Chill or serve: Serve warm, or transfer to containers, press plastic wrap onto the surface, and refrigerate at least 3 hours.